LeetCode-sql-two
本文主要是介绍LeetCode
中关于SQL
的练习题,从易到难,循序渐进。文中会介绍题目和尽可能多的解答方案
-
最大的国家:通过
where
条件进行查询,或者使用union
进行联结 -
超过5名学生的课:
group by
分组和having
过滤,注意使用distinct
去重 -
有趣的电影:
where
条件使用,SQL
中奇偶数的判断方法 -
交换性别:
case
语句和if
语句的使用,
595-找出最大的国家
题目
如果一个国家的面积超过300
万平方公里,或者人口超过2500
万,那么这个国家就是大国家。
下图是World
表,编写一个SQL查询,输出表中所有大国家的名称、人口和面积。
答案
直接通过or来进行联结
1 | select name, population, area -- 方法1 |
通过union来进行联结
1 | SELECT name, population, area FROM world -- 方法2 |
这道题就是这么的简单,做出来自己都不敢相信,采用的是方法1
596-超过5名学生的课
题目
有一个courses
表 ,有: student (学生) 和 class (课程)。请列出所有超过或等于5名学生的课。
结果应该为:
答案
通过建立临时表来解决
1 | select class |
通过having
过滤来解决,注意使用distinct
,有些可能是重复记录
1 | select class |
一定要注意distinct
620-有趣的电影
题目
编写一个 SQL查询,找出所有影片描述为非 boring
(不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating
排列。
答案
1 | -- 自己解决 |
奇偶数的判断方法
- id&1
- id%2
- mod(id, 2) =1,表示对2求余数=1
627-交换工资
题目
给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。
注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句
答案
首先需要了解更新语句的基本操作:
1 | update 表名 |
自己的解决方案中case语句略微复杂啦,可以进行简化,如同方法2
1 | -- 方法1:自己方案 |
1 | -- 方法2:使用case表达式 |
1 | -- 方法3:使用if语句 |
if语句
if(expr1,expr2,expr3)
:
- 如果
expr1
的值为true
,则返回expr2
的值 - 如果
expr1
的值为false
,则返回expr3
的值。
网上看到了一种最牛的做法:直接使用ASCII码进行转换
1 | update salary set sex=char(ascii('m') + ascii('f') - ascii(sex)); |