题目1:175. 组合两个表
https://leetcode.cn/problems/combine-two-tables/description/
解答:
select FirstName, LastName, City, State from Person left join Address on Person.PersonId = Address.PersonId;
涉及到的知识点:
INNER JOIN
和OUTER JOIN
INNER JOIN
返回满足连接条件的所有行。这意味着只有在两个表中的连接键相匹配时,相应的行才会出现在结果集中。如果某行在其中一个表中没有匹配项,则不会出现在结果中。OUTER JOIN
会返回左表(对于LEFT OUTER JOIN
)或右表(对于RIGHT OUTER JOIN
)的所有行,即使它们在另一个表中没有匹配项。如果某行在另一个表中没有匹配项,则结果集中对应的字段将为 NULL。
LEFT OUTER JOIN:
返回左表的所有行,以及右表中匹配的行。如果左表的某行在右表中没有匹配项,则结果集中右表的部分将为 NULL。RIGHT OUTER JOIN:
与LEFT OUTER JOIN
相反,返回右表的所有行,以及左表中匹配的行。如果右表的某行在左表中没有匹配项,则结果集中左表的部分将为 NULL。FULL OUTER JOIN:
返回当左表或右表中有匹配时的所有行。如果某行在另一个表中没有匹配项,则结果集中对应的字段将为 NULL。
题目2:176. 第二高的薪水
https://leetcode.cn/problems/second-highest-salary/description/
解答:
select ifNull(( select distinct salary from Employee order by salary desc limit 1,1),null) as SecondHighestSalary;
涉及到的知识点:
- limit:用于限制查询结果返回的记录数。它通常与
ORDER BY
子句一起使用,以便按特定顺序返回一定数量的记录。LIMIT
子句的基本语法如下:
offset
是可选的,表示从哪一行开始返回结果。第一行的偏移量是 0(而不是 1)。如果省略offset
,则默认值为 0。count
是要返回的记录数。SELECT column1, column2, ... FROM table_name ORDER BY column_name [ASC|DESC] LIMIT offset, count;
- isNull:ifnull(a,b)判断是否是空值,语法:
expression1
是第一个要检查的表达式。expression2
是当expression1
为 NULL 时返回的表达式。如果
expression1
不是 NULL,IFNULL()
函数将返回expression1
的值;如果expression1
是 NULL,则返回expression2
的值。IFNULL(expression1, expression2)
DISTINCT:
用于从查询结果中返回唯一的值。在SELECT
语句中使用DISTINCT
时,它会消除结果集中的重复行,只返回不同的值。
题目3:[177. 第N高的薪水]
https://leetcode.cn/problems/nth-highest-salary/description/
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN DECLARE M INT; SET M = N-1; RETURN ( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT M, 1 ); END
题目4: [178. 分数排名]
http://(https://leetcode.cn/problems/rank-scores/description/
# Write your MySQL query statement below SELECT S1.score, ( SELECT COUNT(DISTINCT S2.score) FROM Scores S2 WHERE S2.score >= S1.score ) AS 'rank' FROM Scores S1 ORDER BY S1.score DESC;
题目5:[180. 连续出现的数字]
SELECT distinct num AS ConsecutiveNums FROM ( SELECT num, LEAD(num, 1) OVER (ORDER BY id) AS next_num, LEAD(num, 2) OVER (ORDER BY id) AS next_next_num FROM Logs) AS sub WHERE num = next_num AND num = next_next_num
关于lead函数:【Kay】SQL窗口函数——LEAD()、LAG()详解 - 知乎