Oracle教程
Oracle练习题

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在处理时,首先将数字转换成字符串然后进行处理。