天池龙珠计划SQL_TASK4
2021/4/8 19:26:32
本文主要是介绍天池龙珠计划SQL_TASK4,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Task04:集合运算-表的加减法和join等
本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql
-小总结: Select 查询列表 From 表名 Where 筛选条件 Group by 分组列表 Having 分组后筛选 Order by 排序列表 Limit 选取前几名 -执行顺序: From-where-group by-having-select-order by
4.1表的加减法
4.1.1 集合运算
在 SQL 中, 分别对检索结果使用 UNION, INTERSECT, EXCEPT 来将检索结果进行并,交和差运算.
UNION,INTERSECT, EXCEPT这种用来进行集合运算的运算符称为集合运算符。
4.1.2 表的加法–UNION
4.1.2.1 UNION
当查询结果来自于多场表,且表之间没有关联,这时候就需要联合查询,也称union查询
SELECT product_id, product_name FROM product UNION SELECT product_id, product_name FROM product2;
UNION 等集合运算符通常都会除去重复的记录.
UNION ALL: Union 会自动去重,而union all则不会
4.1.2.2 隐式类型转换
通常来说, 我们会把类型完全一致, 并且代表相同属性的列使用 UNION 合并到一起显示, 但有时候, 即使数据类型不完全相同, 也会通过隐式类型转换来将两个类型不同的列放在一列里显示
4.1.4 差集,补集与表的减法
-找出只存在于product表但不存在于product2表的商品. - 使用 IN 子句的实现方法 SELECT * FROM product WHERE product_id NOT IN (SELECT product_id FROM product2)
对称差
首先使用UNION求两个表的并集, 然后使用INTERSECT求两个表的交集, 然后用并集减去交集, 就得到了对称差.
-使用product表和product2表的对称差来查询哪些商品只在其中一张表 -使用 NOT IN 实现两个表的差集 SELECT * FROM product WHERE product_id NOT IN (SELECT product_id FROM product2) UNION SELECT * FROM product2 WHERE product_id NOT IN (SELECT product_id FROM product)
交集运算 INTERSECT
两个集合的交可以看作是两个集合的并去掉两个集合的对称差。
4.2连结(JOIN)
UNION和INTERSECT 等集合运算, 这些集合运算的特征就是以行方向为单位进行操作. 通俗地说, 就是进行这些集合运算时, 会导致记录行数的增减. 使用 UNION 会增加记录行数,而使用 INTERSECT 或者 EXCEPT 会减少记录行数.
而连结:
4.2.1 内连结(INNER JOIN)
FROM <tb_1> INNER JOIN <tb_2> ON <condition(s)>
SELECT SP.shop_id ,SP.shop_name,SP.product_id ,P.product_name FROM shopproduct AS SP INNER JOIN product AS P ON SP.product_id = P.product_id;
SELECT 子句中的列最好按照 表名.列名 的格式来使用.
4.2.2 外连结(OUTER JOIN)
内连结会丢弃两张表中不满足 ON 条件的行,和内连结相对的就是外连结.
外连结会根据外连结的种类有选择地保留无法匹配到的行.
按照保留的行位于哪张表,外连结有三种形式: 左连结, 右连结和全外连结.
-左连结 FROM <tb_1> LEFT OUTER JOIN <tb_2> ON <condition(s)> - 右连结 FROM <tb_1> RIGHT OUTER JOIN <tb_2> ON <condition(s)> - 全外连结 FROM <tb_1> FULL OUTER JOIN <tb_2> ON <condition(s)>
4.2.2.1 左连结与右连接
- 查询主表中所有的记录,如果从表中有匹配项,则显示,没有则显示为null
- 功能:一般用于主表有,但从表没有的记录
- 特点:外连接分主从,两表顺序不能换
- 左连接:left join 左边为主表
- 右连接:right join 右边为主表
4.2.2.2 全外连结
全外连结本质上就是对左表和右表的所有行都予以保留, 能用 ON 关联到的就把左表和右表的内容在一行内显示, 不能被关联到的就分别显示, 然后把多余的列用缺失值填充。
4.2.3多表连结
4.2.3.1 多表进行内连结
SELECT SP.shop_id,SP.shop_name ,SP.product_id,P.product_name FROM shopproduct AS SP INNER JOIN product AS P ON SP.product_id = P.product_id INNER JOIN Inventoryproduct AS IP ON SP.product_id = IP.product_id WHERE IP.inventory_id = 'P001';
4.2.3.2多表进行外连结
SELECT P.product_id ,P.product_name,P.sale_price,SP.shop_id FROM product AS P LEFT OUTER JOIN shopproduct AS SP ON SP.product_id = P.product_id LEFT OUTER JOIN Inventoryproduct AS IP ON SP.product_id = IP.product_id
4.2.4 非等值连结
select * from 表1 inner join 表2 on 表1.字段名 <> 表2.字段名
比较运算符(<,<=,>,>=, BETWEEN)和谓词运算(LIKE, IN, NOT 等等)在内的所有的逻辑运算都可以放在 ON 子句内作为连结条件.
4.2.5 交叉连结—— CROSS JOIN(笛卡尔积)
之前的无论是外连结内连结, 一个共同的必备条件就是连结条件–ON 子句, 用来指定连结的条件. 如果你试过不使用这个连结条件的连结查询, 你可能已经发现, 结果会有很多行. 在连结去掉 ON 子句, 就是所谓的交叉连结(CROSS JOIN), 交叉连结又叫笛卡尔积
这篇关于天池龙珠计划SQL_TASK4的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南