您当前的位置:首页 > 生活百科 > 职场

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

时间:2020-06-21 22:42:00  来源:  作者:

这一系列讲述,两张表的 Join, 或许你都不一定知道的事儿。

之前写过 SQL 的编译原理,很多朋友都不知道 SQL 背后,居然还有编译一说。SQL 用起来和 C#/JAVA 还是有些异样的。写好 SELECT * (虽然这么写很糟糕!)以后,按下 F5 便能得到结果。而不像 C#/Java 需要经过 CLR/JVM 这样的“转译”,才能看到实实在在的程序输入输出窗口。

正是由于 SQL 这个隐形编译器的存在,很多莫名的语法,看起来就很费解。比如最让初学者头疼的 Left Join:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

本意上,这段 SQL 要达到的目的是,找出 2020 年 1 月 1 日以来,单件商品超过 1000 元销售额的订单,并显示该件商品的产品名。

到底为止,若能根据这个要求,完整写出上面的 SQL,那就是合格的数据库开发工程师了。但有些朋友,经常会写出这样的 SQL:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

还有这样的 SQL:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

看上去,及其相似的三段 SQL,为什么出来的结果就千差万别呢。甚至,还会把数据库给跑死。

这就是 SQL 编译的底层。

要了解 SQL 编译的底层,要从这张图,全面入手:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

而 Parsing 就是我们正确理解 SQL 执行过程的第一步。

下面这段 SQL 是比较完整的全范本:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

细心的读者可能会留意到每个 SQL 关键字前面都有一个用括号包起来的数字,这个数字就是 SQL 关键字执行的顺序。

我们通常会认为 SELECT 是 SQL 的第一步,其实 FROM 才是,紧接 From 的是 ON, JOIN. 之后才是 WHERE. 正确理解 JOIN 和 WHERE 的执行顺序,才可避免 LEFT JOIN 留下的坑。

当然,你别以为这样就结束了,那我也太不负责任了。接着往下读。

当两表 Join 的时候,先按照 ON 的条件做了一次笛卡尔积计算。甭管按照 ON 的条件能不能匹配,匹配的上,就拼接起来;匹配不上的,暂时保留。所以 ON 这一步,两边的数据,都会保留在一张虚拟的大表里。

比如,上面两张表, tblOrderHeader, tblOrderDetail. 他们的外键是OrderId.

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

这两个表,join 起来,会有这些情况:

tblOrderHeader 有些数据,在 tblOrderDetail 里按照 OrderId 找不到对应的订单明晰数据。

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

同样的,在 tblOrderDetail 中有些明细的订单,却在 tblOrderHeader 头部中找不到订单表头信息,比如订单时间,商店,会员信息等。

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

更常见的,是互相找不到对应数据

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

用实线框,框起来的表示两表可以互相匹配的数据。而对方表缺失的部分就用白色标注。

两表 Join 的初步结果就出来了,就是上面最后一张图的情况,即保留两表所有的数据,匹配上的,排在前头,匹配不上的依次排在后面。但必须保留两张表所有的数据。这要牢牢记住。

接着根据第三步 JOIN 的 Join Type(Left join, Right Join, Full Outer Join)来限制留下哪部分。

Left Join, 留下左半部分:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

Right Join, 留下右半部分:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

Full Outer Join , 左右都留下:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

接下来,才是执行 WHERE 命令的时候。

此时,下面这段 SQL , 即

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

会比这条 SQL , 多出来很多数据:

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

那是因为,在 WHERE 中,Detail.Amount > 1000 这个命令,限制了右半边的数据必须要对应上左半边的OrderId, 所以 tblOrderDetail 中如果没有 tblOrderHeader 中的OrderId, 则就被舍去。哪怕 tblOrderHeader 的 OrderDate 是符合 OrderDate 大于 2020-01-01的条件。

比如有 tblOrderHeader 是有 5 条记录,符合 OrderDate 大于 2020-01-01的条件。

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

我们用红色实星框表示符合条件的记录

但最终,因为在 WHERE 中添加了 Detail.Amount > 1000 的条件,相当于把 Left join 改成了 INNER JOIN, 即增加了 Detail.OrderId IS NOT NULL 条件

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 


下面是小编通过一些大厂的朋友要到了他们内部的Java面试题,资料难得,而且还是近一年的真实面试题;

分别有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

还有专门针对JVM、SPringBoot、SpringCloud、数据库、linux、缓存、消息中间件、源码等相关面试题。

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

把Java电子书也分享给大家,大概有10G左右的资源

面试官:先来简单聊一下SQL Join,看你对数据了解的怎么样

 

 



Tags:先来简单聊一下SQL Join   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
这一系列讲述,两张表的 Join, 或许你都不一定知道的事儿。之前写过 SQL 的编译原理,很多朋友都不知道 SQL 背后,居然还有编译一说。SQL 用起来和 C#/Java 还是有些异样的。写好...【详细内容】
2020-06-21  Tags: 先来简单聊一下SQL Join  点击:(140)  评论:(0)  加入收藏
▌简易百科推荐
毕业后不重视自己的档案,等到考研、考编、考公务员、单位入职等需要用到档案时,才想起来查询自己的档案。但是,很多人查询档案没有经验,不知道该从何查起。下面给大家介绍查询个...【详细内容】
2021-12-23  帮帮团人力资源    Tags:个人档案   点击:(14)  评论:(0)  加入收藏
评职称可谓是工程人事业发展中的一件大事了,可以说一般想要在行业中持续地、更好地发展的人都会选择评个中级职称! 怎么评广东省建筑中级职称? 在评审时工程业绩最为重要。那...【详细内容】
2021-12-23  资深职称老师—小丽    Tags:职称   点击:(4)  评论:(0)  加入收藏
职场中,事情做得漂亮,不一定结局漂亮;但是善于谋人,把人打通了,出手一般就是巅峰。人情社会尤其如此,说到底工作是人定的,好不好也是人说的,有人为你说话,你就是能力强。没人看到你,工...【详细内容】
2021-12-22  胖子说职场经验    Tags:职场   点击:(4)  评论:(0)  加入收藏
一、在国企,能改变命运的只有你自己。你想改变,就总有办法。你认命,就不要埋怨命运不公。多少领导一样是从基层爬上去的。也许你会说,他们背后有人。我也不反对,但总有那么20%左...【详细内容】
2021-12-21  职场真谛    Tags:国企   点击:(6)  评论:(0)  加入收藏
又到年底了,有更好的工作选择?想跳槽?社保咋处理?以及社保需要注意的小问题是什么?一文全理清!一、打工人离职手册之社保全指南 二、需要注意的社保小问题 ...【详细内容】
2021-12-17  恒企会计网校    Tags:离职指南   点击:(6)  评论:(0)  加入收藏
在个案辅导中,也经常遇到公务员面试前的准备和辅导。首先,我其实挺想吐槽公考的笔试和考试机制的,让我先一吐为快。公务员考察的面非常多,从表达能力这种表面的,到价值观这种底层...【详细内容】
2021-12-14  为好优姐姐    Tags:公务员面试   点击:(12)  评论:(0)  加入收藏
公务员面试形式进行了创新,增加了结构化小组面试这一形式,在结构化的基础上增加了考试互评和回应的环节,这一改变增加了考试难度,也给许多考试造成了困惑,那今天就结构化小组的点...【详细内容】
2021-12-14  红河华图教育    Tags:公务员面试   点击:(14)  评论:(0)  加入收藏
在各级党政机构之中,我们经常会听到一个称呼——“常务副职”,例如县政府有常务副县长,组织部有常务副部长等等。其实,常务副职只是一个约定俗成的简称,其准确名称叫做...【详细内容】
2021-12-14  瑛杰小猪  今日头条  Tags:常务副职   点击:(19)  评论:(0)  加入收藏
在职场,什么都可以没有,就是不能没有情商。没有情商的人,在职场注定难成大器。人际关系搞不定,说话口无遮拦,为人处世更是不够圆滑,处处受限,处处是破绽。尤其是和领导相处,连对方的...【详细内容】
2021-12-14  第一桶金学派    Tags:领导   点击:(8)  评论:(0)  加入收藏
在职场,除了个人的工作能力以外,还要学会去不断的积累自己的人际关系。因为有了关系,就有了渠道,有了机会,有了方法,有了财富……越是和厉害的人交往,你自己也会变得越...【详细内容】
2021-12-10  第一桶金学派    Tags:职场   点击:(12)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条