Oracle条件查询
条件查询需要用到where语句,where必须放到from语句表的后面。
支持如下运算符
运算法
说明
=
等于
<>或!=
不等于
<
小于
<=
小于等于
>
大于
>=
大于等于
between … and ….
两个值之间
is null
为null
等号操作符
● 查询薪水为5000的员工
select empno, ename, sal from emp where sal=5000;
<>操作符
● 查询薪水不等于5000的员工
select empno, ename, sal from emp where sal <> 5000;
● 查询工作岗位不等于MANAGER的员工
select empno, ename, sal from emp where job <> 'MANAGER';
在sql语句中如果是字符串采用单引号引起来,不同于java中采用双引号,如果是数值型可以用单引号引起来,但是一定要保证字符串的内容可以转换为数字。
between … and …操作符
● 查询薪水为1600到3000的员工(第一种方式,采用>=和<=)
select empno, ename, sal from emp where sal >=1600 and sal <=3000;
● 查询薪水为1600到3000的员工(第二种方式,采用between … and …)
select empno, ename, sal from emp where sal between 1600 and 3000;
between ….and …,包含最大值和最小值。
between ….and …不仅仅可以应用到数值类型的数据上,还可以使用在字符类型的数据上。
between ….and …对于两个参数的设定一定是小的数在前,大的数在后。
is null
Null为空,但不是空串,为null可以设置这个字段不同填值,如果查询为null的字段,采用is null。
● 查询津贴为空的员工
select * from emp where comm is null;
● 查询津贴不为空的员工
select * from emp where comm is not null;
and
and表示并且的含义,表示所有的条件必须满足。
● 工作岗位为MANAGER,薪水大于2500的员工
select empno, ename, sal from emp where job='MANAGER' and sal>2500;
or
or,只要满足条件即可,相当于包含。
● 查询出job为manager和job为salesman的员工
select * from emp where job='MANAGER' or job='SALESMAN';
表达式的优先级
● 查询薪水大于1800,并且部门代码为20或30的(错误的写法)
select * from emp where sal>1800 and deptno=20 or deptno=30;
以上输出是错误的,由于表达式优先级导致的,首先查询出sal>1800 and deptno=20的员工,在和并上deptno=30的员工。
● 查询薪水大于1800,并且部门代码为20或30的(正确的写法)
select * from emp where sal>1800 and (deptno=20 or deptno=30);
关于运算符的问题:不用记,没有把握尽量采用括号。
in
in表示包含的意思,完全可以采用or来表示,采用in会更简洁一些。
● 查询出job为manager和job为salesman的员工
select * from emp where job in('MANAGER','SALESMAN');
not
● 查询job不等于MANAGER并且不能与SALESMAN的员工(第一种写法)
select * from emp where job <> 'MANAGER' and job <> 'SALESMAN';
● 查询job不等于MANAGER并且不能与SALESMAN的员工(第二种写法)
select * from emp where job not in('MANAGER','SALESMAN');
like
Like可以实现模糊查询,like支持%和下划线匹配。
● 查询姓名以M开头所有的员工
select * from emp where ename like ' M %';
● 查询姓名以T结尾的所有的员工
select * from emp where ename like '%T';
● 查询姓名中包含O的所有的员工
select * from emp where ename like '%O%';
● 查询姓名中第二个字符为A的所有员工
select * from emp where ename like '_A%';
Like中%和下划线的差别?
%匹配任意字符出现任意次数
下划线只匹配任意字符出现一次
Like语句可以应用到数值类型的数据上,但是如果不用‘’括起来的话,那么不可以使用%和下划线,类似于等号(=),如果使用‘’括起来的话,那么可以使用%和下划线,用法和字符类型的一样。因为SQL在处理时,首先将数字转换成字符串然后进行处理。