文章目录
0. 学习目标
SQL 学习与练习
记录力扣刷题,记录解题思路。
直接开始!
1. Leetcode_1757 可回收且低脂的产品
题目链接
Leetcode_1757:https://leetcode.cn/problems/recyclable-and-low-fat-products/?envType=study-plan-v2&envId=sql-free-50
题目描述
表:Products
Column Name | Type |
---|---|
product_id | int |
low_fats | enum |
recyclable | enum |
product_id 是这个表的主键。
low_fats 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品是低脂产品,‘N’ 表示不是低脂产品。
recyclable 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品可回收,而 ‘N’ 表示不可回收。
写出 SQL 语句,查找既是低脂又是可回收的产品编号。
返回结果 无顺序要求 。
查询结果格式如下例所示:
Products 表:
product_id | low_fats | recyclable |
---|---|---|
0 | Y | N |
1 | Y | Y |
2 | N | Y |
3 | Y | Y |
4 | N | N |
Result 表:
product_id |
---|
1 |
3 |
只有产品 id 为 1 和 3 的产品,既是低脂又是可回收的产品。
题解
SELECT product_id
FROM Products
WHERE low_fats='Y' AND recyclable = 'Y'
思考
没有难度,入门,提升信心。
2. LeetCode_584 寻找用户推荐人
题目链接
LeetCode_584:https://leetcode.cn/problems/find-customer-referee
题目描述
给定表 customer ,里面保存了所有客户信息和他们的推荐人。
id | name | referee_id |
---|---|---|
1 | Will | NULL |
2 | Jane | NULL |
3 | Alex | 2 |
4 | Bill | NULL |
5 | Zack | 1 |
6 | Mark | 2 |
写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。
对于上面的示例数据,结果为:
name |
---|
Will |
Jane |
Bill |
Zack |
2.1 题解
2.1.1 直接查询
SELECT name
FROM customer
WHERE referee_id IS NULL OR referee_id <> 2
2.1.2 子查询
SELECT name
FROM customer
WHERE id NOT IN (
SELECT id
FROM customer
WHERE referee_id = 2
)
2.1.3 IFNULL 函数
SELECT name
FROM customer
WHERE IFNULL(referee_id, 0) <> 2
2.2 小结
子查询 以及 用 IFNULL
函数的执行效率要比直接查询要高一些。
IFNULL
函数使用方式:
IFNULL(字段名,若该字段为NULL替换的值)
3. LeetCode_1448 文章浏览
题目链接
LeetCode_1448:https://leetcode.cn/problems/article-views-i/
题目描述
题解
这题是比较综合的单表查询基础题。主要复习了去重、别名。
SELECT DISTINCT author_id AS id
FROM Views
WHERE author_id = viewer_id
ORDER BY id ASC
4. LeetCode_1683 无效的推文
题目链接
LeetCode_1683:https://leetcode.cn/problems/invalid-tweets/
题目描述
题解
如果对 SQL 的一些 内置 函数不熟悉,要么先查询,要么根据题意尝试。我自己做的时候就是根据题意尝试的。
LENGTH( string )
SELECT tweet_id
FROM Tweets
WHERE LENGTH(content) > 15
CHAR_LENGTH( string )
SELECT tweet_id
FROM Tweets
WHERE CHAR_LENGTH(content) > 15
CHAR_LENGTH 与 LENGTH 异同:
- LENGTH : 单位字节,汉字根据字节会算不同的长度(具体用到再查),英文、数字字符算1个字节。
- CHAR_LENGTH : 单位字符,不管是汉字还是字符都算1个字符