数据库
首页 > 数据库> > Datawhale SQL TASK4

Datawhale SQL TASK4

作者:互联网

第4章 集合运算

摘要:感觉不是很难,但是知识点比较零碎,自己做了两张表格,可能有不大准确的地方,欢迎指正

目录

image-20220525222139799

4.1 表的加减法

  1. 表的加法-UNION,两个SELECT FROM 语句中间使用UNION

    1. 同一张表,可以使用UNION或者OR,不同的表只能使用UNION
    2. 如果想要保留重复行,采用UNION ALL语句
  2. SELECT *
    FROM product AS p1
    WHERE product_id NOT IN (SELECT product_id FROM product2) -- 这儿用SELECT 语句不能用p1.product_id,这--- 儿不能写p2否者报错
    UNION
    SELECT *
    FROM product2 AS p2
    WHERE  product_id NOT IN (SELECT product_id FROM product)
    
  3. 如果用UNION,两个SELECT语句各有各的WHERE,而不是两个SELECT对应一个WHERE.

  4. UNION可以隐式数据类型转换,hive中join关联时,应该避免隐式数据类型转换,否则容易数据倾斜

  5. 日期时间类型可以和数值、字符串、NULL兼容

  6. MySQL 8.0 不支持交运算INTERSECT,用 inner join 来求得交集,或者AND

    1. SELECT p1.product_id, p1.product_name
        FROM Product p1
      INNER JOIN Product2 p2
      ON p1.product_id=p2.product_id
      
  7. MySQL 8.0 不支持交运算EXCEPT ,用 NOT IN

  8. 对称差=并集-交集

表格 加法 减法
集合 对称差
关键字 UNION INTERSECT EXCEPT
MySQL 8.0是否支持 支持 不支持 不支持
替代方案 单表用OR,多表只能UNION INNER JOIN ON WHERE NOT IN NOT IN UNION NOT IN
方案简记 两个SELECT FROM 语句中间使用UNION 内连结 NOT IN A-B UNION B-A
用法 SELECT FROM UNION SELECT FROM 两个SELECT FROM 语句中使用INNER JOIN,最后放ON
注意事项 合并后删除重复记录,不想删除用UNION ALL 也可以用对称差,并集-对称差

4.2 连结 JOIN

  1. 能够简化关联子查询,关联子查询在数据量较多的时候时间消耗很大

  2. 内连结,INNER JOIN

    1. FROM tab_1 
      INNER JOIN
      tab_2
      ON conditions
      
    2. 表先连结后筛选,

  3. 自然连结,NATURAL JOIN ,不需要使用ON,就是一个定义表示一张表的连结

  4. 外连接,LETF/RIGHT/FULL OUTER JOIN,那个连结就会保留哪个的不匹配的数据

  5. 全连接

    1. 含义:对左表和右表的所有数据予以保留,能用ON关联的,就搞在一起一行显示,不能用ON 关联的就分别显示,多余的行用缺失值进行填充
    2. MySQL 8.0不支持全连接,

      标签:product,TASK4,UNION,连结,Datawhale,SQL,WHERE,id,SELECT
      来源: https://www.cnblogs.com/msspansion/p/16311706.html