天天看点

每日Leetcode刷题——sql篇1

♥第一题♥

表1: Person                                                                    表2: Address

+-------------+---------+                                                     +-------------+---------+

| 列名         | 类型    |                                                      | 列名         | 类型    |

+-------------+---------+                                                     +-------------+---------+

| PersonId    | int     |                                                      | AddressId   | int     |

| FirstName   | varchar |                                                | PersonId    | int     |

| LastName    | varchar |                                                | City        | varchar |

+-------------+---------+                                                     | State       | varchar |

PersonId 是上表主键                                                     +-------------+---------+

                                                                                    AddressId 是上表主键 

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

FirstName, LastName, City, State      

【思路】

从表的结构可以看出,表1(Person)是人的姓名信息,表2(Address)是人的地址信息。

1)查询结果是两个表里的列名,所以需要多表查询

2)考虑到有的人可能没有地址信息,要是查询结构要查所有人,需要保留表1(Person)里的全部数据,所以用左联结(left join)

3)两个表联结条件:两个表通过personId产生联结。

【我的答案】

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

♥第二题♥

每日Leetcode刷题——sql篇1

【思路】

1)表内存在重复数据,需要去重distinct

2)需要返回null

3)降序排序desc

4)限制查询结果limit的用法

5)别名AS

【我的答案】

select (select distinct Salary from Employee order by Salary desc limit 1,1) as SecondHighestSalary

♥第三题♥

每日Leetcode刷题——sql篇1

【思路】

使用where语句或者join语句

【我的答案】

SELECT

    a.Name AS 'Employee'

FROM

    Employee AS a,

    Employee AS b

WHERE

    a.ManagerId = b.Id

        AND a.Salary > b.Salary