006 子查询

本质:

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%'
);

结果集返回一个列值.

 

从上面的内容可以看出,我们使用子查询只要知道结果集,那么就可以使用子查询.

 

posted @ 2018-03-02 13:32  最爱五仁月饼  阅读(138)  评论(0编辑  收藏  举报