子查询:多表查询的另一种方式

上一篇我们介绍了如何在 SQL 语句中使用连接查询(JOIN)获取多个表中的关联数据,具体讨论了内连接、左/右/全外连接、交叉连接、自然连接以及自连接的原理和使用方法。

除了连接查询,SQL 还提供了另一种同时查询多个表的方法:子查询(Subquery)。本篇我们就来了解一下各种类型的子查询和相关的运算符。

什么是子查询?

我们先来考虑一个问题,哪些员工的月薪大于所有员工的平均月薪?可以先使用 AVG 函数获取所有员工的平均月薪:

SELECT AVG(salary)
  FROM employee;

AVG(salary)|
-----------|
9832.000000|

然后将该查询的结果作为下面语句的查询条件,返回月薪大于 9832 的员工:

SELECT emp_name, salary
  FROM employee
 WHERE salary > 9832;

该语句的结果如下:

subquery

我们使用了两个查询来解决这个简单的问题,然而实际应用中的需求往往更加复杂;显然我们需要更加高级的查询功能。

SQL 提供了一种查询方式叫做子查询,可以非常容易地解决这个问题:

SELECT emp_name, salary
  FROM employee
 WHERE salary > (
                 SELECT AVG(salary)
                   FROM employee
                );

猜你喜欢

转载自blog.csdn.net/horses/article/details/108729099