Update ch04:集合运算.md
This commit is contained in:
parent
7b4540d36f
commit
908d8ca64e
10
ch04:集合运算.md
10
ch04:集合运算.md
|
@ -266,9 +266,9 @@ SELECT *
|
|||
|
||||
## 4.1.5 对称差
|
||||
|
||||
两个集合A、B的对称差是指那些仅属于A或仅属于B的元素构成的集合。对称差也是个非常基础的运算,例如,两个集合的交就可以看作是两个集合的并去掉两个集合的对称差。上述方法在其他数据库里也可以用来简单地实现表或查询结果的对称差运算: 首先使用UNION求两个表的并集,然后使用INTERSECT求两个表的交集,然后用并集减去交集,就得到了对称差。
|
||||
两个集合 A、B 的对称差是指那些仅属于A或仅属于B的元素构成的集合。对称差也是个非常基础的运算,例如,两个集合的交就可以看作是两个集合的并去掉两个集合的对称差。上述方法在其他数据库里也可以用来简单地实现表或查询结果的对称差运算: 首先使用UNION求两个表的并集,然后使用 INTERSECT 求两个表的交集,然后用并集减去交集,就得到了对称差。
|
||||
|
||||
但由于在MySQL 8.0 里,由于两个表或查询结果的并不能直接求出来,因此并不适合使用上述思路来求对称差。好在还有差集运算可以使用。从直观上就能看出来,两个集合的对称差等于 A-B并上B-A,因此实践中可以用这个思路来求对称差。
|
||||
但由于在 MySQL 8.0 里,由于两个表或查询结果的并不能直接求出来,因此并不适合使用上述思路来求对称差。好在还有差集运算可以使用。从直观上就能看出来,两个集合的对称差等于 `A-B` 并上 `B-A`,因此实践中可以用这个思路来求对称差。
|
||||
|
||||
**练习题:**
|
||||
|
||||
|
@ -281,7 +281,6 @@ SELECT *
|
|||
**参考答案:**
|
||||
|
||||
```sql
|
||||
-- 使用 NOT IN 实现两个表的差集
|
||||
SELECT *
|
||||
FROM product
|
||||
WHERE product_id NOT IN (SELECT product_id FROM product2)
|
||||
|
@ -291,11 +290,6 @@ SELECT *
|
|||
WHERE product_id NOT IN (SELECT product_id FROM product);
|
||||
```
|
||||
|
||||
### 4.1.5.1 借助并集和差集迂回实现交集运算 INTERSECT
|
||||
|
||||
通过观察集合运算的文氏图,我们发现,两个集合的交可以看作是两个集合的并去掉两个集合的对称差。
|
||||
|
||||
|
||||
# 4.2 连结(JOIN)
|
||||
|
||||
前一节我们学习了 UNION和INTERSECT 等集合运算,这些集合运算的特征就是以行方向为单位进行操作。通俗地说,就是进行这些集合运算时,会导致记录行数的增减,使用 UNION 会增加记录行数,而使用 INTERSECT 或者 EXCEPT 会减少记录行数。
|
||||
|
|
Loading…
Reference in New Issue