题目来源:LeetCode For English || 力扣中文版
题目类别:数据库
题目难度:简单
题目范围:免会员版所有题目
目录
175.组合两个表
SELECT FirstName, LastName, City, State FROM Person LEFT JOIN Address ON
Person.PersonId = Address.PersonId;
外连接
在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。如果基表的数据在另一张表没有记录。那么在相关联的结果集行中列显示为空值(NULL)。
查询的是左表所有数据以及其交集部分。
176.第二高的薪水
SELECT (SELECT DISTINCT Salary FROM Emplyee OEDER BY Salary DESC LIMIT 1,1)
AS SecondHightestSalary;
或者使用IFNULL
SELECT IFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1,1), null )
AS SecondHighestSalary;
SQL查询语句中的 limit 与 offset 的区别:
- limit y 分句表示: 读取 y 条数据
- limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据
- limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据
181.超过经理收入的员工
SELECT a.Name AS 'Employee' FROM Employee AS a, Employee AS b
WHERE a.ManagerId = b.Id AND a.Salary > b.Salary;
182.查找重复的电子邮箱
SELECT Email FROM Person GROUP BY Email having count(Email)>1;
where 和 having的区别?
- where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
- where 后不可以跟聚合函数,having可以进行聚合函数的判断。
183.从不订购的客户
SELECT Name AS 'Customers'
FROM Customers
WHERE Customers.Id NOT IN
(SELECT CustomerId FROM orders);
196.删除重复的电子邮箱
DELETE p1.Email FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id;
197.上升的温度
SELECT w1.Id FROM Weather w1 INNER JOIN Weather w2
DATEDIFF(day,w1.RecordDate,w2.RecordDate) = 1
WHERE w1.Temperature < w2.Temperature;
这里的DATEDIFF有个坑
Mysql中DATEDIFF用法:
SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate;
// 结果为-1,第一个参数是结束时间,第二个参数是开始时间
TIMESTAMPDIFF用法:
SELECT TIMESTAMPDIFF(DAY,'2008-12-29','2008-12-30') AS DiffDate;
//结果为1,第一个为开始时间,第二个为结束时间
在使用在线AlaSQL内存型数据库测试的时候
SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate;
// 结果为1,同样的语法在不同的数据库结果不同。
595.大的国家
SELECT Name, Population, Area FROM World WHERE Area > 3000000 OR Population > 25000000;
596.超过5名学生的课
SELECT class FROM courses GROUP BY class having COUNT(DISTINCT student)>=5;
DISTINCT用法:
- distinct一般是用来去除查询结果中的重复记录的,只能用在select语句中
- 对多列操作时,必须放到所有字段前面(否则报错),作用范围是其后面所有字段
- 不过滤Null
620.有趣的电影
SELECT * FROM cinema WHERE description != "boring" AND mod(id, 2)=1 ORDER BY rating DESC;
627.交换工资
UPDATE salary SET sex= CASE WHEN sex='m' THEN 'f' WHEN sex='f' THEN 'm' ELSE NULL END;
CASE WHEN THEN ELSE END
1179.重新格式化部门表
SELECT id, SUM(CASE `month` WHEN 'Jan' THEN revenue END) Jan_Revenue,
SUM(CASE `month` WHEN 'Feb' THEN revenue END) Feb_Revenue,
SUM(CASE `month` WHEN 'Mar' THEN revenue END) Mar_Revenue,
SUM(CASE `month` WHEN 'Apr' THEN revenue END) Apr_Revenue,
SUM(CASE `month` WHEN 'May' THEN revenue END) May_Revenue,
SUM(CASE `month` WHEN 'Jun' THEN revenue END) Jun_Revenue,
SUM(CASE `month` WHEN 'Jul' THEN revenue END) Jul_Revenue,
SUM(CASE `month` WHEN 'Aug' THEN revenue END) Aug_Revenue,
SUM(CASE `month` WHEN 'Sep' THEN revenue END) Sep_Revenue,
SUM(CASE `month` WHEN 'Oct' THEN revenue END) Oct_Revenue,
SUM(CASE `month` WHEN 'Nov' THEN revenue END) Nov_Revenue,
SUM(CASE `month` WHEN 'Dec' THEN revenue END) Dec_Revenue FROM Department
GROUP BY id;

本文精选了多个SQL数据库面试题目及解答,包括表的组合、查询特定排名的薪水、处理重复数据等,深入解析SQL查询语句,如左连接、子查询、分组与聚合函数的使用技巧。

1754

被折叠的 条评论
为什么被折叠?



