九、子查询

一、定义

1. 子查询(subquery):是被另一个查询包围的查询,也可称为内层查询(INNER query),另一个查询可称为外层查询(OUTER query)

① 非关联子查询:即子查询可以独立运行且不会引用外层查询的任何结果;

② 关联子查询:子查询依赖外层查询,它需要来自外层的查询结果

备注:

外层查询+内层查询=以子查询进行查询

子查询的查询速度低于连接


二、非关联子查询

1.代码

SELECT tb1.column_name1,tb1.column_name2,tb2.column_name3 FROM

table_name1 AS tb1 NATURAL JOIN  table_name2 AS tb2

WHERE 

tb2.column_name3 IN(SELECT column_name3 FROM table_name3)

也可使用 'NOT IN' 查找不符合的结果

3、注意事项

① WHERE后可以使用比较运算符;但是大部分时间里需返回单一值,'IN'除外;

② 使用‘=’比较运算符时,内层查询返回的结果是一个单一值(SQL称为标量值),例如:

SELECT name FROM table_name 

WHERE

zip_code=(SELECT zip_code FROM table_name1 WHERE province='sichuan' AND city='guangan')

③ 子查询在SELECT的列名中

SELECT name,

(SELECT province FROM table_name2 WHERE tb1.zip_code=zip_code)  AS province 

FROM table_name1 tb1

子查询每次返回一个值,整个查询跟着返回一行,逐次循环返回结果。


三、关联子查询

1.NOT EXISTS 和 EXISTS

常用于找出外层查询结果不存在于关联表里的记录

SELECT name tb1.email email FROM table_name1 

WHERE NOT EXISTS

(SELECT * FROM table_name2 WHERE tb1.id=tb2.id)

2.EXISTS

同理,也可找出外层查询结果存在于关联表里的记录

即把NOT EXISTS 改成 EXISTS

你可能感兴趣的:(九、子查询)