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)
- 連結(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




不同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