集合运算
1. 并集:UNION
? ? 例:
? ? SELECT shohin_id, shohin_mei
? ? FROM Shohin
? ? UNION
? ? SELECT shohin_id, shohin_mei
? ? FROM Shohin2;
? ? 将Shohin和Shohin2两张表的shohin_id和shohin_mei两列取并集;
? ? 注意,UNION操作时,列数必须相等,且每列的数据类型应该相同
? ? 保留重复行: UNION ALL
2. 交集:INTERSECT
? ? 语法和UNION完全相同,但是取的是交集部分
3. 差集:EXCEPT
? ? 语法和UNION完全相同,取第一张表中有,第二张表中没有的记录
表的联结
集合运算会改变记录数(行数),联结就是对两张表的列进行联结,改变的是列数
1. 内联结: 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
? ? SELECT子句指定需要连接的列,注意由于SELECT操作时间在FROM之后,所以FROM的别名在SELECT中有效;
? ? FROM子句指定两个表的名字,并且用INNER JOIN连接;
? ? ON 子句指定一个表达式,作为联结的桥梁,满足该表达式的记录会联结两个表中的相应列;
? ? 内联结可以使用WHERE子句等SELECT语句进行删选;
2. 外联结: OUTER JOIN
? ? 外联结相比内联结会显示只在主表中出现的记录;
? ? 例:
? ? SELECT TS.tenpo_id, TS.tenpo_mei, S.shohin_id, S.shohin_mei, S.hanbai_tanka
? ? FROM TenpoShohin AS TS RIGHT OUTER JOIN Shohin AS S
? ? ON TS.shohin_id = S.shohin_id;
? ? 外联结的语法和内联结基本相同,不同的是,外联结使用LEFT、RIGHT来指定主表,
? ? 使用LEFT时,写在左侧的表为主表,使用RIGHT时,写在右侧的表为主表;
3. 联结三张表以上
? ? 先联结其中的两张表为一张,依次操作直到最后做两张表的联结;
4. 交叉联结:CROSS JOIN
? ? 交叉联结时,对左侧表和右侧表的每一个记录进行联结,生成一张比较长的表;(笛卡尔积)
?
? ?
?