博客
关于我
第十章:SQL Server2019数据库之多行子查询
阅读量:114 次
发布时间:2019-02-26

本文共 2173 字,大约阅读时间需要 7 分钟。

学前必备知识

本章将介绍多行子查询的核心操作符及其应用,包括 IN、NOT IN、EXISTS、NOT EXISTS、ALL、ANY 和 SOME 等操作符。


一、IN 和 NOT IN 操作符的多行子查询

IN 子查询用于在外层查询和子查询之间建立关联,判断某个属性列是否存在于子查询结果中。IN 子查询的返回值可以是零个或多个值,而外层查询会基于子查询的结果进行筛选。

IN 子查询的使用步骤

  • 执行内部子查询:子查询返回一个结果集。
  • 外层查询基于子查询结果进行筛选:IN 子查询的结果用于与外层查询的列进行比较,返回匹配的记录。
  • 示例

    【示例01】

    获取 tb_book 图书表和 tb_book_author 作者表中具有相同部门的作者所写的图书信息。
    SQL 语句:

    SELECT * FROM tb_book  WHERE book_sort IN(SELECT tb_author_department FROM tb_book_author WHERE tb_book.book_sort = tb_book_author.tb_author_department)  ORDER BY book_price;

    NOT IN 子查询

    NOT IN 子查询用于排除子查询结果中的值。与 IN 子查询类似,NOT IN 子查询也用于在外层查询和子查询之间建立关联,但会排除子查询结果中的值。

    【示例02】

    查询 tb_book 图书表中不在 tb_book_author 作者表中的部门的图书信息。
    SQL 语句:

    SELECT * FROM tb_book  WHERE book_sort NOT IN(SELECT tb_author_department FROM tb_book_author);

    小结:NOT IN 子查询在性能上可能较慢,但在理解和编写 SQL 语句时更直观。可以通过外连接替代 NOT IN 子查询以提高性能。


    二、EXISTS 和 NOT EXISTS 操作符

    EXISTS 和 NOT EXISTS 操作符用于判断子查询结果是否存在。EXISTS 返回 TRUE,若子查询结果非空;NOT EXISTS 返回 TRUE,若子查询结果为空。

    EXITS 子查询的使用

  • 关键字位置:EXISTS 通常直接放在外层查询的 WHERE 子句后面。
  • 子查询的选择列表:子查询的选择列表通常使用 *,因为只需要判断数据行的存在性,而不是具体的值。
  • 示例

    【示例03】

    获取 tb_book 图书表和 tb_book_author 作者表中具有相同部门的作者所写的图书信息。
    SQL 语句:

    SELECT * FROM tb_book  WHERE EXISTS(SELECT * FROM tb_book_author WHERE book_sort = tb_book_author.tb_author_department)  ORDER BY book_price;

    NOT EXISTS 子查询

    NOT EXISTS 子查询用于排除子查询结果中的值。与 EXITS 子查询类似,但返回 TRUE 时表示子查询结果为空。

    【示例04】

    获取 tb_book 图书表与 tb_book_author 作者表中相同部门以外的图书信息。
    SQL 语句:

    SELECT * FROM tb_book  WHERE NOT EXISTS(SELECT tb_author_department FROM tb_book_author WHERE book_sort = tb_book_author.tb_author_department)  ORDER BY book_price;

    三、量词实现多行子查询

    量词包括 ALL、ANY 和 SOME,用于将比较运算符左边的单值与子查询返回的多行结果集进行比较。

    1. 使用量词实现多行查询

    量词允许将比较运算符左边的单值与子查询返回的多行结果集进行比较。

    【示例05】

    查询 goods 表中同类商品中售价高于平均售价的商品信息。
    SQL 语句:

    SELECT cat_id, goods_name, shop_price FROM goods  WHERE shop_price < ALL(SELECT AVG(shop_price) FROM goods GROUP BY cat_id);

    2. 使用 ALL 操作符

    ALL 操作符用于比较子查询返回结果集中的所有值。

    • &lt;ALL>:左边值小于子查询结果中的最小值。
    • &gt;ALL>:左边值大于子查询结果中的最大值。
    • =ALL>:无效操作符。

    【示例06】

    查询 goods 表中商品售价比平均售价高的商品信息。
    SQL 语句:

    SELECT cat_id, goods_name, shop_price FROM goods  WHERE shop_price > ANY(SELECT AVG(shop_price) FROM goods GROUP BY cat_id);

    总结:量词(ALL、ANY、SOME)允许将比较运算符左边的单值与子查询返回的多行结果集进行比较,适用于多行子查询场景。

    转载地址:http://qcik.baihongyu.com/

    你可能感兴趣的文章
    python判断密码是否正确_python密码判断是否符合要求的方法
    查看>>
    python判断字符串包含中文_Python 判断字符串是否包含中文
    查看>>
    python删除第一行_Python 乱码指北:一行删掉根目录
    查看>>
    Python删除列表元素的三种方法
    查看>>
    python初步学习-python数据类型-集合(set)
    查看>>
    python列表生成字典_Python中将字典转换为列表的方法
    查看>>
    python列表对应元素合并为列表及判断一个列表是几维
    查看>>
    python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体测管理系统的设计与实现(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校体育赛事系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校危化品管理系统(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校校园线上跳蚤市场的系统设计(程序+开题+论文)
    查看>>
    python+flask计算机毕业设计高校疫情防控管理平台(程序+开题+论文)
    查看>>
    Python+Jenkins+Allure Report接口自动化测试持续集成
    查看>>
    python+locust电商全流程性能测试
    查看>>
    Python函数运行的可执行文件的终端输出如何以一般方式静音?
    查看>>
    Python+Pytest+Allure+Git+Jenkins接口自动化框架
    查看>>
    python+pytest接口自动化 —— 参数关联
    查看>>
    python+pytest接口自动化 —— 参数关联
    查看>>
    Python+pytest接口自动化 —— 接口测试基础
    查看>>