select查询结果为空与select一个空结果集的区别
如图,select一个空表直接提示Empty set,如果直接select一个空结果集,会返回一行包含NULL的结果。
例如leetcode数据库中176. 第二高的薪水,查薪水表中第二高的薪水,要求返回第二高的薪水值或者NULL。
直接查询的话,如果原表中薪水值的数量少于2个,那么就会直接返回empty set。
select distinct Salary as SecondHighestSalary from Employee order by Salary desc limit 1,1;
所以我们可以这样:
select (select distinct Salary from Employee order by Salary desc limit 1,1)
as SecondHighestSalary;
如果没有第二高的薪水,最终结果会返回一个NULL。
或者使用IFNULL库函数:结果没有区别
select ifnull((select distinct Salary as SecondHighestSalary from Employee order by Salary desc limit 1,1), null)
as SecondHighestSalary;
再比如177. 第N高的薪水这道题,把查询封装在了函数里,函数传入一个N,返回第N高的薪水:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N := N-1;
RETURN (
# Write your MySQL query statement below.
select distinct Salary
from Employee
order by Salary desc
limit N, 1
)
);
END
这里即使最外层不用select,也会返回NULL,可能是RETURN的时候处理了一下吧:)