題目來源:LeetCode For English || 力扣中文版
題目類別:數據庫
題目難度:簡單
題目範圍:免會員版所有題目
目錄
175.組合兩個表
SELECT FirstName, LastName, City, State FROM Person LEFT JOIN Address ON
Person.PersonId = Address.PersonId;
外連接
在左外連接和右外連接時都會以一張表爲基表,該表的內容會全部顯示,然後加上兩張表匹配的內容。如果基表的數據在另一張表沒有記錄。那麼在相關聯的結果集行中列顯示爲空值(NULL)。
查詢的是左表所有數據以及其交集部分。
176.第二高的薪水
SELECT (SELECT DISTINCT Salary FROM Emplyee OEDER BY Salary DESC LIMIT 1,1)
AS SecondHightestSalary;
或者使用IFNULL
SELECT IFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1,1), null )
AS SecondHighestSalary;
SQL查詢語句中的 limit 與 offset 的區別:
- limit y 分句表示: 讀取 y 條數據
- limit x, y 分句表示: 跳過 x 條數據,讀取 y 條數據
- limit y offset x 分句表示: 跳過 x 條數據,讀取 y 條數據
181.超過經理收入的員工
SELECT a.Name AS 'Employee' FROM Employee AS a, Employee AS b
WHERE a.ManagerId = b.Id AND a.Salary > b.Salary;
182.查找重複的電子郵箱
SELECT Email FROM Person GROUP BY Email having count(Email)>1;
where 和 having的區別?
- where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
- where 後不可以跟聚合函數,having可以進行聚合函數的判斷。
183.從不訂購的客戶
SELECT Name AS 'Customers'
FROM Customers
WHERE Customers.Id NOT IN
(SELECT CustomerId FROM orders);
196.刪除重複的電子郵箱
DELETE p1.Email FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id;
197.上升的溫度
SELECT w1.Id FROM Weather w1 INNER JOIN Weather w2
DATEDIFF(day,w1.RecordDate,w2.RecordDate) = 1
WHERE w1.Temperature < w2.Temperature;
這裏的DATEDIFF有個坑
Mysql中DATEDIFF用法:
SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate;
// 結果爲-1,第一個參數是結束時間,第二個參數是開始時間
TIMESTAMPDIFF用法:
SELECT TIMESTAMPDIFF(DAY,'2008-12-29','2008-12-30') AS DiffDate;
//結果爲1,第一個爲開始時間,第二個爲結束時間
在使用在線AlaSQL內存型數據庫測試的時候
SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate;
// 結果爲1,同樣的語法在不同的數據庫結果不同。
595.大的國家
SELECT Name, Population, Area FROM World WHERE Area > 3000000 OR Population > 25000000;
596.超過5名學生的課
SELECT class FROM courses GROUP BY class having COUNT(DISTINCT student)>=5;
DISTINCT用法:
- distinct一般是用來去除查詢結果中的重複記錄的,只能用在select語句中
- 對多列操作時,必須放到所有字段前面(否則報錯),作用範圍是其後面所有字段
- 不過濾Null
620.有趣的電影
SELECT * FROM cinema WHERE description != "boring" AND mod(id, 2)=1 ORDER BY rating DESC;
627.交換工資
UPDATE salary SET sex= CASE WHEN sex='m' THEN 'f' WHEN sex='f' THEN 'm' ELSE NULL END;
CASE WHEN THEN ELSE END
1179.重新格式化部門表
SELECT id, SUM(CASE `month` WHEN 'Jan' THEN revenue END) Jan_Revenue,
SUM(CASE `month` WHEN 'Feb' THEN revenue END) Feb_Revenue,
SUM(CASE `month` WHEN 'Mar' THEN revenue END) Mar_Revenue,
SUM(CASE `month` WHEN 'Apr' THEN revenue END) Apr_Revenue,
SUM(CASE `month` WHEN 'May' THEN revenue END) May_Revenue,
SUM(CASE `month` WHEN 'Jun' THEN revenue END) Jun_Revenue,
SUM(CASE `month` WHEN 'Jul' THEN revenue END) Jul_Revenue,
SUM(CASE `month` WHEN 'Aug' THEN revenue END) Aug_Revenue,
SUM(CASE `month` WHEN 'Sep' THEN revenue END) Sep_Revenue,
SUM(CASE `month` WHEN 'Oct' THEN revenue END) Oct_Revenue,
SUM(CASE `month` WHEN 'Nov' THEN revenue END) Nov_Revenue,
SUM(CASE `month` WHEN 'Dec' THEN revenue END) Dec_Revenue FROM Department
GROUP BY id;