查看: 2923| 回复: 5
跳转到指定楼层
上一主题 下一主题
收起左侧

我总结的SQL面试知识点1 - Join Basics

   
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
总看到地里小伙伴们发关于SQL的知识总结,今天我也和大家分享一下我的一些经验,我在工作中从数据分析到数据库后端开发也做了很多年,每次面试也都会遇到这些问题。我这边总结了一些内容,将包括: Join基础,Left Join/Right Join/Outer Join,Self Join,Join的底层实现。这篇我就从最基本的内容开始介绍Join。

Join的目的
首先,我们从Join的目的出发,也就是我们为什么需要Join以及Join如何帮助我们解决问题的。
简单来说,数据库里面有多个表格(table),我们想把这些表格关联起来,这个时候我们就需要一些操作来将它们连接,而Join就是帮助我们完成关联和组合的这个语法。例如:



Q: Find the order details of each customer who made an order. Output the customer's first name, last name, and the city along with the order details.

如果我们想知道每个用户买了什么东西,就需要将customers和orders这两个table关联起来,否则如果只看orders这个table,那我们就只有一些customer_id和对应的order_id的信息,但我们不知道用户的具体信息,所以我们需要讲customers table和orders table关联起来,引入用户信息。

通过例子可以看到,我们就需要一个语法来帮我们把两个table关联起来,最终得到我们想要的信息,而这个语法就是Join。

Join基本语法
. 1point3acres

1. JOIN..ON..


我们先来看一下最基本的Join方法:




. 1point3acres在上面的query里面,在FROM之后,我们用JOIN关键字连接两个table: customers和orders,再利用ON关键字表明两个table通过什么关系来连接,这里面我们用customer_id作为共同点,即customer_id相同的行,我们将它们连在一起。为了方便,我们将两个table的column name都设成customer_id,但在某些情况下,你可以会遇到不一样的名字column,但它们却是我们需要的mapping,例如下面这张图




在这个例子里面,我们需要customers里面的id和orders里面的customer_id作为关联两个table的关系点。


2. Different Types of Join  
  • INNER JOIN: 返回两个表中具有相同值
  • LEFT JOIN: 返回左表中的所有值,以及右表中能够匹配的值
  • RIGHT JOIN: 返回右表中的所有值,以及左表中能够匹配的值
  • OUTER JOIN: 返回所有值,包括左右表各自独有的,以及交集部分

.
3. Using

如果我们table的关联的column name是相同的,我们可以用using来代替on稍微简化一下query
. Waral dи,
真题解析. From 1point 3acres bbs
我们将上面例子转换成一个稍复杂一点的题目。



Q: Find the details of each customer regardless of whether the customer made an order. Output the customer's first name, last name, and the city along with the order details.  

  • 首先我们要去理解题目的context:很常见的电商类数据,有用户信息和订单信息。
  • 在此之后我们要了解所提供的table(s):我们有两个table, customers和orders,两个table可以通过customers.id和orders.customer_id相连。
  • 读懂并正确理解问题:和咱们上面的例子很像,唯一的区别是我们需要列出所有customers,即使没有下过订单的。因此,这里不用简单用(inner) join,既然要涵盖所有的customer信息,那我们就可以把customer table放在join左边,用Left Join来解决这个问题。
  • 这道题目一个的follow up: 拓展table,将orders table拆开,将order_details拉出去单独做一个table


以上就是我对SQL Join基本语法的总结。


评分

参与人数 4大米 +4 收起 理由
albert_chen_xyz + 1 很有用的信息!
foolintelligent + 1 很有用的信息!
lovetttsohpie + 1 欢迎分享你知道的情况,会给更多积分奖励!
alex_frank + 1 很有用的信息!

查看全部评分


上一篇:有偿找ds tutor辅导作业
下一篇:请问这个职位salary一般是多少上训练营可以上岸吗?

本帖被以下淘专辑推荐:

全局:
刚又看了一遍楼主的总结,发现里面没有SQL query。。 这里有完整代码: https://bit.ly/3BxeKxE 给大家贴一下。
回复

使用道具 举报

🔗
Janetyiyi 2022-2-12 14:33:30 | 只看该作者
全局:
谢谢楼主分享
回复

使用道具 举报

🔗
Connyng 2022-2-18 10:15:16 | 只看该作者
全局:
謝謝樓主分享。
回复

使用道具 举报

🔗
friendly2002 2022-2-18 23:56:11 | 只看该作者
全局:
本帖最后由 friendly2002 于 2022-2-18 08:01 编辑

感谢楼主分享!内容很有帮助!
回复

使用道具 举报

全局:
感谢楼主分享,感觉要能说的这么细不容易,lz面试顺利!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表