Skip to content

子查询

子查询在主查询之前一次执行完成 子查询的结果被主查询使用

sql
# 谁的工资比 Abel 高
SELECT last_name, salary
FROM employees
WHERE last_name = 'Abel';

SELECT last_name, salary
FROM employees
WHERE salary > 11000;

# 自连接实现
SELECT e2.last_name, e2.salary
FROM employees e1, employees e2
WHERE e2.salary > e1.salary
AND e1.last_name = 'Abel';

# 子查询实现
# 外查询(主查询)
SELECT last_name, salary
FROM employees
WHERE salary > (
  # 内查询(子查询)
  SELECT salary
  FROM employees
  WHERE last_name = 'Abel'
);

子查询包在括号内 子查询写在比较条件的右侧 单行操作符对应单行子查询 多行操作符对应多行子查询

子查询的分类

从内查询返回结果的条目数

  • 单行子查询

    内查询只查询出一个结果

  • 多行子查询

    内查询只查询出多个结果

从内查询是否被执行多次

  • 相关子查询

    如查询工资大于所属部门平均工资的员工

  • 不相关子查询

    如查询工资大于公司平均工资的员工