Task 04: 集合運算
技術標籤:mysql
4.1 表的加減法
4.1.1 什麼是集合運算
4.1.2 表的加法–UNION
練習題 :
分別使用 UNION 或者 OR 謂詞,找出毛利率不足 30%或毛利率未知的商品.
參考答案:
– 使用 OR 謂詞
SELECT *
FROM Product
WHERE sale_price / purchase_price < 1.3
OR sale_price / purchase_price IS NULL;
– 使用 UNION
SELECT *
FROM Product
WHERE sale_price / purchase_price < 1.3
UNION
SELECT *
FROM Product
WHERE sale_price / purchase_price IS NULL;
練習題:
找出 Product 和 Product2 中售價高於 500 的商品的基本資訊.
SELECT *
FROM product
WHERE sale_price > 500
UNION
SELECT *
FROM product2
WHERE sale_price > 500;
練習題:
商店決定對product表中利潤低於50%和售價低於1000的商品提價, 請使用UNION ALL 語句將分別滿足上述兩個條件的結果取並集. 查詢結果類似下表:
答:
SELECT *
FROM Product
WHERE sale_price < 1000
UNION ALL
SELECT *
FROM Product
WHERE sale_price > 1.5 * purchase_price
4.1.3 MySQL 8.0 不支援交運算INTERSECT
練習題:
找出只存在於Product表但不存在於Product2表的商品.
-- 使用 IN 子句的實現方法
SELECT *
FROM Product
WHERE product_id NOT IN (SELECT product_id
FROM Product2)
練習題:
使用NOT謂詞進行集合的減法運算, 求出Product表中, 售價高於2000,但利潤低於30%的商品, 結果應該如下表所示.
答:
SELECT *
FROM Product
WHERE sale_price > 2000
AND product_id NOT IN (SELECT product_id
FROM Product
WHERE sale_price<1.3*purchase_price)
練習題:
使用AND謂詞查詢product表中利潤率高於50%,並且售價低於1500的商品,查詢結果如下所示.
答:
SELECT *
FROM Product
WHERE sale_price > 1.5 * purchase_price
AND sale_price < 1500
練習題:
使用Product表和Product2表的對稱差來查詢哪些商品只在其中一張表, 結果類似於:
– 使用 NOT IN 實現兩個表的差集
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)
4.2 連結(JOIN)
4.2.1 內連結(INNER JOIN)
練習題:
每個商店中, 售價最高的商品的售價分別是多少?
答案:
SELECT SP.shop_id
,SP.shop_name
,MAX(P.sale_price) AS max_price
FROMshopproduct AS SP
INNER JOINproduct AS P
ON SP.product_id = P.product_id
GROUP BY SP.shop_id,SP.shop_name
4.2.2 外連結(OUTER JOIN)
4.2.3 多表連結
4.2.4 ON 子句進階–非等值連結
4.2.5 交叉連結—— CROSS JOIN(笛卡爾積)
4.2.6 連結的特定語法和過時語法