目录
子查询
一、子查询定义:
二、使用子查询的原则:
三、单行子查询(算术运算符):
1.单行子查询定义:
四、多行子查询(IN、ANY、ALL):
2.1多行子查询定义:
2.2多行子查询中使用ANY运算符
2.3多行子 查询中使用ALL运算符
2.4子查询中的空值
重点:
注意:
子查询
一、子查询定义:
子查询是一个 SELECT 语句,它是嵌在另一个 SELECT 语句中的子
句。使用子查询可以用简单的语句构建功能强大的语句。
可以将子查询放在许多的 SQL 子句中,包括:
WHERE 子句
HAVING 子句
FROM 子句
二、使用子查询的原则:
1.子查询放在圆括号中。
2.将子查询放在比较条件的右边。
3.在单行子查询中用单行运算符,在多行子查询中用多行运算符。
例:SELECT
e.LAST_NAME,e.DEPARTMENT_ID FROM employees e
where e.DEPARTMENT_ID =
(SELECT e1.department_id FROM employees e1 where e1.last_name = 'fox');
表示:查询与Fox同一部门的同事,并显示他们的名字与部门ID。
分析:先查出Fox的部门编号,再查与Fox部门编号相同的同事;
三、单行子查询(算术运算符):
1.单行子查询定义:
单行子查询是从内查询返回一行的查询。在该子查询类型中用一个单行操作符。
注意:如果子查询返回的结果为多行,则属于多行子查询。
例:SELECT
e.LAST_NAME,e.DEPARTMENT_ID FROM employees e
where e.DEPARTMENT_ID =
(SELECT e1.department_id FROM employees e1 where e1.last_name = 'fox') and e.LAST_NAME <> 'fox';
表示:查询 Fox的同事,但是不包含他自己。
四、多行子查询(IN、ANY、ALL):
2.1多行子查询定义:
子查询返回多行被称为多行子查询。对多行子查询要使用多行运算
符而不是单行运算符。
2.2多行子查询中使用ANY运算符
**ANY 运算符:**
ANY 运算符比较一个值与一个子查询返回的任意一个值。
< ANY 意思是小于最大值。
> ANY 意思是大于最小值。
= ANY 等同于 IN。
2.3多行子 查询中使用ALL运算符
ALL 运算符比较一个值与子查询返回的全部值。
< ALL 意思是小于最小值。
> ALL 意思是大于最大值,
NOT 运算符可以与 IN运算符一起使用。
2.4子查询中的空值
重点:
内查询返回的值含有空值,并因此整个查询无返回行,原因是用大
于、小于或不等于比较Null值,都返回null。所以,只要空值可能是
子查询结果集的一部分,就不能用 NOT IN 运算符。NOT IN 运算符
相当于 <> ALL。
注意:
空值作为一个子查询结果集的一部分,如果使用 IN 操作符的
话,就不是个问题,可以正常使用。IN 操作符相当于 =ANY。
例:SELECT e.LAST_NAME,e.SALARY,e.DEPARTMENT_ID
FROM employees e
WHERE e.SALARY IN (SELECT MIN(e1.salary) FROM employees e1 GROUP BY e1.JOB_ID);
表示:查找各部门收入为部门最低的那些雇员。显示他们的名字,薪水以及部门ID。
分析:先用子查询找出各部门薪资最低的工资,再用多行函数表示出薪资在最低工资范围的那些名字、工资、部门
例:SELECT e1.DEPARTMENT_ID,e1.last_name,e1.job_id
FROM employees e1
WHERE e1.DEPARTMENT_ID IN
(SELECT d.DEPARTMENT_ID FROM departments d where d.DEPARTMENT_NAME = 'Executive');
表示:显示在 Executive 部门的每个雇员的 department number、last
name 和 job ID。