[SQL] Datawhale 學習筆記 Task04
參考資料:
個人原創-MySQL學習筆記
Task04:集合運算
一、知識點大總結
# 多行之間滿足一個需求就需要JOIN
# 笛卡爾積
SELECT *
FROM students,disc_info;
# 根據對應關係連表,實際等同於INNER JOIN
SELECT *
FROM students,disc_info
WHERE students.discipline = disc_info.nid;
SELECT students.name,disc_info.discipline
FROM students,disc_info
WHERE students.discipline = disc_info.nid;
# JOIN 左右連線如果無對應關係顯示NULL,JOIN效率高
# 取交集,INNER JOIN,也可以理解成過濾掉含NULL資料行的左右連線
SELECT A.num, A.name, B.name
FROM A
INNER JOIN B
ON A.nid = B.nid;
# 右連線,RIGHT JOIN
SELECT A.num, A.name, B.name
FROM A
RIGHT JOIN B
ON A.nid = B.nid;
# 左連線,LEFT JOIN
SELECT A.num, A.name, B.name
FROM A
LEFT JOIN B
ON A.nid = B.nid;
二、練習題
練習1:假設連鎖店想要增加毛利率超過 50%或者售價低於 800 的貨物的存貨量, 請使用 UNION 對分別滿足上述兩個條件的商品的查詢結果求並集.
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;
練習2:分別使用 UNION 或者 OR 謂詞,找出毛利率不足 30%或毛利率未知的商品
SELECT *
FROM product
WHERE sale_price / purchase_price < 1.3
UNION
SELECT *
FROM product
WHERE sale_price / purchase_price IS NULL;
練習3:找出 product 和 product2 中售價高於 500 的商品的基本資訊
SELECT *
FROM product
WHERE sale_price > 500
UNION
SELECT *
FROM product2
WHERE sale_price > 500;
練習4:商店決定對product表中利潤低於50%和售價低於1000的商品提價, 請使用UNION ALL 語句將分別滿足上述兩個條件的結果取並集
SELECT *
FROM product
WHERE sale_price < 1000
UNION ALL
SELECT *
FROM product
WHERE sale_price < 1.5 * purchase_price;
練習5:使用 SYSDATE()函式可以返回當前日期時間, 是一個日期時間型別的資料, 試測試該資料型別和數值,字串等型別的相容性
SELECT SYSDATE(), SYSDATE(), SYSDATE()
UNION
SELECT 'chen', 1234, NULL;
練習6:找出只存在於product表但不存在於product2表的商品
SELECT *
FROM product
WHERE product_id
NOT IN (SELECT product_id
FROM product2);
練習7: 使用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);
練習8:使用AND謂詞查詢product表中利潤率高於50%,並且售價低於1500的商品
SELECT *
FROM product
WHERE sale_price > 1.5 * purchase_price
AND sale_price < 1500;
練習9:使用product表和product2表的對稱差來查詢哪些商品只在其中一張表
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);
練習10:藉助上述對稱差的實現方式, 求product和product2的交
SELECT *
FROM product
WHERE product_id IN (SELECT product_id FROM product2)
練習11:找出每個商店裡的衣服類商品的名稱及價格等資訊. 希望得到如下結果
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.product_type, P.purchase_price
FROM shopproduct AS SP
INNER JOIN product AS P
ON SP.product_id = P.product_id
WHERE P.product_type = '衣服';
練習12:分別使用連結兩個子查詢和不使用子查詢的方式, 找出東京商店裡, 售價低於 2000 的商品資訊,希望得到如下結果:
-- 不使用子查詢
SELECT SP.*, P.*
FROM shopproduct AS SP
INNER JOIN product AS P
ON SP.product_id = P.product_id
WHERE shop_id = '000A'
AND sale_price < 2000;
-- 使用子查詢
SELECT *
FROM shopproduct AS SP
INNER JOIN (SELECT *
FROM product
WHERE sale_price < 2000) AS P
ON SP.product_id = P.product_id
WHERE SP.shop_id = '000A';
相關文章
- SQL學習筆記SQL筆記
- 【Task04】Numpy學習打卡
- 《SQL 反模式》 學習筆記SQL模式筆記
- spark學習筆記--Spark SQLSpark筆記SQL
- PL/SQL學習筆記-1SQL筆記
- PL/SQL學習筆記-2SQL筆記
- PL/SQL學習筆記-3SQL筆記
- PL/SQL學習筆記-4SQL筆記
- PL/SQL學習筆記-5SQL筆記
- PL/SQL學習筆記-6SQL筆記
- Java學習筆記--sql與javaJava筆記SQL
- Java學習筆記--sql語句Java筆記SQL
- PL/SQL學習筆記-總結SQL筆記
- Day5-SQL綜合練習(Datawhale)SQL
- SQL學習筆記—非select操作SQL筆記
- Mybatis學習筆記(6)-動態SQLMyBatis筆記SQL
- 【筆記】statspack 學習(二) sql調整筆記SQL
- SQL Server工作平臺學習筆記SQLServer筆記
- [PL/SQL]10g PL/SQL學習筆記(一)SQL筆記
- [PL/SQL]10g PL/SQL學習筆記(二)SQL筆記
- [PL/SQL]10g PL/SQL學習筆記(三)SQL筆記
- [學習筆記]SQL server完全備份指南筆記SQLServer
- MySql 學習筆記三:常用SQL優化MySql筆記優化
- sql2005配置學習筆記SQL筆記
- SQL學習筆記(ORACLE內部儲存)SQL筆記Oracle
- numpy的學習筆記\pandas學習筆記筆記
- MySql 學習筆記一:SQL語句優化MySql筆記優化
- PL/SQL經典學習筆記(6-10)SQL筆記
- PL/SQL經典學習筆記(2-5)SQL筆記
- IT學習筆記筆記
- 學習筆記筆記
- oracle學習筆記(十七) PL/SQL高階應用Oracle筆記SQL
- 《JAVA學習指南》學習筆記Java筆記
- Datawhale-爬蟲-Task4(學習xpath)爬蟲
- 面試複習筆記三(sql)面試筆記SQL
- CUUG筆記 ORACLE索引學習筆記筆記Oracle索引
- Elasticsearch學習筆記Elasticsearch筆記
- 字串學習筆記字串筆記