《SQL基礎(chǔ)教程》學(xué)習(xí)筆記Ch7

7集合運(yùn)算

7-1表的加減法

表的加法--UNION

首先我們新建一個(gè)表Product2:


7-1.png

使用UNION函數(shù)進(jìn)行“product表+product2表”的運(yùn)算:


7-2.png

商品編號(hào)為“0001”~“0003”的 3 條記錄在兩個(gè)表中都存在,因此大家可能會(huì)認(rèn)為結(jié)果中會(huì)出現(xiàn)重復(fù)的記錄,但是 UNION 等集合運(yùn)算符通常都會(huì)除去重復(fù)的記錄。
集合運(yùn)算的注意事項(xiàng)

注意事項(xiàng)1 ——作為運(yùn)算對(duì)象的記錄的列數(shù)必須相同

-- 列數(shù)不一致時(shí)會(huì)發(fā)生錯(cuò)誤
SELECT product_id, product_name
  FROM Product 
 UNION
SELECT product_id, product_name, sale_price 
  FROM Product2;

注意事項(xiàng)2 ——作為運(yùn)算對(duì)象的記錄中列的類型必須一致

SELECT product_id, sale_price 
  FROM Product
 UNION 
SELECT product_id, regist_date
  FROM Produt2;

注意事項(xiàng)3 —— 可以使用任何SELECT語句,但ORDER BY子句只能在最后使用一次


7-3.png
包含重復(fù)行的集合運(yùn)算--ALL選項(xiàng)

在 UNION 的結(jié)果中保留重復(fù)行,只需要在 UNION 后面添加 ALL 關(guān)鍵字就可以了:


7-4.png
選取表中的公共部分--INTERSECT

INTERSECT只選取兩表的重合部分


7-5.png
記錄的減法--EXCEPT

減法運(yùn)算EXCEPT把表二與表一重合部分刪去


7-6.png

被減數(shù)和減數(shù)位置不同,得到的結(jié)果也不同


7-7.png

7-3聯(lián)結(jié)(以列為單位對(duì)表進(jìn)行聯(lián)結(jié))

什么是聯(lián)結(jié)

UNION 和 INTERSECT 等集合運(yùn)算,這些集合運(yùn)算的特征就是以行方向?yàn)閱挝贿M(jìn)行操作。而JOIN(聯(lián)結(jié))函數(shù)則是對(duì)列進(jìn)行運(yùn)算,即將其他表中的列添加進(jìn)來。

內(nèi)聯(lián)結(jié)--INNER JOIN

我們還是對(duì)兩張表Product,ShopProduct進(jìn)行操作,表結(jié)構(gòu)分別是:


7-8.png

兩張表中的列可以分成以下兩類:
1.兩張表中都包含的列 → 商品編號(hào)
2.只存在于一張表內(nèi)的列 → 商品編號(hào)之外的列

東京店銷售商品編號(hào)為0001、0002和0003的商品的名稱 (product_name)和銷售單價(jià)(sale_price)在 ShopProduct 表中并不存在,這些信息都保存在 Product 表中。
使用INNER JOIN函數(shù)來得到這些商品的對(duì)應(yīng)信息:


7-8.png

內(nèi)聯(lián)結(jié)需要注意的三點(diǎn):
1.FROM子句后有兩張表
2.ON子句是用來指定聯(lián)結(jié)條件的,一般跟“=”,當(dāng)兩個(gè)表中有相同記錄時(shí)進(jìn)行聯(lián)結(jié)
3.SELECT子句

內(nèi)聯(lián)結(jié)和WHERE子句結(jié)合使用

不想查詢所有店,只查東京的,可以在ON子句之后加WHERE子句:


7-9.png
外聯(lián)結(jié)--OUTER JOIN

外聯(lián)結(jié)也是使用ON進(jìn)行聯(lián)結(jié),但是結(jié)果稍有不同:


7-10.png
外聯(lián)結(jié)的要點(diǎn)1--選取出單張表中的所有信息

內(nèi)聯(lián)結(jié)只能選取出同時(shí)存在于兩張表中的數(shù)據(jù)。相反,對(duì)于外聯(lián)結(jié)來說,只要數(shù)據(jù)存在于某一張表當(dāng)中,就能夠讀取出來。

外聯(lián)結(jié)的要點(diǎn)2--主表的設(shè)定
SELECT SP.product_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price
  FROM Product AS P LEFT OUTER JOIN ShopProduct AS SP 
    ON SP.product_id = P.product_id;

上面兩個(gè)結(jié)果是一樣的,指定主表的關(guān)鍵字是 LEFT 和 RIGHT。顧 名思義,使用 LEFT 時(shí) FROM 子句中寫在左側(cè)的表是主表,使用 RIGHT 時(shí)右側(cè)的表是主表。

外聯(lián)結(jié)的要點(diǎn)3--3張以上的表聯(lián)結(jié)

首先創(chuàng)建下面這個(gè)新表:


7-11.png

聯(lián)結(jié)三個(gè)表的方法:

SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price, IP.inventory_quantity
  FROM ShopProduct AS SP INNER JOIN Product AS P
    ON SP.product_id = P.product_id
INNER JOIN InventoryProduct AS IP
    ON SP.product_id = P.product_id
 WHERE IP.inventory_id = 'P001';
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容