JSD-2204-Sql语句-分组-分页-排序-模糊-子查询-Day09

1.Sql

1.1导入*.sql 批处理文件

  • 此文件是通过三方工具从MySQL数据库里面导出的数据文件
  • 通过在命令行中执行以下指令将此文件的数据导入到自己数据库软件中
    • source 路径;
    • source d:/emp.sql;
  • 检测是否成功: 执行以下SQL语句 检查是否出现员工的信息
    • select * from emp;
  • 如果查询员工表得到乱码 执行以下指令后再重新测试
    • set names utf8;
    • set names gbk;

1.2比较运算符 > < >= <= = !=和<>

  • 查询工资小于等于3000的员工姓名和工资
    • select name,sal from emp where sal<=3000;
  • 查询程序员的名字
    • select name from emp where job='程序员';
  • 查询2号部门的员工姓名,工资和工作
    • select name,sal,job from emp where dept_id=2;
  • 查询不是人事的员工姓名和工作(两种写法)
    • select name,job from emp where job!='人事';
    • select name,job from emp where job<>'人事';

1.3and,or,not

  • and:当查询多个条件同时满足时使用
  • or:当多个条件只需要满足某一个时使用
  • not 取反
  • 查询1号部门工资高于2000的员工信息
    • select * from emp where dept_id=1 and sal>2000;
  • 查询三号部门或工资等于5000的员工信息
    • select * from emp where dept_id=3 or sal=5000;
  • 查询有上级领导的员工姓名
    • select name from emp where manager is not null;
  • 查询出CEO和项目经理的名字
    • select name from emp where job='CEO' or job='项目经理';
  • 查询有奖金的销售名字和奖金
    • select name,comm from emp where comm>0 and job='销售';

1.4between x and y 两者之间 包含x和y

  • 查询工资在2000到3000之间的员工信息
    • select * from emp where sal>=2000 and sal<=3000;
    • select * from emp where sal between 2000 and 3000;
  • 查询工资在2000到3000以外的员工信息
    • select * from emp where sal not between 2000 and 3000;

1.5in(x,y,z)

  • 当查询某个字段的值为多个值的时候使用in关键字
  • 查询工资等于1500,3000和5000的员工信息
    • select * from emp where sal=1500 or sal=3000 or sal=5000;
    • select * from emp where sal in(1500,3000,5000);
  • 查询工作不是销售和程序员的信息
    • select * from emp where job not in('销售','程序员');

1.6去重distinct

  • 查询员工表中出现了哪几种不同的工作
    • select distinct job from emp;
  • 查询员工表中有哪几种不同的部门id
    • select distinct dept_id from emp;

1.7综合练习题

  1. 查询2号部门工资高于1000的员工信息
    1. select * from emp where dept_id=2 and sal>1000;
  2. 查询3号部门或工资等于5000的员工信息
    1. select * from emp where dept_id=3 or sal=5000;
  3. 查询工资在1000到2000之间的员工姓名和工资
    1. select name,sal from emp where sal between 1000 and 2000;
  4. 查询工资不等于3000和5000的员工信息
    1. select * from emp where sal not in(3000,5000);
  5. 查询1号部门有哪几种不同的工作
    1. select distinct job from emp where dept_id=1;

2.模糊查询like

  • %: 代表0或多个未知字符
  • _: 代表1个未知字符
  • 举例:
  • x开头 x%
  • x结尾 %x
  • 包含x %x%
  • 第二个字符是x _x%
  • x开头y结尾 x%y
  • 第二个是x倒数第三个是y _x%y__
  • 查询名字姓孙的员工姓名
    • select name from emp where name like "孙%";
  • 查询名字中包含僧的员工信息
    • select * from emp where name like "%僧%";
  • 查询名字以精结尾的员工姓名
    • select name from emp where name like "%精";
  • 查询工作中包含销售并且工资大于1500的员工信息
    • select * from emp where job like "%销售%" and sal>1500;
  • 查询工作中第二个字是售的员工姓名和工作
    • select name,job from emp where job like "_售%";
  • 查询1号和2号部门中工作以市开头的员工信息
    • select * from emp where dept_id in(1,2) and job like "市%";

3.排序 分页

3.1排序 order by

  • 格式: order by 排序的字段名 asc升序(默认)/desc降序;
  • 查询每个员工姓名和工资,按照工资升序排序
    • select name, sal from emp order by sal;
    • select name, sal from emp order by sal asc;
    • select name, sal from emp order by sal desc;
  • 查询工资高于2000的员工姓名和工资, 按照工资降序排序
    • select name,sal from emp where sal>2000 order by sal desc;
  • 查询每个员工的姓名,工资和部门id 按照部门id升序排序,如果部门id一致则按照工资降序排序
    • select name,sal,dept_id from emp order by dept_id,sal desc;

3.2综合练习题:

  • 查询有领导的员工信息,按照入职日期(hiredate) 升序排序
    • select * from emp where manager is not null order by hiredate;
  • 查询1号部门中名字中包含八的员工信息
    • select * from emp where dept_id=1 and name like "%八%";
  • 查询2号和3号部门中工资低于1500的员工信息
    • select * from emp where dept_id in(2,3) and sal<1500;
  • 查询人事和程序员中工资高于2500的员工姓名,工资和工作
    • select name,sal,job from emp where job in('人事','程序员') and sal>2500;
  • 查询不是CEO的员工中工资高于2000的员工姓名,工资和工作,并且按照工资降序排序
    • select name,sal,job from emp where job!='CEO' and sal>2000 order by sal desc;

3.3分页查询limit

  • 格式: limit 跳过的条数,请求的条数(每页的条数)
  • 跳过的条数=(请求的页数-1)*每页的条数
  • 举例:
  • 第1页的5条数据 limit 0,5
  • 第2页的5条数据 limit 5,5
  • 第5页的10条数据 limit 40 ,10
  • 第10页的10条数 limit 90,10
  • 第8页的6条数据 limit 42,6
  1. 查询所有员工的姓名和工资,按照工资升序排序,请求第1页的5条数据
    1. select name,sal from emp order by sal limit 0,5;
  2. 查询所有员工的姓名和工资,按照工资升序排序,请求第2页的5条数据
    1. select name,sal from emp order by sal limit 5,5;
  3. 查询工资最高的员工信息
    1. select * from emp order by sal desc limit 0,1;
  4. 按照入职日期排序 查询第2页的3条数据
    1. select * from emp order by hiredate limit 3,3;
  5. 按照工资升序排序查询第3页的2条数据
    1. select * from emp order by sal limit 4,2;

3.4别名

  • select name as "名字" from emp;
  • select name "名字" from emp;
  • select name 名字 from emp;

3.5综合练习题

1. 查询员工表中3号部门工资高于1500的员工信息

        select * from emp where dept_id=3 and sal>1500;

2. 查询2号部门员工或者没有领导的员工信息

        select * from emp where dept_id=2 or manager is null;

3. 查询有领导的员工姓名,工资按照工资降序排序

        select name,sal from emp where manager is not null order by sal desc;

4. 查询2号和3号部门的员工姓名和入职日期hiredate按照入职日期降序排序

        select name,hiredate from emp where dept_id in(2,3) order by hiredate desc;

5. 查询名字中包含僧和包含精的员工姓名

        select name from emp where name like "%僧%" or name like "%精%";

6. 查询工资高于2000的工作有哪几种?

        select distinct job from emp where sal>2000;

7. 查询工资升序第4页的2条数据

        select * from emp order by sal limit 6,2;

4.聚合函数 分组

  • 将查询到的多条数据进行统计查询
  • 统计方式包括:
  • 求平均值
  • 最大值
  • 最小值
  • 求和
  • 计数
  • 平均值:avg(字段名)

1.查询1号部门的平均工资

select avg(sal) from emp where dept_id=1;

  • 最大值:max(字段名)

2.查询1号部门的最高工资

select max(sal) from emp where dept_id=1;

  • 最小值:min(字段名)

3.查询1号部门的最低工资

select min(sal) from emp where dept_id=1;

  • 求和: sum(字段名)

4.查询1号部门的工资总和

select sum(sal) from emp where dept_id=1;

  • 计数: count(*)

5.查询程序员的数量

select count(*) from emp where job='程序员';

4.1聚合函数练习题

  • 查询销售的平均工资
    • select avg(sal) from emp where job="销售";
  • 查询程序员的最高工资
    • select max(sal) from emp where job="程序员";
  • 查询名字包含精的员工数量
    • select count(*) from emp where name like "%精%";
  • 查询和销售相关的工作一个月工资总和
    • select sum(sal) from emp where job like "%销售%";
  • 查询2号部门的最高工资和最低工资起别名
    • select max(sal) 最高工资,min(sal) 最低工资 from emp where dept_id=2;

4.2分组查询group by

  • 分组查询可以将某个字段相同值的数据划分为一组,然后以组为单位进行统计查询
  • 查询每个部门的平均工资
    • select dept_id,avg(sal) from emp group by dept_id;
  • 查询每种工作的平均工资
    • select job,avg(sal) from emp group by job;
  • 查询每个部门的最高工资
    • select dept_id,max(sal) from emp group by dept_id;
  • 查询每个部门工资高于2000的人数
    • select dept_id,count(*) from emp where sal>2000 group by dept_id;
  • 查询每种工作的最低工资
    • select job,min(sal) from emp group by job;
  • 查询1号部门和2号部门的人数
    • select dept_id,count(*) from emp where dept_id in(1,2) group by dept_id;
  • 查询平均工资最高的部门id和平均工资
    • select dept_id,avg(sal) from emp group by dept_id order by avg(sal) desc limit 0,1;
  • 通过别名将重复出现的内容 复用
    • select dept_id,avg(sal) a from emp group by dept_id order by a desc limit 0,1;

4.3having 分组判断

  • where后面只能写普通字段条件,不能写聚合函数条件
  • having后面是专门用来写聚合函数条件, having要和分组查询结合使用不要单独使用,having写在group by的后面
  • 查询每个部门的平均工资,只查询出平均工资大于2000
    • select dept_id,avg(sal) from empgroup by dept_id having avg(sal)>2000 ;
  • 查询每种工作的人数,只查询人数大于1的
    • select job,count(*) c from emp group by job having c>1;
  • 查询每个部门的工资总和,只查询有领导的员工, 并且要求工资总和大于5400.
    • select dept_id,sum(sal) s from emp where manager is not null group by dept_id having s>5400;
  • 查询每个部门的平均工资, 只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的
    • select dept_id,avg(sal) a from emp where sal between 1000 and 3000 group by dept_id having a>=2000;

5.子查询

  • 查询工资高于2号部门平均工资的员工信息
    • select avg(sal) from emp where dept_id=2;
    • select * from emp where sal>(select avg(sal) from emp where dept_id=2);
  • 查询拿最高工资的员工信息
    • select max(sal) from emp;
    • select * from emp where sal=(select max(sal) from emp);
  • 查询工资高于程序员最高工资的员工信息
    • select * from emp
    • where sal>(select max(sal) from emp where job='程序员')
  • 查询和孙悟空相同工作的员工信息
    • select * from emp where job=(select job from emp where name='孙悟空') and name!='孙悟空';
  • 查询拿最低工资员工的同事们的信息(同事指同一部门)
    • select min(sal) from emp;
    • select dept_id from emp where sal=(select min(sal) from emp)
    • 最终语句:
    • select * from emp where dept_id=(select dept_id from emp where sal=(select min(sal) from emp)) and sal!=(select min(sal) from emp);

6.数值计算+ - * / %

  • 查询每个员工的姓名,工资和年终奖(5个月的工资)
    • select name,sal,5*sal 年终奖 from emp;
  • 给每个3号部门的员工涨薪5块钱
    • update emp set sal=sal+5 where dept_id=3;

7.练习题69道

1. 查询工资大于等于3000的员工姓名和工资 
2. 查询1号部门的员工姓名和工作
3. 查询不是程序员的员工姓名和工作(两种写法)
4. 查询奖金等于300的员工姓名,工资和工作  
5. 查询1号部门工资大于2000的员工信息
6. 查询3号部门或工资等于5000的员工信息
7. 查询出CEO和项目经理的名字
8. 查询工资为3000,1500和5000的员工信息
9. 查询工资不等于3000,1500和5000的员工信息
10. 查询工资在1000到2000之间的员工信息
11. 查询工资在1000到2000以外的员工信息
12. 查询有领导的员工姓名和领导id
13. 查询没有领导的员工姓名和领导id
14. 查询员工表中出现了哪几种不同的工作
15. 查询员工表中出现了那几个部门的id
16. 查询姓孙的员工姓名
17. 查询名字最后一个字是精的员工信息
18. 查询工作中包含销售的员工信息
19. 查询工作中第二个字是售的员工信息
20. 查询名字中包含僧的员工并且工资高于2000的员工信息
21. 查询1号和2号部门中工作以市开头的员工信息
22. 查询所有员工的姓名和工资 按照工资升序排序
23. 查询所有员工的姓名和工资 按照工资降序排序
24. 查询所有员工姓名 工资和部门id 按照部门id降序排序,如果部门id一致则按照工资升序排序
25. 查询员工表中3号部门工资高于1500的员工信息
26. 查询2号部门员工或者没有领导的员工信息
27. 查询有领导的员工姓名,工资按照工资降序排序
28. 查询2号和3号部门的员工姓名和入职日期hiredate 按照入职日期降序排序
29. 查询名字中包含僧和包含精的员工姓名
30. 查询工资高于2000的工作有哪几种?
31. 查询工资最高的前三个员工
32. 查询员工表按照id排序, 第2页的5条数据
33. 查询员工表按照id排序, 第3页的4条数据
34. 查询3号部门工资最低的员工姓名和工资
35. 查询工作不是人事的员工中工资降序第二页的3条数据    
36. 查询每个员工的姓名,工资和年终奖(年终奖=5个月的工资)
37. 给3号部门所有员工涨薪5块钱 
38. 查询没有领导的员工和3号部门的员工,工资降序取前三条
39. 查询2号部门的最高工资 
40. 查询有领导的员工中工资在1000到2000之间的人数
41. 查询3号部门的工资总和  
42. 查询程序员和销售的总人数 
43. 查询1号部门有领导的员工的平均工资
44. 查询1号部门的最低工资和最高工资
45. 查询和销售相关的工作人数
46. 查询工资不是1500和3000的员工人数
47. 查询1号部门出现了哪几种工作
48. 查询名字包含精的员工数量
49. 查询和销售相关的工作一个月工资总和
50. 查询2号部门的最高工资和最低工资起别名
51.查询每个部门的平均工资
52.查询每种工作的平均工资
53.查询每个部门的最高工资
54.查询每种工作的最低工资
55.查询每个部门工资高于2000的人数
56.查询每个部门有领导的员工人数
57.查询1号部门每种工作的最低工资
58.查询平均工资最高的部门id和平均工资
59.查询每个部门的平均工资,要求平均工资大于2000
60.查询每种工作的人数,只查询人数大于1的
61.查询每个部门的工资总和,只查询有领导的员工, 并且要求工资总和大于5400.
62.查询每个部门的平均工资, 只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的
64.查询工资大于2号部门平均工资的员工信息
65.查询工资高于程序员最高工资的员工信息
66.查询工资最高的员工信息
67.查询孙悟空的部门信息(用到dept部门表)
68.查询和孙悟空相同工作的其它员工信息
69.查询最低工资员工的同事信息(同事代表同一部门)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值