SQL Tutorial 集合運(yùn)算

1 表的加法–UNION

1.1 UNION

基本語(yǔ)法:
SELECT product_id, product_name
FROM product
UNION
SELECT product_id, product_name
FROM product2;

示例:
-- 參考答案:
SELECT product_id,product_name,product_type
,sale_price,purchase_price
FROM product
WHERE sale_price<800
UNION
SELECT product_id,product_name,product_type
,sale_price,purchase_price
FROM product
WHERE sale_price>1.5*purchase_price;

1.2 UNION 與 OR 謂詞

-- 使用 OR 謂詞
SELECT *
FROM product
WHERE sale_price / purchase_price < 1.3
OR sale_price / purchase_price IS NULL;

1.3 包含重復(fù)行的集合運(yùn)算 UNION ALL

SQL 語(yǔ)句的 UNION 會(huì)對(duì)兩個(gè)查詢的結(jié)果集進(jìn)行合并和去重, 這種去重不僅會(huì)去掉兩個(gè)結(jié)果集相互重復(fù)的, 還會(huì)去掉一個(gè)結(jié)果集中的重復(fù)行. 但在實(shí)踐中有時(shí)候需要需要不去重的并集, 在 UNION 的結(jié)果中保留重復(fù)行的語(yǔ)法其實(shí)非常簡(jiǎn)單,只需要在 UNION 后面添加 ALL 關(guān)鍵字就可以了.

1.4 NOT IN (處理除去xx數(shù)據(jù)時(shí)可以用)

實(shí)例:使用NOT謂詞進(jìn)行集合的減法運(yùn)算, 求出product表中, 售價(jià)高于2000,但利潤(rùn)低于30%的商品, 結(jié)果應(yīng)該如下表所示。
SELECT *
FROM product
WHERE sale_price > 2000 AND product_id NOT IN (SELECT product_id
FROM product
WHERE sale_price<1.3*purchase_price)

1.5 對(duì)稱差 (用NOT IN解決)

兩個(gè)集合A,B的對(duì)稱差是指那些僅屬于A或僅屬于B的元素構(gòu)成的集合. 對(duì)稱差也是個(gè)非?;A(chǔ)的運(yùn)算, 例如, 兩個(gè)集合的交就可以看作是兩個(gè)集合的并去掉兩個(gè)集合的對(duì)稱差.上述方法在其他數(shù)據(jù)庫(kù)里也可以用來(lái)簡(jiǎn)單地實(shí)現(xiàn)表或查詢結(jié)果的對(duì)稱差運(yùn)算: 首先使用UNION求兩個(gè)表的并集, 然后使用INTERSECT求兩個(gè)表的交集, 然后用并集減去交集, 就得到了對(duì)稱差。

例:
-- 使用 NOT IN 實(shí)現(xiàn)兩個(gè)表的差集
SELECT *
FROM product
WHERE product_id NOT IN (SELECT product_id FROM product2)
UNION
SELECT *
FROM product2
WHERE product_id NOT IN (SELECT product_id FROM product)

  1. 連結(jié) (JOIN)

此部分多摘自 w3school :https://www.w3schools.com/sql/sql_join.asp

- (INNER) JOIN: Returns records that have matching values in both tables

- LEFT (OUTER) JOIN: Returns all records from the left table, and the matched records from the right table

- RIGHT (OUTER) JOIN: Returns all records from the right table, and the matched records from the left table

- FULL (OUTER) JOIN: Returns all records when there is a match in either left or right table

Full Join
Right Join
Inner Join
Left Join

不同Join的結(jié)果參考: https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/

一些Join的練習(xí)題: https://www.w3resource.com/sql-exercises/sql-joins-exercises.php

?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 4.1 表的加減法 4.1.1 什么是集合運(yùn)算 集合在數(shù)學(xué)領(lǐng)域表示“各種各樣的事物的總和”, 在數(shù)據(jù)庫(kù)領(lǐng)域表示記錄...
    忘原_b2d5閱讀 945評(píng)論 0 0
  • 3.1 視圖 我們先來(lái)看一個(gè)查詢語(yǔ)句(僅做示例,未提供相關(guān)數(shù)據(jù)) SELECTstu_nameFROMview_s...
    忘原_b2d5閱讀 493評(píng)論 0 0
  • 19.Students With Invalid Departments Table:Departments +-...
    喜歡捉迷藏的小可愛(ài)閱讀 811評(píng)論 0 0
  • 2.1 SELECT語(yǔ)句基礎(chǔ) 2.1.1 從表中選取數(shù)據(jù) SELECT語(yǔ)句 從表中選取數(shù)據(jù)時(shí)需要使用SELECT語(yǔ)...
    忘原_b2d5閱讀 471評(píng)論 0 0
  • 1. 視圖 視圖是一個(gè)虛擬的表,不同于直接操作數(shù)據(jù)表,視圖是依據(jù)SELECT語(yǔ)句來(lái)創(chuàng)建的(會(huì)在下面具體介紹),所以...
    noob鴿閱讀 285評(píng)論 0 0

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