一、学习知识点

集合运算-表的加减法和join等

二、学习内容

sqlalchemy 数值加法 sql计算加法_运算符


表的加法–UNION

例句:

SELECT product_id, product_name

FROM product

UNION

SELECT product_id, product_name

FROM product2;

效果如下:

sqlalchemy 数值加法 sql计算加法_缺失值_02


相当于并集,并且UNION 等集合运算符通常都会除去重复的记录

包含重复行的集合运算 UNION ALL

SELECT *

FROM product

WHERE sale_price < 1000

UNION ALL

SELECT *

FROM product

WHERE sale_price > 1.5 * purchase_price

MySQL 8.0 不支持交运算INTERSECT

MySQL 8.0 还不支持 EXCEPT 运算

MySQL 8.0 还不支持 表的减法运算符 EXCEPT. 不过, 借助第六章学过的NOT IN 谓词, 我们同样可以实现表的减法

联结.

笔记主要介绍内联结和外联结

内连结(INNER JOIN)

– 内连结

FROM <tb_1> INNER JOIN <tb_2> ON <condition(s)>

在思路上, 关联子查询更像是 vlookup 函数

例句:SELECT SP.shop_id

,SP.shop_name

,SP.product_id

,P.product_name

,P.product_type

,P.sale_price

,SP.quantity

FROMshopproduct AS SP

INNER JOIN product AS P

ON SP.product_id = P.product_id;

要点一: 进行连结时需要在 FROM 子句中使用多张表

要点二:必须使用 ON 子句来指定连结条件

要点三: SELECT 子句中的列最好按照 表.列名 的格式来使用.

自连结(SELF JOIN).

自连结可以是外连结也可以是内连结, 它是不同于内连结外连结的另一个连结的分类方法.

自然连结(NATURAL JOIN)

它其实是内连结的一种特例–当两个表进行自然连结时, 会按照两个表中都包含的列名来进行等值内连结, 此时无需使用 ON 来指定连接条件.

SELECT * FROM shopproduct NATURAL JOIN product

外连结(OUTER JOIN)

外连结会根据外连结的种类有选择地保留无法匹配到的行.

按照保留的行位于哪张表,外连结有三种形式: 左连结, 右连结和全外连结.

左连结会保存左表中无法按照 ON 子句匹配到的行, 此时对应右表的行均为缺失值; 右连结则会保存右表中无法按照 ON 子句匹配到的行, 此时对应左表的行均为缺失值; 而全外连结则会同时保存两个表中无法按照 ON子句匹配到的行, 相应的另一张表中的行用缺失值填充.

三种外连结的对应语法分别为:

– 左连结
FROM <tb_1> LEFT OUTER JOIN <tb_2> ON <condition(s)>
– 右连结
FROM <tb_1> RIGHT OUTER JOIN <tb_2> ON <condition(s)>
– 全外连结
FROM <tb_1> FULL OUTER JOIN <tb_2> ON <condition(s)>
外连结要点 2:使用 LEFT、RIGHT 来指定主表.*
外连结还有一点非常重要,那就是要把哪张表作为主表.最终的结果中会包含主表内所有的数据.指定主表的关键字是 LEFT 和 RIGHT.顾名思义,使用 LEFT 时 FROM 子句中写在左侧的表是主表,使用 RIGHT 时右侧的表是主表.
MySQL8.0 目前还不支持全外连结.

三、学习问题与解答

表的联结不太好理解
联想一下excel表中的vlookup函数的操作方式进行学习

四、学习思考与总结

mysql目前并不支持全外联结,根据以后版本更新情况进行学习
表的联结与数的集合内容类似,多看几遍文氏图
交叉联结比较难理解一些,需要多看例子