Datawhale SQL TASK4

2022/5/27 2:21:51

本文主要是介绍Datawhale SQL TASK4,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

第4章 集合运算

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

目录
  • 第4章 集合运算
    • 4.1 表的加减法
    • 4.2 连结 JOIN
    • 练习题
      • 4.1
      • 4.2
      • 4.3
      • 4.4
      • 4.5

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不支持全连接,


这篇关于Datawhale SQL TASK4的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程