LeetCode刷题-数据库

                                                   SQL练习

 

目录

175.组合两个表

176. 第二高的薪水


175.组合两个表

表1: Person

+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId 是上表主键

表2: Address

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主键

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

FirstName, LastName, City, State

解决方案:

select P.FirstName , P.LastName, A.City, A.State from Person as P
left join Address as A on P.PersonId=A.PersonId;

小结:

  • ORDER BY 语句用于根据指定的列对结果集进行排序默认按照升序对记录进行排序,可以使用 DESC 关键字进行降序排列。
  • inner join、left join,right join的区别和联系

INNER JOIN: 如果表中有至少一个匹配,则返回行;LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行;FULL JOIN: 只要其中一个表中存在匹配,就返回行

176. 第二高的薪水

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+

解决方案:

SELECT
    IFNULL(
      (SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS SecondHighestSalary

小结:

  • 关键词 DISTINCT :去重,用于返回唯一不同的值。
select distinct 列名称 from 表名称
  • LIMIT子句查询: 用于查询指定行的数据
SELECT column1, column2, columnN
FROM table_name
LIMIT n ; 取前n条数据/LIMIT n,m (第n条开始,取m条)

SELECT column1, column2, columnN 
FROM table_name
LIMIT [n] OFFSET [m];

 

 

 

你可能感兴趣的:(SQL)