Oracle笔记(下) 多表查询

范例:要求查询出高于公司平均工资的全部雇员信息


公司的平均工资应该使用AVG()函数求出。


SELECT AVG(sal) FROM emp;

此时数据的返回结果是单行单列的数据,在WHERE之中出现。


SELECT * FROM emp

WHERE sal>(

SELECT AVG(sal)

FROM emp);

以上所返回的是单行单列,但是在子查询之中,也可以返回单行多列的数据,只是这种子查询很少出现。


范例:子查询返回单行多列数据


SELECT * FROM emp

WHERE (job,sal)=(

SELECT job,sal

FROM emp

WHERE ename='ALLEN');

如果现在的子查询返回的是多行单列数据的话,这个时候就需要使用三种判断符判断了:IN、ANY、ALL;


1、 IN操作符:用于指定一个子查询的判断范围


这个操作符的使用实际上与之前讲解的IN是一样的,唯一不同的是,里面的范围由子查询指定了。


SELECT * FROM emp

WHERE sal in (

SELECT sal

FROM emp

WHERE job='MANAGER');

但是在使用IN的时候还要注意NOT IN的问题,如果使用NOT IN操作,在子查询之中,如果有一个内容是null,则不会查


询出任何的结果。


2、 ANY操作符:与每一个内容想匹配,有三种匹配形式


=ANY:功能与IN操作符是完全一样的;


SELECT * FROM emp

WHERE sal=ANY (

SELECT sal

FROM emp

WHERE job='MANAGER');

>ANY:比子查询中返回记录最小的还要大的数据;


SELECT * FROM emp

WHERE sal>ANY (

SELECT sal

FROM emp

WHERE job='MANAGER');

<ANY:比子查询中返回记录的最大的还要小;


SELECT * FROM emp

WHERE sal<ANY (

SELECT sal

FROM emp

WHERE job='MANAGER');

3、 ALL操作符:与每一个内容相匹配,有两种匹配形式:


>ALL:比子查询中返回的最大的记录还要大


SELECT * FROM emp

WHERE sal>ALL (

SELECT sal

FROM emp

WHERE job='MANAGER');

<ALL:比子查询中返回的最小的记录还要小


SELECT * FROM emp

WHERE sal<ALL (

SELECT sal

FROM emp

WHERE job='MANAGER');

以上的所有子查询都是在WHERE子句中出现的,那么下面再来观察在FROM子句中出现的查询,这个子查询一般返回的是多行多列的数据,当作一张临时表的方式来处理。


原文:http://bbs.landingbj.com/t-0-243782-1.html

其他参考链接如下:http://bbs.landingbj.com

-The End-


你可能感兴趣的:(oracle,多表,平均工资)