1.Union集合运算符会出去重复的记录。注意事项:
(1)作为运算对象的记录的列数必须相同。
(2)作为运算对象的记录中的列的类型必须一致。
(3)可以使用任何select语句,但是order by子句只能在最后一次使用。
2.包含重复行的集合运算--all选型
3.与使用and可以选出一张表中满足多个条件的公共部分不同,intersect应用于两张表,选取出他们当中的公共记录。
4.联结(join)就是将其他表中的列添加过来,进行“添加列”的集合运算。Union是以行为单位进行操作,而联结则是以列为单位进行的。
5.使用union会增加记录行数,而使用intersect或者except会减少记录行数。
6.联结大体上分为内联结和外联结。
(1)Inner join:进行联结时需要在from子句中使用多张表,必须使用on子句,并且要书写在from和where子句之间。select子句中指定的列格式为表的别名.列名。
(2)outer join:选取出单张表中的全部信息(在实际的业务中,例如想要生成固定行数的单据时,就需要使用外联结),指定主表的关键字是left和right(使用二者所得到的结果完全相同)。
7.1 请说出下述 SELECT 语句的结果。
--使用本章中的Product表
SELECT * FROM Product UNION SELECT * FROM Product INTERSECT
SELECT * FROM Product ORDER BY product_id;
答:执行上述select的结果仍是Product。
7.2 7-2 节的代码清单 7-11 中列举的外联结的结果中,高压锅和圆珠笔 2 条
记录的商店编号(shop_id)和商店名称(shop_name)都是 NULL。请使
用字符串“不确定”替换其中的 NULL。期望结果如下所示。
select coalesce(sp.shop_id,'不确定')shop_id, coalesce(sp.shop_name,'不确定'),shop_name,p.product_id,p.product_name,p.sale_price
from product p left join shop_product sp on p.product_id = sp.product_id
order by sp.shop_id