过滤条件有:
- 比较:=、>、<、>=、<=、!=、<>、between and
- 逻辑:and、or、not、union、union all、intersect、minus
- null:is null、is not null、not is null
- 模糊查询:like:% _
- in、exists
- 子查询
语句:
where 条件
执行流程:
from→where→select
一、比较条件
1、=
-- 查询部门编号为30的员工
select * from emp where deptno = 30
运行结果 |
---|
2、>
-- 查询工资大于1500的员工
select * from emp where sal > 1500
运行结果 |
---|
3、<
-- 查询工资小于1500的员工
select * from emp where sal < 1500
运行结果 |
---|
4、>=
-- 查询工资大于等于1600的员工
select * from emp where sal >= 1600
运行结果 |
---|
5、<=
-- 查询工资小于等于1600的员工
select * from emp where sal <= 1600
运行结果 |
---|
6、!=|<>
!=
和<>
的效果是一样的
-- 查询不是30部门的员工 !=
select * from emp where deptno != 30
-- 查询不是30部门的员工 <>
select * from emp where deptno <> 30
运行结果 |
---|
7、between and
between and
就是大于等于某个值,并且小于等于某个值
-- 大于等于并且小于等于
select * from emp where sal between 1250 and 1500
运行结果 |
---|
二、逻辑运算
1、and
并且,满足左边并且满足右边
-- and
select * from emp where sal >= 1250 and sal<=1500
运行结果 |
---|
2、or
或,满足左边或者右边
-- or
select * from emp where deptno = 20 or deptno = 30
运行结果 |
---|
3、not
取反
-- 不在部门30的员工
select * from emp where not deptno = 30
运行结果 |
---|
4、union
并集,去除重复,两个结果集的并集,默认规则排序
select * from emp where deptno = 30
union
select * from emp where deptno = 20
运行结果 |
---|
5、union all
和上面一样,不过不会去除重复的记录值,不进行排序
select * from emp where mgr = 7839
union all
select * from emp where deptno = 20
运行结果 |
---|
6、intersect
交集,找出重复的记录,两个结果集的交集,默认排序
select * from emp where mgr = 7839
intersect
select * from emp where deptno = 20
运行结果 |
---|
7、minus
差集,去掉重复记录,两个结果集的差集,默认排序
select * from emp where sal >=1500
minus
select * from emp where sal <=3000
运行结果 |
---|
三、null
1、is null
是否为null
-- 没有奖金的员工
select * from emp where comm is null
运行结果 |
---|
2、is not null|not is null
不为null,
is not null
和not is null
一致
-- 有奖金的员工
select * from emp where not comm is null
select * from emp where comm is not null
运行结果 |
---|
四、模糊查询
Tips:模糊查询效率低
语法:like 通配符
1、%
%:任意个符号,零至任意个符号
-- 名字中带N的员工
select * from emp where ename like '%N%'
运行结果 |
---|
2、_
_:一个字符
-- 名字的第一个字母是A的员工
select * from emp where ename like '_A%'
运行结果 |
---|
五、in和exists
1、in
相当于多个
or
-- 20部门和30部门的员工
select * from emp where deptno in (20,30)
运行结果 |
---|
2、exists
如果exists有结果,则外层保留数据,内查询借助外部数据
select * from emp e1 where exists(select * from emp e2 where e1.deptno = e2.deptno)
运行结果 |
---|
六、子查询
-- 有员工的部门的部门名称
select dname from dept where deptno in (select distinct deptno from emp)
运行结果 |
---|