SQL查詢--關於查詢的練習題


下面的練習題出自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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM