SQL速查 《SQL基础教程》学习笔记 (下)联表查询

SQL速查 《SQL基础教程》学习笔记不定期更新,记录一些必会的常见SQL语法和易错点。
本文是下篇,主要记录联表查询。

所谓集合运算,就是对满足同一规则的记录进行的加减等四则运算。通过集合运算,可以得到两张表中记录的集合或者公共记录的集合,又或者其中某张表中的记录的集合。像这样用来进行集合运算的运算符称为集合运算符。

以行(记录)为单位对表做集合运算

这一部分就像是集合运算,数据表中的每一条记录不会被打散,每一条记录就像集合中的元素。具体大致包含并集运算(UNION)、交集运算(INTERSECT)、差集运算(EXCEPT),以及一个重要关键字ALL。

UNION(并集运算)—— 表的加法

在这里插入图片描述
这就是集合的并集运算。UNION 等集合运算符会除去重复的记录。 例如:
在这里插入图片描述
可以看到交集的部分没有重复显示。而UNION ALL会显示重复行,且不会对结果进行排序,因此比 UNION 的性能更好。前两天浦发初筛随口问了这个当时没看不知道,现在真想给自己一棒槌!

集合运算注意事项

注意事项① ——作为运算对象的记录的列数必须相同
在这里插入图片描述
注意事项② ——作为运算对象的记录中列的类型必须一致
在这里插入图片描述
当必须使用不同数据类型的列进行运算时,可以使用类型转换函数CAST。

注意事项③ —— 可以使用任何 SELECT 语句,但 ORDER BY 子句只能在最后使用一次

ALL 关键字实现保留重复行的集合运算

INTERSECT (交集运算)

在这里插入图片描述

EXCEPT(差集运算)

在这里插入图片描述

以列(属性)为单位对表联结

联结( JOIN )就是将其他表中的列添加过来,进行“添加列”的集合运算。UNION 是以行(纵向上)为单位进行操作,而联结则是以列(横向上)为单位进行的。
联结大体上分为内联结和外联结两种,交叉联结很少用到。

INNER JOIN

在这里插入图片描述

要点1:FROM子句中使用两张表,使用 INNER JOIN 隔开,并且表最好使用别名
FROM ShopProduct AS SP INNER JOIN Product AS P

要点2: ON子句,ON 后面的联结条件
ON SP.product_id = P.product_id
ON 之后指定两张表联结所使用的列(联结键),并且ON 子句要书写在 FROM 和 WHERE 之间。

要点3:SELECT 子句。
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price
使用联结时 SELECT 子句中的列需要按照“ < 表的别名 > . < 列名 > ”的格式进行书写。

可以将联结之后的结果想象为新创建出来的一张表,对这张表再使用WHERE 子句等工具,例如:
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price
FROM ShopProduct AS SP INNER JOIN Product AS P
ON SP.product_id = P.product_id
WHERE SP.shop_id = ‘000A’;

外联结—— OUTER JOIN

内连接只能读取多张表共有的部分。对于外联结来说,只要数据存在于某一张表当中,就能够读取出来。

外联结还有一点非常重要,那就是要把哪张表作为主表。最终的结果中会包含主表内所有的数据。指定主表的关键字是 LEFT 和 RIGHT 。

使用 LEFT 时 FROM 子句中写在左侧的表是主表,使用 RIGHT时右侧的表是主表。例如:
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price
FROM Product AS P LEFT OUTER JOIN ShopProduct AS SP
ON SP.product_id = P.product_id

三张及以上数量表的联结

在这里插入图片描述

交叉联结

对满足相同规则的表进行交叉联结的集合运算符是 CROSS JOIN (笛卡儿积)。进行交叉联结时无法使用内联结和外联结中所使用的 ON 子句,这是因为交叉联结是对两张表中的全部记录进行交叉组合,因此结果中的记录数通常是两张表中行数的乘积。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值