本质:
sql查询的结果是一个结果集,无论如何这个结果集就有四种情况.
[1]一个数值
[2]一列值
[3]一条记录(一行)
[4]多行多列
那么,我们就可以将子查询视为一种结果集的嵌套.
这样,使用子查询和我们之前的sql根本没有任何区别.
只要我们可以理解子查询的结果集的原理,我们就能使用子查询完成各种查询的嵌套.
但是过多的子查询会使sql的效率变得很低,这也就是我后面会讨论的sql的优化问题.
子查询的命名:
标量子查询(一个数值)
列子查询(一列多行)
行子查询(结果集为一行多列)
表子查询(多行多列)
标量子查询
SELECT last_name,employee_id,salary
FROM employees
WHERE salary>(
SELECT AVG(salary)
FROM employees
);
我们的子查询的结果为一个数值.
列子查询:
SELECT last_name,employee_id
FROM employees
WHERE department_id IN(
SELECT DISTINCT department_id
FROM employees
WHERE last_name LIKE '%u%'
);
结果集返回一个列值.
从上面的内容可以看出,我们使用子查询只要知道结果集,那么就可以使用子查询.