收录一些比较有意思的sql题,纯粹图一乐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。 +----+-------+--------+-----------+ | Id | Name | Salary | ManagerId | +----+-------+--------+-----------+ | 1 | Joe | 70000 | 3 | | 2 | Henry | 80000 | 4 | | 3 | Sam | 60000 | NULL | | 4 | Max | 90000 | NULL | +----+-------+--------+-----------+ 给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。 +----------+ | Employee | +----------+ | Joe | +----------+
倒挂 。收集倒挂的同学 哈哈 代码太优美了~
1 2 3 4 select a.Name Employee from Employee a join Employee b on a.ManagerId = b.Id and a.Salary> b.Salary
182.查找重复的电子邮箱
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。 示例: +----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+ 根据以上输入,你的查询应返回以下结果: +---------+ | Email | +---------+ | a@b.com | +---------+
就是group by的简单应用 记住having
1 2 3 4 select Emailfrom Persongroup by Emailhaving count (Email)>= 2
183.从不订购的客户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。 Customers 表: +----+-------+ | Id | Name | +----+-------+ | 1 | Joe | | 2 | Henry | | 3 | Sam | | 4 | Max | +----+-------+ Orders 表: +----+------------+ | Id | CustomerId | +----+------------+ | 1 | 3 | | 2 | 1 | +----+------------+ 例如给定上述表格,你的查询应返回: +-----------+ | Customers | +-----------+ | Henry | | Max | +-----------+
贼娃子 。先找订购的就行
1 2 3 4 5 select Name Customers from Customerswhere id not in (select distinct CustomerId from Orders)
196.删除重复的电子邮箱
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。 +----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | | 3 | john@example.com | +----+------------------+ Id 是这个表的主键。 例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行: +----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | +----+------------------+
又是一个漂亮的自连接 删除Email相同id大的那个
1 2 3 4 DELETE p1 FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id
不行 sql写着写着犯困 得做些别的事
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 表 Weather + | Column Name | Type | + | id | int | | recordDate | date | | temperature | int | + id 是这个表的主键 该表包含特定日期的温度信息 编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。 返回结果 不要求顺序 。 查询结果格式如下例: Weather + | id | recordDate | Temperature | + | 1 | 2015 -01 -01 | 10 | | 2 | 2015 -01 -02 | 25 | | 3 | 2015 -01 -03 | 20 | | 4 | 2015 -01 -04 | 30 | + Result table :+ | id | + | 2 | | 4 | + 2015 -01 -02 的温度比前一天高(10 - > 25 )2015 -01 -04 的温度比前一天高(20 - > 30 )
1 2 3 4 5 6 7 8 9 SELECT weather.id AS 'Id' FROM weather JOIN weather w ON DATEDIFF(weather.recordDate, w.recordDate) = 1 AND weather.Temperature > w.Temperature ;
真不写了 疯狂走神。