使用子查询
==================
子查询通常称为嵌套SELECT,Sub-SELECT或内部SELECT语句。
子查询在主查询之前执行一次。
子查询的结果由主查询(外部查询)使用。
您可以将子查询放在许多SQL子句中。
WHERE子句
HAVING子句
FROM子句(内联子查询/内联视图)
1.嵌套查询必须返回一个单列。
2.运算符之间不能在子查询中使用。
3.结果只能包含最外部查询中引用的表中的列。
子查询的类型
---------------------------
单行子查询:-
从内部SELECT语句仅返回一行的查询。
多行子查询:-
从内部SELECT语句返回多个行。
注意:
---------
比较运算符分为两类。 :
单行运算符(>,> =,=,<>,<,<=)
多行运算符(IN,ANY,SOME,ALL)
句法
---------
SELECT select_list FROM表
WHERE expr运算子(SELECT select_list FROM table);
**请勿在子查询中添加ORDER BY子句。
*对单行子查询使用单行运算符。
*对多行子查询使用多行运算符。
单行子查询的示例示例:-
================================
例子1
谁比empno 7566收入更高
SELECT * FROM emp WHERE sal >(SELECT sal FROM emp WHERE empno=7566);
范例#2
显示工作等于7369的员工的详细信息
SELECT * FROM emp
WHERE job= (SELECT job FROM emp WHERE empno=7369);
例子#3
显示其职务与雇员7369相同且工资高于雇员7876的雇员。
SELECT * FROM emp WHERE job= (SELECT job FROM emp
WHERE empno=7369) AND Sal > ( SELECT Sal FROM emp WHERE empno=7876);
在子查询中使用组功能
================================
例子1
--------------------
显示所有工资等于最低工资的雇员的详细信息。
SELECT * FROM emp
WHERE sal = (SELECT MIN(sal) FROM emp);
Exp:-MIN组函数向外部查询返回一个值(800)。
通过在子查询中使用组函数返回单行来显示来自主查询的数据。
对子查询使用HAVING子句***************
Oracle Server将结果返回到主查询的HAVING子句中。
范例#2
------------------------
显示所有最低工资高于部门20的MIN(Sal)的部门;
SELECT deptno, MIN(sal) FROM emp GROUP BY deptno HAVING MIN(sal) >
( SELECT MIN(sal) FROM emp WHERE deptno=20);
deptno = 20的最低工资是800。
即子查询是800
主查询比较MIN(sal)> 800;
例子#3
----------------------
找到平均薪水最低的工作。
SELECT job, AVG(sal) FROM emp GROUP BY job
HAVING AVG(sal) = (SELECT MIN(AVG(sal)) FROM emp GROUP BY job);
同时检查使用子查询-2
From: https://bytes.com/topic/oracle/insights/739004-using-subqueries-1-a