• sql打卡记录四 集合运算


    什么是集合运算?

    分别对检索结果使用 UNION, INTERSECT, EXCEPT 来将检索结果进行并,交和差运算, 像UNION,INTERSECT, EXCEPT这种用来进行集合运算的运算符称为集合运算符。

    一、表的加减法

    1、加法:UNION

    UNION 等集合运算符通常都会除去重复的记录。

    UNION 与 OR 谓词

    对于同一个表的两个不同的筛选结果集,使用 UNION 对两个结果集取并集, 和把两个子查询的筛选条件用 OR 谓词连接,会得到相同的结果, 但倘若要将两个不同的表中的结果合并在一起,只能使用UNION

    包含重复行的集合运算 UNION ALL

    在 UNION 的结果中保留重复行时,只需要在 UNION 后面添加 ALL 关键字就可以

    隐式数据类型转换

    通常来说, 我们会把类型完全一致,并且代表相同属性的列使用 UNION 合并到一起显示,但有时候,即使数据类型不完全相同,也会通过隐式类型转换来将两个类型不同的列放在一列里显示

    2、差集,补集与表的减法

    EXCEPT 与 NOT 谓词

    使用 NOT IN 谓词,基本上可以实现和SQL标准语法中的EXCEPT运算相同的效果

    INTERSECT 与 AND 谓词

    于同一个表的两个查询结果而言,他们的交INTERSECT实际上可以等价地将两个查询的检索条件用AND谓词连接来实现

    3、对称差

    两个集合A,B的对称差是指那些仅属于A或仅属于B的元素构成的集合

    二、连结(JOIN)

    1、内连结(INNER JOIN)

    FROM <tb_1> INNER JOIN <tb_2> ON <condition(s)>
    • 进行连结时需要在 FROM 子句中使用多张表
    • 必须使用 ON 子句来指定连结条件
    • SELECT 子句中的列最好按照 表名.列名 的格式来使用

    结合 WHERE 子句使用内连结

    如果需要在使用内连结的时候同时使用 WHERE 子句对检索结果进行筛选, 则需要把 WHERE 子句写在 ON 子句的后边。

    结合 GROUP BY 子句使用内连结

    结合 GROUP BY 子句使用内连结, 需要根据分组列位于哪个表区别对待。但是如果分组列和被聚合的列不在同一张表, 且二者都未被用于连结两张表, 则只能先连结, 再聚合。

    2、外连结(OUTER JOIN)

    内连结会丢弃两张表中不满足 ON 条件的行,和内连结相对的就是外连结

    1. -- 左连结
    2. FROM <tb_1> LEFT OUTER JOIN <tb_2> ON <condition(s)>
    3. -- 右连结
    4. FROM <tb_1> RIGHT OUTER JOIN <tb_2> ON <condition(s)>
    5. -- 全外连结
    6. FROM <tb_1> FULL OUTER JOIN <tb_2> ON <condition(s)>

    外连结同样可以使用WHERE等筛选语句

    3、多表连结 

    通常两张表连结,但并没有限制,因此可以多张表连结查询,语法相同

    4、ON 子句进阶--非等值连结

    除了使用相等判断的等值连结, 也可以使用比较运算符来进行连接. 实际上, 包括比较运算符(<,<=,>,>=, BETWEEN)和谓词运算(LIKE, IN, NOT 等等)在内的所有的逻辑运算都可以放在 ON 子句内作为连结条件。

    5、交叉连结—— CROSS JOIN(笛卡尔积)

    交叉连接(笛卡尔积)是在横向上对表进行扩张, 即增加新的列, 这一点和连结的功能是一致的. 但因为没有了ON子句的限制, 会对左表和右表的每一行进行组合, 这经常会导致很多无意义的行出现在检索结果中. 当然, 在某些查询需求中, 交叉连结也有一些用处。


    1、找出 product 和 product2 中售价高于 500 的商品的基本信息。

     

    2、借助对称差的实现方式, 求product和product2的交集。

     

    3、每类商品中售价最高的商品都在哪些商店有售 ?

     

    4、分别使用内连结和关联子查询每一类商品中售价最高的商品。

    5、用关联子查询实现:在 product 表中,取出 product_id, product_name, sale_price, 并按照商品的售价从低到高进行排序、对售价进行累计求和。

  • 相关阅读:
    Redis缓存相关问题
    20240425金融读报:银行绿色数据收集ESG&银行物联网智慧贵金属案例
    Ubuntu18.04安装docker及nvidia docker、NVIDIA Container Toolkit
    随手记录:自家小米路由器配置了哪些东东以备后用
    《web应用技术》第5次课后作业
    【操作系统】安全管理/防火墙
    语料库数据处理个案实例(计算机搭配强度、删除表中的停用词、词料检索的KWIC实现)
    Simple-BEV: 多传感器BEV感知真正重要的是什么?(斯坦福大学最新)
    SAP UI5 第二代表达式语言的一些特性介绍
    基于Spring Boot的中小型医院网站的设计与实现
  • 原文地址:https://blog.csdn.net/llwvip/article/details/125415996