SQL的集合運算概念
來自專欄數據分析成長之路
表的加減法
1.什麼是集合運算: 集合在數學領域表示「(各種各樣的)事物的總和」,在資料庫領域表示記錄的集合。具體來說,表、視圖和查詢的執行結果都是記錄的集合。
2.表的加法——UNION(並集):集合運算符會除去重複的記錄。
3.集合運算的注意事項:
- 作為運算對象的記錄的列數必須相同;
- 作為運算對象的記錄中列的類型必須一致;
- 可以使用任何SELECT語句,但ORDER BY子句只能在最後使用一次。
4.包含重複行的集合運算——ALL選項:
5.選取表中公共部分——INTERSECT:用法同UNION,但MySQL不適用。
6.記錄的減法——EXCEPT:用法同UNION,但MySQL不適用。
聯結(以列為單位對錶進行聯結)
1.什麼是聯結:簡單來說,就是將其他表中的列添加過來,進行「添加列」的運算。
2.內聯結——INNER JOIN:在 ON 之後指定兩張表聯結所使用的列(聯結鍵)
3.進行內聯結時必須使用ON子句,並且要書寫在FROM和WHERE之間。
4.使用聯結時SELECT子句中獨有的列可以省略表名,但最好按照「<表的別名>.<列名>」的格式進行書寫,避免混亂。
5.內聯結和WHERE子句結合使用:
6.這張「表」只在 SELECT 語句執行期間存在, SELECT 語句執行之後就會消失。如果希望繼續使用這張「表」,還是將它創建成視圖吧。
7.外聯結——OUTER JOIN:
8.與內聯結的結果相比,不同點顯而易見,那就是結果的行數不一樣,外聯結選取出單張表中全部的信息。
9.外聯結還有一點非常重要,那就是要把哪張表作為主表。最終的結果中會包含主表內所有的數據。指定主表的關鍵字是 LEFT 和 RIGHT。顧名思義, 使用 LEFT 時 FROM 子句中寫在左側的表是主表,使用 RIGHT時右側的表是主表。
10.外聯結中使用LEFT、 RIGHT來指定主表。使用二者所得到的結果完全相同。
11.3張以上的表的聯結:
12.交叉聯結——CROSS JOIN:
13.進行交叉聯結時無法使用內聯結和外聯結中所使用的 ON 子句,這是因為交叉聯結是對兩張表中的全部記錄進行交叉組合,因此結果中的記錄數通常是兩張表中行數的乘積。本例中,因為 ShopProduct表存在 13 條記錄, Product 表存在 8 條記錄,所以結果中就包含了13 × 8 = 104 條記錄。
14.交叉聯結沒有應用到實際業務之中的原因有兩個:一是其結果沒有實用價值,二是由於其結果行數太多,需要花費大量的運算時間和高性能設備的支持。
以上,表的集合可以用數學上的文氏圖進行理解,聯結的三個定義:內聯結、外聯結和交叉聯結搞明白含義就OK。
推薦閱讀: