SQL查询--关于查询的练习题

本文通过两个LeetCode数据库题目,深入解析了SQL自连接查询的应用。第一个题目是找出收入超过其经理的员工,第二个题目是如何删除具有重复电子邮箱的记录。文章详细展示了如何使用自连接查询技巧解决实际问题。

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

下面的练习题出自LeetCode:https://leetcode-cn.com/problemset/database/,有兴趣的可以去上面刷刷题

 

练习题1:超过经理收入的员工

 

 分析:

使用sql自连接查询,因为员工Id和经理的ManagerId都在同一个表,使用自连接,可以把一张表看作2张表来使用,一张为员工表ygb,一张为经理表jlb;

查询思路就是:筛选出员工表的ManagerId与经理表的Id相等的记录,然后在这些记录中筛选员工表的Salary大于经理表的Salary的记录

SELECT *  FROM employee ygb,employee jlb WHERE ygb.ManagerId = jlb.Id 

SELECT *  FROM employee ygb,employee jlb WHERE ygb.ManagerId = jlb.Id AND ygb.Salary>jlb.Salary

SELECT ygb.name AS Employee FROM employee ygb,employee jlb WHERE ygb.ManagerId = jlb.Id AND ygb.Salary>jlb.Salary

 

练习题2:删除重复的电子邮箱

分析:
先使用自连接查询,用自身表和自己比较,来判断哪些重复邮箱

SELECT * FROM Person p1, Person p2

这样得到一个2个相同表的笛卡尔积,即两张表的组合结果

 可以分别查询p1.*和p2.*

 接着查重

SELECT p1.* FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id>p2.Id

然后删除重复数据即可

DELETE p1.* FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id>p2.Id

 


2019-09-04 22:47:00

转载于:https://www.cnblogs.com/hanmk/p/11462071.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值