下面的練習題出自LeetCode:https://leetcode-cn.com/problemset/database/,有興趣的可以去上面刷刷題
練習題1:超過經理收入的員工
分析:
使用sql自連接查詢,因為員工Id和經理的ManagerId都在同一個表,使用自連接,可以把一張表看作2張表來使用,一張為員工表ygb,一張為經理表jlb;
查詢思路就是:篩選出員工表的ManagerId與經理表的Id相等的記錄,然后在這些記錄中篩選員工表的Salary大於經理表的Salary的記錄
SELECT * FROM employee ygb,employee jlb WHERE ygb.ManagerId = jlb.Id
SELECT * FROM employee ygb,employee jlb WHERE ygb.ManagerId = jlb.Id AND ygb.Salary>jlb.Salary
SELECT ygb.name AS Employee FROM employee ygb,employee jlb WHERE ygb.ManagerId = jlb.Id AND ygb.Salary>jlb.Salary
練習題2:刪除重復的電子郵箱
分析:
先使用自連接查詢,用自身表和自己比較,來判斷哪些重復郵箱
SELECT * FROM Person p1, Person p2
這樣得到一個2個相同表的笛卡爾積,即兩張表的組合結果
可以分別查詢p1.*和p2.*
接着查重
SELECT p1.* FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id>p2.Id
然后刪除重復數據即可
DELETE p1.* FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id>p2.Id
2019-09-04 22:47:00