SQL(七、集合運算)

SQL(七、集合運算)

來自專欄露珠學數據分析1 人贊了文章

1、表的加減法

集合:在資料庫領域,集合表示記錄的集合。表、視圖和查詢的執行結果都是記錄的集合。

集合運算:對滿足同一規則的記錄進行的加減等四則運算。通過集合運算,可以得到兩張表中記錄的集合或者公共記錄的集合,又或者其中某張表中的記錄的集合。

集合運算符:用來進行集合運算的運算符稱為集合運算符。

(1)表的加法——UNION(進行加法運算的並集)

使用表product和表product2.

表product

表product2

註:集合運算符會去除重複的記錄。

(2)集合運算符的注意事項

注意1:作為運算對象的記錄的列數必須相同。

注意2:作為運算對象的記錄中列的類型必須一致。一定要使用不同數據類型的列時,可以使用CAST進行類型的轉換。

注意3:可以使用任何SELECT語句,及其它語句,但是ORDER BY子句只能在最後使用一次。

(3)包含重複行的集合運算——ALL選項

僅適用UNION時,會將重複行刪除,但是,如果在UNION後加上ALL,則會將重複行保留

(4)選取表中的公共部分——INTERSECT(交集)(Mysql尚不支持此函數)

注意事項同UNION一樣,保留重複行同樣需使用INTERSECT ALL。

(5)記錄的減法——EXCEPT(Mysql尚不支持此函數)

從第一個表格中減去表格一與表格二的交集,剩下即為所求。被減數和減數的位置不同,得到的結果也不相同。

2、聯結(以列為單位對錶進行聯結)

聯結:將其他表中的列添加過來,進行「添加列」的運算。

聯結的類別:內聯結和外聯結。

(1)內聯結

表product

表shopproduct

如上所示,兩張表中的列可以分為如下兩類:

A、兩張表中都包含的列——商品編號;

B、只存在於一張表中的列——商品編號之外的列。

所謂聯結運算,就是以A中的列作為橋樑,將B中滿足同樣條件的列彙集到同一結果中。

下面嘗試從表product中取出商品名稱(product_name)和銷售單價(sale_price),並與shopproduct表中的內容進行結合。

關於內聯結,需要注意的有以下三點:

1)進行聯結時需要在FROM子句中使用多張表,使用別名可增加可讀性。

2)進行內聯結時必須使用ON子句,ON之後指定兩表聯結所使用的列(聯結鍵),ON是專門用來指定聯結條件的,能起到與WHERE相同的作用,需要指定多個鍵時,同樣可以使用AND和OR,並且ON子句要書寫在FROM和WHERE之間。

聯結條件也可以使用「=」來記述,在語法上,還可以使用《=和BETWEEN等謂詞,一般都可以使用「=」將聯結鍵關聯起來,就能夠將兩張表中滿足相同條件的記錄進行「聯結」了。

3)使用聯結時SELECT子句中的列需要按照「表的別名.列名」的格式進行書寫。

4)內聯結和WHERE子句可以結合使用。

例如:只想得到東京店(000A)的信息。

像這樣使用聯結運算將滿足相同規則的表聯結起來時,WHERE、GROUP BY、HAVING、ORDER BY等工具都可以正常使用。

(2)外聯結——OUTER JOIN

外聯結注意:

1)選取出單張表中全部信息。

內聯結只能選取出同時存在於兩表中的數據;

對外聯結來說,只要數據存在於某一張表當中,就能夠讀取出來;同時,使用外聯結能夠得到固定行數的結果。

2)主表。

最終的結果中會包含主表內的所有數據。指定主表的關鍵字是LEFT和RIGHT,即使用LEFT時FROM子句中寫在左側的是主表,使用RIGHT時,寫在右側的是主表。

下面的語句可以和上面得到相同的結果。

(3)3張表以上的聯結

創建表inventoryproduct。

從上表中取出保存在P001倉庫中的商品數量,並將該列添加到表product和表shopproduct內聯得到的表格中。聯結方式為內聯結,聯結鍵為商品編號。

對三張表進行聯結。

由於product表和shopproduct表已經進行了聯結,因此,這裡無需再對product 表和inventoryproduct表進行聯結,即使想要把聯結的表增加到4張、5張......,使用INNER JOIN進行添加的方式也是完全相同的。

(4)交叉聯結——CROSS JOIN(笛卡爾積)(實際業務中一般不會使用)

交叉聯結是所有聯結的基礎,本身非常簡單,但是其結果有點麻煩。

交叉聯結是對兩張表中的全部記錄進行交叉組合,因此結果中的記錄數通常是兩張表中行數的乘積,這就是集合運算的乘法。

內聯結時交叉聯結的一部分,「內」也可以理解為「包含在交叉聯結結果中的部分」。相反,外聯結的「外」可以理解為「交叉聯結結果之外的部分」。

未應用到實際業務中的原因有兩個,一是結果沒有實用價值,二是由於結果行數太多,需要花費大量的運算時間和高性能設備的支持。

(5)聯結的特定語法和過時語法

專欄:

本章學習了四個集合運算符:UNION(並集)、EXCEPT(差集)、INTERSECT(交集)、CROSS JOIN(笛卡爾積)。

除法運算也是存在的,集合中的除法稱為關係除法,關係是數學領域中對錶或者視圖的稱謂,但是並沒有專門的運算符。

練:將表product和表shopproduct外聯後的NULL變換成不確定。


推薦閱讀:

TAG:SQL語句 | SQL | 數學 |