两个表连接: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
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
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
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