SQL的集合運算概念

SQL的集合運算概念

來自專欄數據分析成長之路

表的加減法

1.什麼是集合運算: 集合在數學領域表示「(各種各樣的)事物的總和」,在資料庫領域表示記錄的集合。具體來說,表、視圖和查詢的執行結果都是記錄的集合。

2.表的加法——UNION(並集):集合運算符會除去重複的記錄。

3.集合運算的注意事項:

    1. 作為運算對象的記錄的列數必須相同;
    2. 作為運算對象的記錄中列的類型必須一致;
    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。


推薦閱讀:

TAG:SQL | SQL語句 | 數據分析 |