SQL基础教程第七章集合运算

表的加减法

UNION

1
2
3
4
5
SELECT product_id,product_name
FROM Product
UNION
SELECT product_id,product_name
FROM Product2

结果是两个表的并集

注意事项

  • 作为运算对象的记录的列数必须相同,否则会发生错误
  • 作为运算对象的记录中的列的类型必须保持一致
  • 可以使用任何SELECT语句,但是ORDER BY只能在最后使用一次

ALL

包含重复行的运算

1
2
3
4
5
SELECT product_id,product_name
FROM Product
UNION ALL
SELECT product_id,product_name
FROM Product2

INTERSECT

求交集

1
2
3
4
5
6
SELECT product_id,product_name
FROM Product
INTERSECT
SELECT product_id,product_name
FROM Product2
ORDER BY product_id;

EXCEPT

差集

1
2
3
4
5
6
SELECT product_id,product_name
FROM Product
EXCEPT
SELECT product_id,product_name
FROM Product2
ORDER BY product_id;

上面的sql语句,获得的数据为product表中减去product2表中有的数据,即两表顺序交换的结果不同

联结

上一节讲的是行方向的操作,即行数被增减,这么做不会导致列数的改变,本节讲的就是列数的改变

内联结 INNER JOIN

1
2
3
SELECT SP.shop_id,SP.shop_name,P.product_id
FROM ShopProduct AS SP INNER JOIN Product AS P ON SP.product_id = P.product_id
WHERE SP.shop_id = '000A';
  • FROM 里面有两张表
  • ON 联结条件,必须写在FROM和WHERE中间
  • SELECT 为了避免混乱,都应该写成表名.列名的格式

外联结 OUTER JOIN

1
2
3
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price
FROM ShopProduct AS SP RIGHT OUTER JOIN Product AS P
ON SP.product_id = P.product_id;
  • 注意左外联结还是右外联结,只要倒换表的顺序,那么左改成右结果也是一样的