Oracle之子查询

来源:互联网 发布:查看电脑端口号 编辑:程序博客网 时间:2024/04/28 17:38

子查询:在一个查询的内部还包括另外一个查询,则此查询位子查询,子查询的格式:


SELECT {DISTINCT} * | 列名称1 别名1, 列名称2 别名2,FROM 表名1 别名1 , 表名2 别名2 ,(SELECT {DISTINCT} * | 列名称1 别名1, 列名称2 别名2,FROM 表名1 别名1 , 表名2 别名2 ,{WHERE 条件(s)}{GROUP BY 分组条件{HAVING 分组条件}}{ORDER BY 排序字段ASC|DESC , 排序字段ACS | DESC , }{WHERE 条件(s)(SELECT {DISTINCT} * | 列名称1 别名1, 列名称2 别名2,FROM 表名1 别名1 , 表名2 别名2 ,{WHERE 条件(s)}{GROUP BY 分组条件{HAVING 分组条件}}{ORDER BY 排序字段ASC|DESC , 排序字段ACS | DESC , }}{GROUP BY 分组条件{HAVING 分组条件}}{ORDER BY 排序字段ASC|DESC , 排序字段ACS | DESC , }

所有的子查询必须在“()”中编写代码。


SELECT * FROM empWHERE sal IN (SELECT MIN(sal) FROM emp GROUP BY deptno) ;




ANY操作:
=ANY : 与 IN的操作符功能完全一样
SELECT * FROM empWHERE sal =ANY (SELECT MIN(sal) FROM emp GROUP BY deptno) ;


>ANY : 比里面最小的值要小
SELECT * FROM empWHERE sal >ANY (SELECT MIN(sal) FROM emp GROUP BY deptno) ;


<ANY : 比最大的值要小
SELECT * FROM empWHERE sal <ANY (SELECT MIN(sal) FROM emp GROUP BY deptno) ;




ALL操作:
>ALL :比最大的值要大
SELECT * FROM empWHERE sal >ALL (SELECT MIN(sal) FROM emp GROUP BY deptno) ;


<ALL 比最小的值要小
SELECT * FROM empWHERE sal <ALL (SELECT MIN(sal) FROM emp GROUP BY deptno) ;


对于子查询来讲,还可以进行多列子查询,一个子查询中同时返回多个查询的列。
SELECT *FROM empWHERE (sal,NVL(comm,-1)) IN (SELECT sal,NVL(comm,-1) FROM emp WHERE deptno=20) ;



















原创粉丝点击