您的位置:首页 > 数据库 > Oracle

oracle 条件查询,比较运算符,逻辑运算符,特殊运算符,判断空值,大小写敏感,多行,多列子查询

2013-04-03 11:50 821 查看
比较运算符

>,<:大于,小于

>=.<=:大于等于,小于等于

=:等于

!=,<>,^=:不等于

逻辑运算符运算的优先顺序是NOT,AND,OR。如果要改变优先顺序,可以使用括号

逻辑运算符

AND:逻辑与,表示两个条件必须同时满足

OR:逻辑或,表示两个条件中有一个条件满足即可

NOT:逻辑非,返回与某条件相反的结果

特殊运算符

[NOT] BETWEEN…AND…:用于测试是否在范围内

[NOT] IN (…):用于测试是否在列表中

[NOT] LIKE:用于进行模式匹配

IS [NOT] NULL:用于测试是否为空值

ANY SOME:同列表或查询中的每一个值进行比较,测试是否有一个满足,前面必须使用的运算符包括=、!=、>=、<=、>、<等

ALL:同列表或查询中的每一个值进行比较,测试是否所有的值都满足,前面必须使用的运算符包括=、!=、>=、<=、>、<等

[NOT] EXISTS:测试是否子查询至少返回一行

IN的用法

使用以下运算形式,可以显示值满足特定集合的结果:

[NOT] IN (...)

显示职务为“SALESMAN',“CLERK”和“MANAGER”的雇员信息。

输入并执行查询:

Sql代码

SELECT * FROM emp WHERE job IN ('SALESMAN','CLERK','MANAGER');

SELECT * FROM emp WHERE job IN ('SALESMAN','CLERK','MANAGER');


执行结果从略。

注意:如果在IN前面增加NOT,将显示职务不在集合列表中的雇员。以上用法同样适用于数值型集合,

多行子查询

如果子查询返回多行的结果,则我们称它为多行子查询。多行子查询要使用不同的比较运算符号,它们是IN、ANY和ALL。

查询工资低于任何一个“CLERK”的工资的雇员信息。

执行以下查询:

Sql代码

SELECT empno, ename, job,sal FROM emp
WHERE sal < ANY (SELECT sal FROM emp WHERE job = 'CLERK')

AND job <> 'CLERK';

SELECT  empno, ename, job,sal FROM emp
WHERE   sal < ANY (SELECT sal FROM emp WHERE job = 'CLERK')
AND job <> 'CLERK';


执行结果为:

Sql代码

EMPNO ENAME JOB SAL
------------------- ------------ ----------------- ---------------------

7521 WARD SALESMAN 1250
7654 MARTIN SALESMAN 1250

EMPNO ENAME      JOB              SAL
------------------- ------------ ----------------- ---------------------
7521 WARD       SALESMAN         1250
7654 MARTIN     SALESMAN         1250


说明:在emp表的雇员中有4个职务为“CLERK”,他们的工资分别是800、1100、950、1300。满足工资小于任何一个“CLERK”的工资的记录有2个,在这里使用了ANY运算符表示小于子查询中的任何一个工资。

注意:条件job <> 'CLERK'排除了职务是CLERK的雇员本身。

查询工资比所有的“SALESMAN”都高的雇员的编号、名字和工资。

执行以下查询:

Sql代码

SELECT empno, ename,sal FROM emp WHERE sal > ALL(SELECT sal FROM emp WHERE job= 'SALESMAN');

SELECT  empno, ename,sal FROM emp
WHERE sal > ALL(SELECT sal FROM emp WHERE job= 'SALESMAN');


执行结果为:

Sql代码

EMPNO ENAME SAL
---------------- ------------- -----------------------

7566 JONES 2975
7698 BLAKE 2850
7782 CLARK 2450
7788 SCOTT 3000
7839 KING 5000
7902 FORD 3000

EMPNO ENAME             SAL
---------------- ------------- -----------------------
7566 JONES           	   2975
7698 BLAKE          	   2850
7782 CLARK          	   2450
7788 SCOTT          	   3000
7839 KING           	   5000
7902 FORD           	   3000


说明:在emp表的雇员中有4个职务为“SALESMAN”,他们的工资分别是1600、1250、1250、1500。在这里使用了ALL运算符,表示大于查询中所有的工资。

查询部门20中职务同部门10的雇员一样的雇员信息。

执行以下查询:

Sql代码

SELECT empno, ename, job FROM emp
WHERE job IN (SELECT job FROM emp WHERE deptno=10)

AND deptno =20;

SELECT  empno, ename, job FROM emp
WHERE   job IN (SELECT job FROM emp WHERE deptno=10)
AND deptno =20;


执行结果为:

Sql代码

EMPNO ENAME JOB
------------------ -------------- ----------------------

7369 SMITH CLERK
7876 ADAMS CLERK
7566 JONES MANAGER

EMPNO ENAME          JOB
------------------ -------------- ----------------------
7369 SMITH     	CLERK
7876 ADAMS      	CLERK
7566 JONES      	MANAGER


说明:在该训练中,使用IN运算符表示职务是子查询结果中的任何一个。部门10中有3种职务:MANAGER、PRESIDENT和CLERK,以上查询得到的是部门20中是这3种职务的雇员。

多列子查询

如果子查询返回多列,则对应的比较条件中也应该出现多列,这种查询称为多列子查询。以下是多列子查询的训练实例。

查询职务和部门与SCOTT相同的雇员的信息。

执行以下查询:

Sql代码

SELECT empno, ename, sal FROM emp WHERE (job,deptno) =(SELECT job,deptno FROM emp WHERE empno=7788);

SELECT  empno, ename, sal FROM emp
WHERE (job,deptno) =(SELECT job,deptno FROM emp WHERE empno=7788);


执行结果为:

Sql代码

EMPNO ENAME JOB
------------------ --------------- ----------------

7902 FORD ANALYST

EMPNO ENAME      JOB
------------------ --------------- ----------------
7902 FORD        ANALYST


说明:在该例的子查询中返回两列,查询条件中也要出现两列,表示雇员的职务和部门应该和SCOTT的职务和部门相同。

LIKE的用法

使用LIKE操作符可完成按通配符查找字符串的查询操作,该操作符适合于对数据进行模糊查询。其语句法为:

[NOT] LIKE 匹配模式

匹配模式中除了可以包含固定的字符之外,还可以包含以下的通配符:

%:代表0个或多个任意字符。

_ :代表一个任意字符。

显示姓名以“S”开头的雇员信息。

输入并执行查询:

Sql代码

SELECT * FROM emp WHERE ename LIKE 'S%';

SELECT * FROM emp WHERE ename LIKE 'S%';


执行结果为:

Sql代码

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------------- -------------- ------------------------- ---------- ------------------ ----------- ------------ ------------------

7369 SMITH CLERK 7902 17-12月-80 800 20
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20

EMPNO ENAME    	JOB     		MGR HIREDATE     SAL   COMM     DEPTNO
------------- -------------- ------------------------- ---------- ------------------ ----------- ------------ ------------------
7369 SMITH    CLERK 7902 17-12月-80       800     20
7788 SCOTT    ANALYST	7566 19-4月 -87   3000           20


说明:SMITH和SCOTT名字均以S开头,名字后边的字符和长度任意。

显示姓名第二个字符为“A”的雇员信息。

执行查询:

Sql代码

SELECT * FROM emp WHERE ename LIKE '_A%';

SELECT * FROM emp WHERE ename LIKE '_A%';


说明:“_”代表第一个字符任意,第二个字符必须为“A”,“%”代表第二个字符后面的字符为任意字符,个数任意。

判断空值NULL

在表中,字段值可以是空,表示该字段没有内容。如果不填写,或设置为空则我们说该字段的内容为NULL。NULL没有数据类型,也没有具体的值,但是使用特定运算可以判断出来。这个运算就是:

IS [NOT] NULL

显示经理编号没有填写的雇员。

输入并执行查询:

Sql代码

SELECT ename, mgr FROM emp WHERE mgr IS NULL;

SELECT  ename, mgr FROM emp WHERE mgr IS NULL;


执行结果为:

Sql代码

ENAME MGR
------------ ---------------

KING

ENAME     MGR
------------ ---------------
KING


注意:以下用法是错误的。

SELECT ename, mgr FROM emp WHERE mgr=NULL;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: