比较运算符 > < >= <= = !=和<>
- 查询工资大于等于3000的员工姓名,工资和工作
select name,sal,job from emp where sal>=3000;
- 查询1号部门的员工姓名,工资,部门id
select name,sal,dept_id from emp where dept_id=1;
- 查询程序员的名字和工资
select name,sal from emp where job="程序员";
- 查询员工表中不是销售的员工姓名和工作(两种写法)
select name,job from emp where job!="销售";
select name,job from emp where job<>"销售";
and 和 or 和 not
- and: 等效java中的&&, 需要多个条件同时满足时使用
- or: 等效java中的|| , 多个条件满足一个时使用
- 查询1号部门工资高于2000的员工信息
select * from emp where dept_id=1 and sal>2000;
- 查询3号部门或工资等于5000的员工信息
select * from emp where dept_id=3 or sal=5000;
- 查询出CEO和项目经理的名字
select name from emp where job="CEO" or job="项目经理";
- 查询有奖金的销售名字和奖金
select name,comm from emp where comm>0 and job="销售";
is null 和 is not null
- 查询有上级领导的员工姓名和领导id
select name,manager from emp where manager is not null;
- 查询没有上级领导的员工姓名和领导id
select name,manager from emp where manager is null;
between 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;
in(x,y,z)
- 当查询某个字段的值等于多个值的时候使用
- 查询工资等于1500,3000和5000的员工姓名和工资
select name,sal from emp where sal=1500 or sal=3000 or sal=5000;
select name,sal from emp where sal in(1500,3000,5000);
- 查询工作不是销售和程序员的信息
select * from emp where job not in("销售","程序员");
distinct去重
- 去掉重复的数据
- 查询员工表中出现了哪几种不同的工作
select distinct job from emp;
- 查询员工表中出现了哪几个部门的id
select distinct dept_id from emp;
模糊查询like
- %: 代表0或多个未知字符
- _:代表1个未知字符
- 举例:
- 以x开头 x%
- 以x结尾 %x
- 包含x %x%
- 第二个字符是x _x%
- 以x开头以y结尾 x%y
- 第三个是x倒数第二个是y __x%y_
- 查询姓孙的员工信息
select * from emp where name like "孙%";
- 查询名字以精结尾的员工姓名
select name from emp where name like "%精";
- 查询工作中包含销售的员工信息
select * from emp where job like "%销售%";
- 查询工作中第二个字是售的员工姓名和工作
select name,job from emp where job like "_售%";
- 查询名字中包含僧 并且工资高于2000的员工姓名和工资
select name,sal from emp where name like "%僧%" and sal>2000;
- 查询1号和2号部门中工作以市开头的员工信息
select * from emp where job like "市%" and dept_id in(1,2);
排序 order by
- 格式: order by 字段名 asc升序(默认)/desc降序;
- 查询员工姓名和工资,按照工资升序排序
select name,sal from emp order by sal;
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;
分页查询
- 格式: limit 跳过的条数,请求的条数(每页的条数)
- 跳过的条数= (请求的页数-1)*每页的条数
- 举例:
- 查询第一页的5条数据(1-5) limit 0,5
- 查询第2页的5条数据(6-10) limit 5,5
- 查询第5页的5条数据 limit 20,5
- 查询第8页的10条数据 limit 70,10
- 查询第7页的8条数据 limit 48,8
- 查询工资最低的3个人的信息
select * from emp order by sal limit 0,3;
- 查询工资最高的员工信息
select * from emp order by sal desc limit 0,1;
- 按照入职日期排序 查询第2页的3条数据
select * from emp order by hiredate limit 3,3;
- 按照工资升序排序查询第3页的2条数据
select * from emp order by sal limit 4,2;
别名
select name as "名字" from emp;
select name "名字" from emp;
select name 名字 from emp;
聚合函数
- 通过聚合函数可以对查询的多条数据进行统计查询
- 有哪些统计方式?
- 平均值avg
- 最大值max
- 最小值min
- 求和sum
- 计数count
- 平均值avg()
- 查询1号部门的平均工资
select avg(sal) from emp where dept_id=1;
- 最大值max()
- 查询1号部门的最高工资
select max(sal) from emp where dept_id=1;
- 最小值min()
- 查询1号部门的最低工资
select min(sal) from emp where dept_id=1;
- 求和sum()
- 查询程序员的工资总和
select sum(sal) from emp where job="程序员";
- 计数count(*)
- 查询员工表的人数
select count(*) from emp;
分组查询group by
- 可以将某个字段相同值的数据划分为一组,然后以组为单位进行统计查询
- 如果题目中出现每个或每种这样的关键字 并且查询的内容为聚合函数的结果
- 查询每个部门的平均工资
select dept_id,avg(sal) from emp group by dept_id;
- 查询每个部门的最高工资
select dept_id,max(sal) from emp group by dept_id;
- 查询每种工作的平均工资
select job,avg(sal) from emp group by job;
- 查询每个部门工资高于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;
having关键字
- where后面只能写普通字段条件,不能写聚合函数条件
- having后面专门写聚合函数条件,而且需要和group by分组查询结合使用,写在group by 的后面
- 查询每个部门的平均工资,要求平均工资大于2000
select dept_id,avg(sal) from emp group by dept_id having avg(sal)>2000;
select dept_id,avg(sal) a from emp group by dept_id having a>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;
各种查询相关的关键字顺序
-
select 字段信息 from 表名 where 普通字段条件 group by 分组字段名 having 聚合函数条件 order by 排序字段名 limit 跳过条数,请求条数.
子查询(嵌套查询)
- 可以将一条SQL语句查询的结果当做另外一条SQL语句条件的值
- 查询工资最低的员工的同事们的信息(指同一部门)
- 得到最低工资
select min(sal) from emp;
- 通过最低工资得到拿最低工资人的部门id
select dept_id from emp where sal=(select min(sal) from emp);
- 通过部门id查询员工
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);