1.组合两个表
题干
代码:
Select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId
题解:
两个表相连,要取出相同的数据:
外部连接(outer join)和自联结(inner join)
(1)外部链接分为:left join和right join
left join:是先取出person表中的数据后匹配address表中的数据
right join:先取出address表中的数据后匹配person表中的数据
(2)自联结:inner join并不以谁为基础,它只显示符合条件的记录
综上可知,“满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息”
选择左连接
2.第二高薪水
题干:
思路:
①这里强调若不存在第二高的薪水,则返回null,所以选择使用IFNULL或者用临时表查询
IFNULL()函数用于判断第一个表达式是否为NULL,如果为NULL则返回第二个参数的值,不为NULL则返回第一个参数的值。
格式:IFNULL(expression, alt_value)
②对表内数据进行去重和降序
③取第二高,用limit 1 offset 1
limit n子句表示查询结果返回前n条数据
offset n表示跳过x条语句
limit y offset x 分句表示查询结果跳过 x 条数据,读取前 y 条数据
也可以用limit x,y 类似于 limit x offset y ,即跳过x行,取y行数据。
代码:
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),NULL
)
AS SecondHighestSalary
或者用临时表:
SELECT
(SELECT DISTINCT Salary FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1)
AS SecondHighestSalary;