美文网首页
九、子查询

九、子查询

作者: 天天阳光好 | 来源:发表于2017-04-20 11:50 被阅读0次

    一、定义

    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

    相关文章

      网友评论

          本文标题:九、子查询

          本文链接:https://www.haomeiwen.com/subject/siwkzttx.html