博客
关于我
第十章: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基础教程(第2版 修订版) pdf
    查看>>
    python基础实践(四)
    查看>>
    Python基础学习笔记(九)常用数据类型转换函数
    查看>>
    Python基础学习参考(五):字符串和编码
    查看>>
    Python基础学习
    查看>>
    python基础变量之---集合
    查看>>
    python基础变量之---字典
    查看>>
    python基础变量之---列表
    查看>>
    python基础变量之---元组
    查看>>
    python基础内容_Python基础入门必须了解的
    查看>>
    Python基础之面向对象2(封装)
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>