sql左连接_如何使用 SQL 查找从不订购的客户

SQL 是作为开发工程师、数据工程师必须要深入掌握的一项技能。我也一直在提升这部分的能力,从入门到精通。除了阅读一些 SQL 经典书籍,刷题也是一个不错的选择。于是,我将做过的题目与解法,汇总到这里,和大家一起学习。

SQL 练习题系列和「体验碎片」系列一样,会不定期进行更新。

问题:根据 Customers 表和 Orders 表,编写一个 SQL 查询,找出所有从不订购任何东西的客户。

9a77200d2ec70df079d811279e873856.png6bd08b958fb9a7afc332283c03492b98.png
预期结果6cdf65d44b9fba79b55f6c2f93ce0e83.png

解法1:子查询

1.在 Orders 表中找出所有购买的用户,并对用户去重。2.从不订购的用户就是 Customers 的用户不在 Orders 中,使用 not in 即可。

select    c.Name as Customersfrom Customers as cwhere c.Id not in        (select CustomerId        from Orders         group by CustomerId)

解法2:左连接

1.找出所有从不订购任何东西的客户,意思为将 Customers 作为主表,左连接 Orders。2.使用 left join 连接时,如果是没有订购的用户,订单表 ID 字段为 null 值。3.使用 where 条件筛选出 CustomerI 为空的用户,就找到了从不订购任何东西的客户。

select     c.Name as Customersfrom Customers as c   left join Orders as o on o.CustomerId = c.Idwhere o.CustomerId is null 
9754ff19de08e7ca51d3ea8897bac799.png

17d7b6b514885bd9c385a48def04a17e.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值