ltx_zero

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  112 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

两个表连接:inner join要两个都有,right outer join是要右边的表有这个数据(on后面的),left outer join是要左边的有这个数据,full outer join只要某一张有就可以

leetcode 175

无难度,连接俩表,要左边数据的都要 用left outer join

select FirstName,LastName,City,State
From Person left outer join Address
on Person.PersonId=Address.PersonId
View Code

 leetcode 176

求第二高的薪水,注意理解题意:

1、如果多个人工资一样,那么他们只占用一个位置,不是并列顺延这种。是单纯工资排序。比如五个人200 三个人100 四个人50,那么第二名是100,用distinct来实现

2、排序类用lorder by,这是两个词,默认从低到高排序,使用desc改变时候,desc在最后。order by salary desc

3、limit m offset n.从标号n开始(含n哦),一共显示m个。注意:标号是从0开始的哦,标号0才是表中第一行

4、如果上面limit m offset n中没有符合的,显示的是空而不是null,如需显示null,要借助ifnull函数【sql里面查询没有符合条件的貌似都是默认空,连接里面的补充是补充null?】

5、ifnull(a,b) 如果a是非空,结果就是a,如果a是空,结果是b

6、修改名字/没名字的命名,就在某个东西后面直接写就行,比如 ifnull(a,b) name,那么name就是ifnull查出来的新名字。

select ifnull((
    select distinct Salary
    from Employee
    order by Salary DESC
    Limit 1 Offset 1    
),null) SecondHighestSalary
View Code

 leetcode 177

求第n高,这个是以函数的形式传参的,几个注意事项

1、offset后面不能跟公式N-1这种,只能是x,x在前面赋值。(limit和offset后面只能接受非负整数,或者单一变量哦)

2、mysql里面的赋值语句SET X=N-1,这个后面有分号,不能写在return里面,按照传统语言的理解可以是:return后面是一个表达式(正常的select大句子),这个赋值是在主体中完成的。最后return全结束有一个分号

3、limit x offset y等价于 limit y,x,跳过y行(从标号y开始取,实际整表从0标号),选x行

两种limit对应题解

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    SET n=N-1;
  RETURN (
      # Write your MySQL query statement below.
      select ifnull((select distinct Salary
      from Employee
      order by Salary desc
      limit n,1),null) 
  );
END
View Code
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    SET n=N-1;
  RETURN (
      # Write your MySQL query statement below.
      select ifnull((select distinct Salary
      from Employee
      order by Salary desc
      limit 1 offset n),null) 
  );
END
View Code

 

posted on 2020-06-21 22:37  ltx_zero  阅读(12)  评论(0编辑  收藏