一、集合运算
集合运算的注意事项:
- 作为运算对象的记录的列数必须相同。
- 作为运算对象的记录中列的类型必须一致。
- 可以使用任何SELECT语句,但ORDER BY子句只能在最后使用一次。
1 表的加法:UNION
SELECT <列名1> <列名2>
FROM <表名1>
UNION
SELECT <列名1> <列名2>
FROM <表名2>
- 集合运算符会除去重复的记录。
- ALL选项:在 UNION 的结果中保留重复行,只需要在 UNION 后面添加 ALL 关键字。
SELECT <列名1> <列名2>
FROM <表名1>
UNION ALL
SELECT <列名1> <列名2>
FROM <表名2>
2 选取表中公共部分(并集):INTERSECT
SELECT <列名1> <列名2>
FROM <表名1>
INTERSECT
SELECT <列名1> <列名2>
FROM <表名2>
3 记录的减法:EXCEPT
SELECT <列名1> <列名2>
FROM <表名1>
EXCEPT
SELECT <列名1> <列名2>
FROM <表名2>
二、联结(以列为单位对表进行联结)
1 内联结:INNER JOIN
SELECT <表名1>.<列名11>, <表名1>.<列名12>, <表名1>.<列名(共)>, <表名2>.<列名21>, <表名2>.<列名22>, <表名2>.<列名(共)>
FROM <表名1> INNER JOIN <表名2>
ON <表名1>.<列名(共)> = <表名2>.<列名(共)>
【示例】
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;
要点:
- 进行联结时需要在FROM子句中使用多张表。
- 进行内联结时必须使用ON子句,并且要书写在FROM和WHERE之间。
- 使用联结时SELECT子句中的列需要按照“.”的格式进行书写。
2 外联结:OUTER JOIN
SELECT <表名1>.<列名11>, <表名1>.<列名12>, <表名1>.<列名(共)>, <表名2>.<列名21>, <表名2>.<列名22>, <表名2>.<列名(共)>
FROM <表名1> RIGHT OUTER JOIN <表名2>
ON <表名1>.<列名(共)> = <表名2>.<列名(共)>
3 交叉联结:CROSS JOIN
笛卡尔积,很少使用。