上一篇我们介绍了如何在 SQL 语句中使用连接查询(JOIN)获取多个表中的关联数据,具体讨论了内连接、左/右/全外连接、交叉连接、自然连接以及自连接的原理和使用方法。
除了连接查询,SQL 还提供了另一种同时查询多个表的方法:子查询(Subquery)。本篇我们就来了解一下各种类型的子查询和相关的运算符。
什么是子查询?
我们先来考虑一个问题,哪些员工的月薪大于所有员工的平均月薪?可以先使用 AVG 函数获取所有员工的平均月薪:
SELECT AVG(salary)
FROM employee;
AVG(salary)|
-----------|
9832.000000|
然后将该查询的结果作为下面语句的查询条件,返回月薪大于 9832 的员工:
SELECT emp_name, salary
FROM employee
WHERE salary > 9832;
该语句的结果如下:
我们使用了两个查询来解决这个简单的问题,然而实际应用中的需求往往更加复杂;显然我们需要更加高级的查询功能。
SQL 提供了一种查询方式叫做子查询,可以非常容易地解决这个问题:
SELECT emp_name, salary
FROM employee
WHERE salary > (
SELECT AVG(salary)
FROM employee
);