leetcode力扣数据库SQL题目及解答(一)

本文分享了LeetCode上的几道关于SQL操作的题目,包括交换工资中的性别标识、调整座位顺序、找出有趣的电影、分析体育馆人流量高峰以及筛选大国家等。通过案例解析了SQL中的case when、update、where、group by和union等用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此处是leetcode上免费题目及答案,如有错误,欢迎指出,共同学习。

627.交换工资(简单)

给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。

注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。

题解:考察case when; update用法

update salary
set sex=(
    case when sex = 'f' then 'm'
         when sex = 'm' then 'f'
    end
)

或者 使用 if三元表达式

update salary
set sex=(
    if (sex='f','m','f')
)

627.换座位(中等)

小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。

其中纵列的 id 是连续递增的

小美想改变相邻俩学生的座位。

你能不能帮她写一个 SQL query 来输出小美想要的结果呢?
题解:考察case when
思路:其实就是学生的id改变了,从这个角度出发思考

### LeetCode 数据库题目及解析 #### 数据库题目的特点和价值 LeetCode 提供了丰富的编程题目,涵盖了算法与数据结构的各个方面,适合不同水平的程序员进行实战演练。特别是对于数据库领域,这些题目不仅有助于巩固SQL技能,还能够帮助理解实际工作中可能遇到的数据处理挑战[^1]。 #### 示例:查找连续出现三次以上的数字 考虑这样个问题,在给定的日志表 `Logs` 中找出所有连续出现至少三次的数字。具体实现可以通过多次自联接来完成: ```sql SELECT DISTINCT l1.Num AS ConsecutiveNums FROM Logs l1 LEFT JOIN Logs l2 ON l1.id = l2.id - 1 LEFT JOIN Logs l3 ON l2.id = l3.id - 1 WHERE l1.Num = l2.Num AND l2.Num = l3.Num; ``` 这段代码通过三个表之间的关联操作实现了对连续数值的检测,并最终筛选出了符合条件的结果集[^2]。 #### 另实例:树状结构中的节点分类 另个有趣的例子是对具有父子关系的棵树进行遍历并标记每个节点是根(root),内部(inner)还是叶子(leaf): ```sql -- 假设有个名为 Tree 的表格存储着二叉树的信息 WITH RECURSIVE cte AS ( -- 找到所有的根节点 SELECT id, 'Root' as type FROM tree WHERE p_id IS NULL UNION ALL -- 查找所有非叶节点(即有子节点) SELECT t.id, CASE WHEN EXISTS(SELECT 1 FROM tree ch WHERE ch.p_id=t.id) THEN 'Inner' ELSE 'Leaf' END FROM tree t INNER JOIN cte ON t.p_id=cte.id ) SELECT * FROM cte ORDER BY id; ``` 此查询利用递归公用表达式(CTE)有效地解决了这个问题,展示了如何优雅地处理层次化数据[^3]。 #### 销售人员与公司间的复杂查询 再来看个更复杂的案例——识别那些从未向特定客户出售过商品的销售人员: ```sql SELECT DISTINCT s.name AS name FROM company c CROSS JOIN salesperson s WHERE NOT EXISTS( SELECT * FROM orders o WHERE c.com_id=o.com_id AND s.sales_id=o.sales_id); ``` 这里采用了交叉乘积的方式构建了个完整的可能性列表,接着排除掉已知存在的订单记录,从而得到了所需答案[^4]。 #### 总结 通过对上述几个典型问题的学习可以看出,LeetCode 上面提供的 SQL 练习非常贴近现实应用场景,无论是简单的聚合运算还是涉及多层嵌套逻辑的操作都能得到很好的练习机会。这无疑是个提高个人技术水平的好地方。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值