SQL学习笔记8——SQL中检索数据之子查询
其他
2020-04-05 18:34:12
阅读次数: 0
SQL学习笔记8——SQL中检索数据之子查询
含义
- 嵌套在其他语句内部的select语句称为子查询或内查询,
- 外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多
- 外面如果为select语句,则此语句称为外查询或主查询
分类
- 按出现位置
- select后面:仅仅支持标量子查询
- from后面:支持表子查询
- where或having后面:标量子查询、列子查询、行子查询
- exists后面(相关子查询):标量子查询、列子查询、行子查询、表子查询,exists()相当于一个函数,存在则返回1否则返回0,结果可作为布尔值做逻辑运算
- 按结果集的行列
- 标量子查询(单行子查询):结果集为一行一列
- 列子查询(多行子查询):结果集为多行一列
- 行子查询:结果集为多行多列,一般为一行多列
- 表子查询:结果集为多行多列
示例
- where或having后面
- 特点
- 子查询放在小括号内
- 子查询一般放在条件的右侧
- 标量子查询,一般搭配单行操作符使用< > >= <= = <>
- 列子查询,一般搭配多行操作符使用IN ANY/SOME ALL
- 子查询的执行优先于主查询,主查询的条件用到了子查询的结果
- 案例
#标量子查询
USE myemployees;
SELECT
*
FROM
employees
WHERE
salary > ( SELECT salary FROM employees WHERE last_name = 'Abel' );
- 返回location_id是1400或1700的部门编号
# 列子查询
SELECT
last_name
FROM
employees
WHERE
department_id IN ( SELECT DISTINCT department_id FROM departments WHERE location_id IN ( 1400, 1700 ) );
#行子查询
SELECT *
FROM employees
WHERE (employee_id,salary)=(
SELECT MIN(employee_id),MAX(salary)
FROM employees
);
- select后面
比较容易理解,但要注意仅仅支持标量子查询
- from后面
将子查询结果充当一张表,要求必须起别名
- exists后面(相关子查询)
SELECT bo.*
FROM boys bo
WHERE NOT EXISTS(
SELECT boyfriend_id
FROM beauty b
WHERE bo.id=b.boyfriend_id
);
转载自www.cnblogs.com/sanmujun/p/12638345.html