SQL集合运算

目录

表的加减法

什么是集合运算

表的加法——UNION(并集)

集合运算的注意事项

包含重复行的集合运算——ALL选项

选取表中公共部分——INTERSECT(交集)

记录的减法——EXCEPT(差集)

联结(以列为单位对表进行联结)

什么是联结

内联结——INNER JOIN

内联结要点①——FROM子句

内联结要点②——ON子句

内联结要点③——SELECT子句

内联结和WHERE子句结合使用

外联结-OUTER JOIN

外联结要点①-选取出单张表中的全部信息

外联结要点②-每张表都是主表吗?

3张以上的表进行联结


表的加减法

什么是集合运算

集合运算就是对满足同一规则的记录进行的加减等四则运算。

使用UNION(并集),INTERSECT(交集),EXCEPT(差集)等集合运算符来进行集合运算。

集合运算可以去除重复行。

如果希望集合运算符保留重复行,就需要使用ALL选项。

表的加法——UNION(并集)

使用UNION对表进行加法运算,假设有表Shohin和Shohin2

SELECT shohin_id, shohin_mei
FROM Shohin
UNION
SELECT shohin_id, shohin_mei
FROM Shohin2;

集合运算的注意事项

  1. 作为运算对象的记录的列数必须相同
  2. 作为运算对象的记录中列的类型必须一致
  3. 可以使用任意SELECT语句,但是ORDER BY 子句只能再最后使用一次

包含重复行的集合运算——ALL选项

SELECT shohin_id, shohin_mei
FROM Shohin
UNION ALL
SELECT shohin_id, shohin_mei
FROM Shohin2;

选取表中公共部分——INTERSECT(交集)

使用INTERSECT选取表中公共部分

SELECT shohin_id, shohin_mei
FROM Shohin
INTERSECT
SELECT shohin_id, shohin_mei
FROM Shohin2;

记录的减法——EXCEPT(差集)

使用EXCEPT对记录进行减法运算

SELECT shohin_id, shohin_mei
FROM Shohin
EXCEPT
SELECT shohin_id, shohin_mei
FROM Shohin2;

联结(以列为单位对表进行联结)

什么是联结

UNION和INTERSECT等集合运算时以行方向为单位进行操作。通俗的来说就是进行这些集合运算时,会导致记录行数的增减。使用UNION会使行数增加,使用INTERSECT或者EXCEPT 记录行数会减少。

联结运算就是将其他表中的列添加过来进行列田间运算。

内联结——INNER JOIN

将两张表进行内联结

SELECT TS.tenpo_id, TS.tenpo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka
FROM TenpoShohin AS TS INNER JOIN Shohin AS s
	ON TS.shohin_id = S.shohin_id;

内联结要点①——FROM子句

关键字INNER JOIN就可以将两张表联结再一起。由于表名太长会影响SQL语句的可读性,尽量使用别名。

内联结要点②——ON子句

我们可以在ON之后指定两张表联结所使用的列(联结键)。本例中使用shohin_id。也就是说ON是专门来指定联结条件的。它能起到与WHERE相同的作用。需要指定多个键时,同样可以使用AND,OR。ON子句在进行内联结时时必不可少的。并且ON必须书写在FROM和WHERE之间。

内联结要点③——SELECT子句

在SELECT子句中使用<表的别名>.<列名>这样的格式进行书写。

内联结和WHERE子句结合使用

SELECT TS.tenpo_id, TS.tenpo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka
FROM TenpoShohin AS TS INNER JOIN Shohin AS s
	ON TS.shohin_id = S.shohin_id
WHERE TS.tenpo_id = '000A';

外联结-OUTER JOIN

将两张表进行外联结

SELECT TS.tenpo_id, TS.tenpo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka
FROM TenpoShohin AS TS OUTER JOIN Shohin AS s
	ON TS.shohin_id = S.shohin_id

外联结要点①-选取出单张表中的全部信息

内联结只能选取出两张表同时存在的数据,

外联结只要数据存在某一张表中,就能够读取出来.

外联结名称的由来也跟NULL有关,所谓"外部",也就是外含元表中不存在的信息.

外联结要点②-每张表都是主表吗?

指定主表的关键字LEFT和RIGHT,如果使用LEFT时FROM子句中写在左侧的表为主表,使用RIGHT时右侧的表为主表.

SELECT TS.tenpo_id, TS.tenpo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka
FROM TenpoShohin AS TS LEFT OUTER JOIN Shohin AS s
	ON TS.shohin_id = S.shohin_id

实际他们的功能并没有什么区别,使用那个都可以.通常使用LEFT的情况会多一些.

3张以上的表进行联结

对三张表进行联结

SELECT TS.tenpo_id, TS.tenpo_mei,TS.shohin_id,S.shohin_mei,S.hanbai_tanka,ZS.zaiko_suryo
FROM TenpoShohin AS TS INNER JOIN Shohin AS s
	ON TS.shohin_id = S.shohin_id
	INNER JOIN ZaikoShohin AS ZS
	ON TS.shohin_id = ZS.shohin_id

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值