DW学习--MySQL04(集合运算)

本文详细介绍了MySQL中的集合运算,包括UNION的加法操作、交集和差集的实现,以及联结(JOIN)的内联结、外联结和交叉联结。讲解了各种集合运算是如何处理不同表之间的数据合并和筛选,并提供了相应的例子和注意事项,如数据类型的匹配、去重和使用WHERE子句的情况。
摘要由CSDN通过智能技术生成


1 表的加减法

  • 集合:在数据库领域表示记录的集合,具体来说,表、视图和查询的执行结果都是记录的集合。
  • 集合运算:是对满足同一规则的记录进行的加减等四则运算。几种集合运算的文氏图:
    在这里插入图片描述
    在这里插入图片描述

1.1 表的加法-UNION

  • UNION的用法:相当于并集运算
    【例子】包含两张表的全部商品
    SELECT product_id, product_name
      FROM product
     UNION
    SELECT product_id, product_name
      FROM product2;
    

注意: UNION 等集合运算符通常都会除去重复的记录,即UNION 会对两个查询的结果集进行合并和去重.

  • UNION 与 OR 谓词:使用 UNION对两个查询结果取并集, 和在一个查询中使用WHERE子句, 然后使用 OR 谓词连接两个查询条件, 能够得到相同的结果。对于将不同的两张表合并在一起,只能使用UNION
    【例子】UNION 与 OR 谓词相同的结果
    # 使用 OR 谓词
    SELECT * 
      FROM product 
     WHERE sale_price / purchase_price < 1.3 
        OR sale_price / purchase_price IS NULL;
    # 使用 UNION
    SELECT * 
    FROM product 
    WHERE sale_price / purchase_price < 1.3
    
    UNION
    SELECT * 
    FROM product 
    WHERE sale_price / purchase_price IS NULL;
    
  • 集合运算的注意事项:
    • 1.作为运算对象的记录的列数必须相同
      【例子】一部分记录包含 2 列,另一部分记录包含 3 列时会发生错误,无法进行加法运算。
    -- 列数不一致时会发生错误
    SELECT product_id, product_name
    FROM Product
    UNION
    SELECT product_id, product_name, sale_price
    FROM Product2;
    
    • 2.作为运算对象的记录中列的类型必须一致(相同位置上的列必须是同一数据类型)
      【例子】列数相同,但是第 2 列的数据类型并不一致,(一个是数值类型,一个是日期类型型),会发生错误。
    -- 数据类型不一致时会发生错误
    SELECT product_id, sale_price
      FROM Product
     UNION
    SELECT product_id, regist_date
      FROM Product2;
    
    • 3.可以使用任何SELECT语句,但ORDER BY子句只能在最后使用一次
      通过 UNION进行并集运算时可以使用任何形式的 SELECT 语句, WHERE、GROUP BY、HAVING 等子句都可以使用
      【例子】ORDER BY子句只能在最后使用一次
    SELECT product_id, product_name
    FROM Product
    WHERE product_type = '厨房用具'
    UNION
    SELECT product_id, product_name
    FROM Product2
    WHERE product_type = '厨房用具'
    ORDER BY product_id;
    
     product_id |  product_name
    ----------+--------------
    0004  | 菜刀
    0005  | 高压锅
    0006  | 叉子
    0007  | 擦菜板
    0010  | 水壶
    
  • ALL选项:在 UNION 的结果中保留重复行,得到不去重的并集。
    • 语法: 只需要在 UNION后面添加 ALL关键字就可以了。
      【例子】包含两张表的全部商品并保留重复商品
    # 保留重复行
    SELECT product_id, product_name
      FROM product
     UNION ALL
    SELECT product_id, product_name
      FROM product2;
    
     product
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值