美文网首页读书笔记
《SQL基础教程》阅读笔记8

《SQL基础教程》阅读笔记8

作者: Athenaearl | 来源:发表于2018-11-19 21:29 被阅读2次

集合运算

表的加减法

  1. 表的加法--UNION 并集
    语法:
SELECT <col_name1>, <col_name2>.... FORM <table_name1>
WHERE <condition>
UNION
SELECT <col_name3>, <col_name4>.... FROM <table_name2>
WHERE <condition>
ORDER BY <col_name>;

结果:
它会生成相应列,相同项只会出现一次
注:
对应的列数必须相同,从表1中选了2列,那么表2中也要选2列
对应列的数据类型必须一致,col_name1 是字符串类型,那么col_name3 也应该是字符串类型的
ORDER BY 只在最后可以使用一次,也可以不使用
WHERE 语句可以不写

由于正常来说集合的并集重复项只会出现一次,如果不想让它删除重复行,使用ALL关键字,即 UNION ALL:

SELECT <col_name1>, <col_name2>.... FORM <table_name1>
WHERE <condition>
UNION ALL
SELECT <col_name3>, <col_name4>.... FROM <table_name2>
WHERE <condition>
ORDER BY <col_name>;
  1. 表的交集--INTERSECT
    INTERSECT 关键字,语法参见 UNION
  2. 表的减法--EXCEPT 差集
    EXCEPT 关键字,语法参见 UNION

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

前面介绍的UNION INTERSECT EXCEPT 都是不会改变列数,只会改变行数,而联结则是一个添加列的运算
内联结
关键字:
INNER JOIN
语法:

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 后面的 ShopProduct AS SP INNER JOIN Product AS P 是一个联结的表,所以 从 表中SELECT,SELECT 可以使用别名而且得指明是选择哪一个表中的哪一列
ON 是专门用来指明联结条件的 ON只能位于FROM 和 WHERE之间
联结条件即是指,如果满足这个联结条件这就是相同的元素,两张表中同一个元素将列补全,如果有一个product_id 不是两张表中都有的,那么这一行信息根本不会被SELECT

外联结
使用方法同内联结,但是关键字是 LEFT OUTER JOIN 或者 RIGHT OUTER JOIN
其中LEFT 和 RIGHT 指定了哪张表作为主表,LEFT 代表写在左侧的是主表
外联结相比起内联结不同在于,主表中如果有元素在非主表中没有出现,同样会被SELECT

多表联结

SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price,IP.inventory_quantity
FROM ShopProduct AS SP INNER JOIN Product AS P
ON SP.product_id = P.product_id
INNER JOIN InventoryProduct AS IP
ON SP.product_id = IP.product_id;

想要多加表就是加 INNER JOIN <table_name3> AS <other_name3> ON <联结条件>;
注: 可以不加别名,但是名字太长不利于阅读,因此推荐起别名

交叉联结
关键字:CROSS JOIN
很少用,将两张表中每一行信息两两进行组合,因此,如果两张表,分别为n行和m行,那么结果会有 nm行

SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name FROM ShopProduct AS SP CROSS JOIN Product AS P;

相关文章

网友评论

    本文标题:《SQL基础教程》阅读笔记8

    本文链接:https://www.haomeiwen.com/subject/pvwofqtx.html