【LeetCode-SQL每日一题】——183. 从不订购的客户

🎈写在前面

  🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL,那少不了每天的练习与学习。接下来小梦会带领小伙伴们一起每天刷一道LeetCode-数据库(SQL)相关的题目,然后在文章后例举相关知识点帮助小伙伴们学习与巩固,更好的掌握SQL。

       🙋‍♂️ 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽。


目录

📕SQL题目概述

📕解题思路

📒方法一

📒方法二

📕代码测试

📒方法一

📒方法二

📕知识点小结


📕SQL题目概述

Customers 表:

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+

Orders 表:

+----+------------+
| Id | CustomerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+

某网站包含两个表CustomersOrders。编写一个 SQL 查询,找出所有从不订购任何东西的客户

例如给定上述表格,你的查询应返回:

+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

LeetCode原题链接~ 点击进入https://leetcode-cn.com/problems/customers-who-never-order/

📕解题思路

根据题目,我们先看题目要求我们查什么,要查出从不订购任何东西的顾客。根据这一点我们可以从Orders 订单表中得知CustomerId为1和3的是订购过东西的顾客,而2和4则没有订购过任何东西。再从Customers 顾客表中查id2与id4对应的顾客名字就查到了。

📒方法一

1. 根据解题思路,我们可以先写一个子查询查出Orders订单表中对应的CustomerId顾客Id

select customerid from orders;

2. 查出顾客Id后,我们就知道谁买过东西谁从来不买东西。我们再通过NOT IN子句给顾客Id做限制,查Customers表中顾客Id不在Orders表中的就是题目所要求的。

select customers.name as 'Customers'
from customers
where customers.id not in
(select customerid from orders);

LeetCode原题解析https://leetcode-cn.com/problems/customers-who-never-order/solution/cong-bu-ding-gou-de-ke-hu-by-leetcode/

📒方法二

我们通过左外链接,把Customers 表与Orders链接起来,我们只需要查链接后Orders表的数据为NULL的数据,就是从来没有买过东西的顾客。

select c.name as Customers from Customers c left join Orders o on c.id = o.CustomerId where o.id is null;

📕代码测试

📒方法一

SQL代码

select customers.name as 'Customers'
from customers
where customers.id not in
(select customerid from orders);

执行代码,测试

测试成功!

📒方法二

SQL代码

select c.name as Customers from Customers c left join Orders o on c.id = o.CustomerId where o.id is null;

执行代码,测试

测试成功


📕知识点小结

外连接分为三种:左外连接(left join),右外连接(right join),全外连接(full join)。这里我们省略了outer 这个关键字。

外连接的一个重要特点:至少有一方保留全集,没有匹配行用NULL代替。

下面小梦把这三种外连接简单说一下:

    1. LEFT OUTER JOIN,简称LEFT JOIN,左外连接(左连接)

      结果集保留左表的所有行,但右表只包含与左表匹配的行。右表相应的空行为NULL值。

SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.xx = 表2.xx

    2. RIGHT OUTER JOIN,简称RIGHT JOIN,右外连接 (右连接)

       结果集保留右表的所有行,但左表只包含与右表匹配的行。左表相应的空行为NULL值。

SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.xx = 表2.xx

    3. FULL OUTER JOIN,简称FULL JOIN,全外连接

       会把两个表所有的行都显示在结果表中。

SELECT * FROM 表1 FULL JOIN 表2 ON 表1.xx = 表2.xx

 内连接与外连接

 表1 classa             

         

表2 classb

1. 内连接 inner join (join 默认就是内连接)

表1与表2的交集,用上面两个表演示一下

select classa.id as aid,classb.id as bid 
from classa 
inner join classb on classa.id = classb.id;

 查询的结果是classa与classb的交集

 2. 左外连接 left join

结果集保留左表的所有行,但右表只包含与左表匹配的行。右表相应的空行为NULL值。

select classa.id as aid,classb.id as bid 
from classa 
left join classb on classa.id = classb.id;

 3. 右外连接 right join

结果集保留右表的所有行,但左表只包含与右表匹配的行。左表相应的空行为NULL值。

select classa.id as aid,classb.id as bid 
from classa 
right join classb on classa.id = classb.id;

4. 全外连接 full join

会把两个表所有的行都显示在结果表中。

select classa.id as aid,classb.id as bid 
from classa 
full join classb on classa.id = classb.id;

小伙伴们注意啦!!!

MySQL不支持full join!!!MySQL不支持full join!!!MySQL不支持full join!!!

重要的事情要说三遍!!!那怎么实现和full join一样的效果呢?那就要通过使用union来实现,具体实现SQL语句如下

select classa.id as aid,classb.id as bid 
from classa left join classb on classa.id = classb.id
union
select classa.id as aid,classb.id as bid 
from classa right join classb on classa.id = classb.id;


 😀感谢小伙伴们支持,如果有什么疑问,欢迎留言询问,小梦定知无不言,言无不尽!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#进阶(1)—— Task Parallel Library 并行执行与串行执行

本文参考的博文出处:http://www.cnblogs.com/stoneniqiu/p/4857021.html 总体说明: (1)、理解硬件线程和软件线程 硬件线程也称为逻辑内核,一个物理内核可以使用超线程技术提供多个硬件线程。所以一个硬件线程并不代…

【leetcodeMySQL每周一练】- 5道题带你练习mysql

🎈写在前面 🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL&am…

【读书笔记】.Net并行编程高级教程--Parallel

一直觉得自己对并发了解不够深入,特别是看了《代码整洁之道》觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准。而且在《失控》这本书中也多次提到并发,不管是计算机还是生物都并发处理着各种事物。人真是奇怪&#xff0…

【除夕最炫烟花代码】—— HTML+JQuery实现2022跨年烟花特效

🎇前言 大家好呀!我是小梦是✨。 除夕马上到来,激动的心颤动的手!今年由于管控严厉,许多地方禁止燃放烟花爆竹,既然不让我们放,那我们就用代码来实现烟花特效! 文末有彩蛋哦~ 烟花效…

【LeetCode-SQL每日一练】—— 595. 大的国家

🎈写在前面 🙋‍♂️大家好呀,我是超梦。大家可以叫我小梦~ 小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的…

c#进阶(2)—— ASP.NET MVC 常用路由总结

1、URL模式 路由系统用一组路由来实现它的功能,这些路由共同组成了应用系统URL架构或方案,这种URL架构是应用程序能够识别并能对之做出响应的一组URL,当处理一个输入 请求时,路由系统的工作是将这个请求URL与一个模式进行匹配&am…

【爱心代码大全】——情人节表白代码送给她属于我们程序员的浪漫

👴大多数人以为的程序员——发量少,身穿格子褂,坐在电脑前就是码字。一点也不懂浪漫! 谁说我们不懂浪漫的? 不! 你错了 程序员一旦浪漫起来,真没其他人啥事了!!&#xff…

c#进阶(4)—— Redis 用于消息队列的存储

1、参考的博文 a : http://www.cnblogs.com/lori/archive/2012/04/12/2443708.html —— 主要的实现思路 b: http://www.cnblogs.com/liqingwen/archive/2017/04/06/6672452.html —— RedisHelper 类 c : https://www.cnblogs.com/stopfalling/p/5375492.html —— 应用场…

【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱

🎈写在前面 🙋‍♂️大家好呀,我是超梦。大家可以叫我小梦~ 小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的…

【情人节表白代码】——情人节将至,10余款浪漫爱心特效送给你爱的那个她

谁说我们不懂浪漫的&#xff1f; 不&#xff01; 你错了 程序员一旦浪漫起来&#xff0c;那就是个bug&#xff01;&#xff01;&#xff01; 浪漫表白一 代码部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/…

c#进阶(6)—— 网络通信基础知识

1、HttpClient 类 (1)、HttpClient 类 用于发送HTTP 请求&#xff0c;接收请求的响应。 (2)、HttpClient 类 派生于 HttpMessageInvoker类&#xff0c;此基类负责执行 SendAsync(),SendAsync() 方法调用是异步的&#xff0c;可以编写一个完全异步的系统来调用Web服务。 2、实…

【云原生】—— 学习云计算应用开发你需要掌握的五大技能

学习云计算应用开发之前&#xff0c;我们首先了解一下什么是云计算。 云计算百度百科&#xff1a;云计算&#xff08;cloud computing&#xff09;是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序&#xff0c;然后&#xff0c;…

c#进阶(5)—— WCF 实现简单预订功能

1、WCF概述 WCF全称为Windows Communication Foundation,在.Net 3.0 中引入&#xff0c;用于客户端与服务端通信&#xff0c;替换了之前的一些技术&#xff0c;如.Net Remoting 及 WSE。 WCF 相比ASP.NET Web API 复杂&#xff0c;但提供了更多的功能&#xff0c;如 &#x…

云原生架构重要组成部分之微服务

前言 近几年来&#xff0c;云计算与微服务架构非常火&#xff0c;运用广泛。各大厂商公司都运用了该技术架构&#xff0c;随着技术与理念的升级迭代&#xff0c;云原生概念应世而起&#xff0c;现在火的一塌糊涂。做为新时代的程序员&#xff0c;我们要抓住云原生的浪潮。 这篇…

第十届蓝桥杯——JAVA真题集锦

蓝桥杯百度百科&#xff1a; 蓝桥杯全国软件和信息技术专业人才大赛是由工业和信息化部人才交流中心举办的全国性IT学科赛事。共有北京大学、清华大学、上海交通大学等全国1200余所高校参赛&#xff0c;累计参赛人数超过40万人。2020年&#xff0c;蓝桥杯大赛被列入中国高等教育…

IIS与asp.net管道

阅读目录 asp.net是什么HTTP协议IIS与asp.netasp.net管道参考资料我们在基于asp.net开发web程序&#xff0c;基本上都是发布部署到安装了IIS的windows服务器上&#xff0c;然后只要用户能够访问就算任务完成了&#xff0c;但是很少静下心来想想这背后到底发生了什么&#xff0…

2022最新Spring相关大厂常问技术面试题大全 —— 金三银四好时机

Spring相关大厂常问面试题1. 什么是 Spring 框架?2. 列举一些重要的Spring模块&#xff1f;3. RestController 与 Controller 的区别4. 谈谈自己对于 Spring IoC 和 AOP 的理解5. Spring 中的 bean 的作用域有哪些?6. Spring 中的单例 bean 的线程安全问题了解吗7. Component…

C#进阶系列——AOP?AOP!

前言&#xff1a;今天大阅兵&#xff0c;可是苦逼的博主还得坐在电脑前写博客&#xff0c;为了弄清楚AOP&#xff0c;博主也是拼了。这篇打算写写AOP&#xff0c;说起AOP&#xff0c;其实博主接触这个概念也才几个月&#xff0c;了解后才知道&#xff0c;原来之前自己写的好多代…

SpringMVC大厂常问技术面试题大全 —— 金三银四进大厂

目录 ⭐你对SpringMVC框架的理解&#xff1f; ⭐SpringMVC主要组件&#xff1f; ⭐SpringMVC的执行流程以及各个组件的作用&#xff1f; ⭐SpringMVC支持的转发和重定向的写法&#xff1f; ⭐SpringMVC的常用注解&#xff1f; ⭐SpringMVC统一异常处理的思想和实现方式&a…

c#进阶(7)—— 异步编程基础(async 和 await 关键字)

async 和 await 关键字只是编译器功能&#xff0c;编译器会用Task类创建代码。 返 回值是一个Task&#xff0c;这种返回新线程的方法虽然可以提高系统的响应能力&#xff0c;但是多线程取值会给编码带来不便&#xff0c;所以新出的关键字await用于阻塞当前线程并 获取目标线程…