【杂谈】刷刷 LeetCode SQL 入门查询

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 NameType
product_idint
low_fatsenum
recyclableenum

product_id 是这个表的主键。
low_fats 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品是低脂产品,‘N’ 表示不是低脂产品。
recyclable 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品可回收,而 ‘N’ 表示不可回收。

写出 SQL 语句,查找既是低脂又是可回收的产品编号。

返回结果 无顺序要求 。

查询结果格式如下例所示:

Products 表:

product_idlow_fatsrecyclable
0YN
1YY
2NY
3YY
4NN

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 ,里面保存了所有客户信息和他们的推荐人。

idnamereferee_id
1WillNULL
2JaneNULL
3Alex2
4BillNULL
5Zack1
6Mark2

写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 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个字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值