SQL打卡4.9

题目1:175. 组合两个表icon-default.png?t=N7T8https://leetcode.cn/problems/combine-two-tables/description/

解答:

select FirstName, LastName, City, State
                from Person left join Address
                on Person.PersonId = Address.PersonId;

涉及到的知识点:INNER JOINOUTER 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. 第二高的薪水icon-default.png?t=N7T8https://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高的薪水]icon-default.png?t=N7T8https://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. 分数排名]icon-default.png?t=N7T8http://(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()详解 - 知乎

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值