问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

浅析Sql中内连接、外连接、全连接、交叉连接的区别

发布网友 发布时间:2024-09-28 08:00

我来回答

1个回答

热心网友 时间:2024-09-30 11:34

外连接(out join)

外连接分为外左连接(left outer join)和外右连接(right outer join)

注释:left outer join 与 left join 等价,一般写成left join right outer join 与 right join等价,一般写成right join

左连接,取左边的表的全部,右边的表按条件,符合的显示,不符合则显示null

举例:select from A left join B on A.id=B.id

右连接:取右边的表的全部,左边的表按条件,符合的显示,不符合则显示null举例:select from A right join B on A.id=B.id

内连接(inner join)

内连接:也称为等值连接,返回两张表都满足条件的部分

注释:inner join 就等于 join

需要C/C++ Linux服务器架构师学习资料加qun获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

交叉连接(CROSS JOIN)

交叉连接:返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积

首先,先简单解释一下笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian proct),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员

举例:

现在,我们有两个集合A和B。

A = {0,1} B = {2,3,4}

集合 A×B 和 B×A的结果集就可以分别表示为以下这种形式:

A×B = {(0,2),(1,2),(0,3),(1,3),(0,4),(1,4)};

B×A = {(2,0),(2,1),(3,0),(3,1),(4,0),(4,1)};

以上A×B和B×A的结果就可以叫做两个集合相乘的‘笛卡尔积’。

从以上的数据分析我们可以得出以下两点

1,两个集合相乘,不满足交换率,既 A×B ≠ B×A;

2,A集合和B集合相乘,包含了集合A中元素和集合B中元素相结合的所有的可能性。既两个集合相乘得到的新集合的元素个数是 A集合的元素个数 × B集合的元素个数;

交叉连接有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。例如:下面的语句1和语句2的结果是相同的。

语句1:隐式的交叉连接,没有CROSS JOIN。SELECT O.ID, O.ORDER_NUMBER, C.ID, C.NAMEFROM ORDERS O , CUSTOMERS CWHERE O.ID=1;

语句2:显式的交叉连接,使用CROSS JOIN。SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM ORDERS O CROSS JOIN CUSTOMERS CWHERE O.ID=1;

内连接和where的区别:

数据库表连接数据行匹配时所遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。

比如现在数据库中有两张表,student表和 student_subject表,如下所示:

我们执行以下的sql语句,只是纯粹的进行表连接。

看一下执行结果:

表1.0

表1.1

从执行结果上来看,结果符合我们以上提出的两点结论(红线标注部分);

以第一条sql语句为例我们来看一下他的执行流程,

1,from语句把student表 和 student_subject表从数据库文件加载到内存中。

2,join语句相当于对两张表做了乘法运算,把student表中的每一行记录按照顺序和student_subject表中记录依次匹配。

3,匹配完成后,我们得到了一张有 (student中记录数 × student_subject表中记录数)条的临时表。 在内存中形成的临时表如表1.0所示。我们又把内存中表1.0所示的表称为‘笛卡尔积表’。

再看一下sql中主要关键字的执行顺序:

from on join where group by having select distinct union order by

我们看到on是在join和where前面的

如果两张表的数据量都比较大的话,那样就会占用很大的内存空间这显然是不合理的。所以,我们在进行表连接查询的时候一般都会使用FROM table1 JOIN table2 ON xxx的语法,避免使用 FROM table1,table2 WHERE xxx 的语法,因为后者会在内存中先生成一张数据量比较大的笛卡尔积表,增加了内存的开销。

因此,有一个显而易见的SQL优化的方案是,当两张表的数据量比较大,又需要连接查询时,应该使用 FROM table1 JOIN table2 ON xxx的语法,避免使用 FROM table1,table2 WHERE xxx 的语法,因为后者会在内存中先生成一张数据量比较大的笛卡尔积表,增加了内存的开销。

全连接(Full join)

全外连接是在结果中除了显示满足连接的条件的行外,还显示了join两侧表中所有满足检索条件的行
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中支黄金叶什么价 怎么在整个PPT中加入背景音乐,而不是在一张幻灯片中插入,我要的是从... 构造柱有哪些构造措施 中国风的女式花裤配什么鞋 留抵抵税额是什么意思 留抵税抵什么意思 ...里发现很多门店装修和华为一样的,但是官网查不到,这种店铺购买... 墙布贴了关窗多久 墙布贴了要关窗多久 墙布贴好要多久密闭多久 一文讲懂SQL外连接OUTER JOIN SQL server基本技能篇:关于SQL语句中的几个join 图解:史上最详细之数据库左连接、右连接、内连接、全连接! [SQL快速入门-36] SQL FULL JOIN:全连接 死神里的四大贵族除了朽木,四枫院外还有哪两家? 金丝猴香烟产自哪里金丝猴多少一包 新西兰麦卢卡蜂蜜的价格 纽瑞滋麦卢卡蜂蜜介绍 五千万卢卡等于多少人民币 3699游戏盒子如何下载 上海托普信息技术职业学院学院概况 上海哪些学校是示范性软件职业技术学院? 眼睛不能对视 阳光是怎么回事? 室友怕光,有一点光都睡不着觉 如果眼睛红,见阳光就流泪,而且很困睁都睁不开 北大青鸟怎么样,毕业好就业吗 北大青鸟包就业吗?北大青鸟学完分配工作吗 我女儿才十岁就有七十五斤、身高一米三七、是不是超重啊 本人身高一米七二,体重七十五公斤,当兵的话超过标准体重了吗 我身高175体重却有七十八公斤,要减到多少才标准?要怎样减最快最有效... 石景山区有哪些重点初中? 亲吻什么感觉 你说下家乡滴特色小吃都有啥? 怎样将一首1分52的歌改成30秒 一个三分钟等多少秒? ...和痛苦。。。我是不是不适合学佛呢?为什么学佛就要有那么多的条... 为什么一说到内向我就会很敏感? 考上主管护师很难吗 帮忙推荐一款能玩3D游戏的笔记本,价格在4000到5000 神舟 战神K580C-i5 D1 玩lol cf可以吗,特效能开到什么地步 惠普4321s(LW970PA)玩剑灵这种大型游戏能行不,不行的话给推荐款适合玩... 黄河安澜是什么意思? 兰考安澜生态旅游开发有限公司怎么样? 个人贷款因疫情逾期怎么办? 谁能给我一个泰拳从头到尾的教学网站啊 必须得全啊 不能少一阶段 中国激光照牌之父是谁 我为什么要选择汉字激光照排系统的研制工作 热敏电阻的阻值怎么随温度变化呢? 老龄委职责 一日不见如隔三秋下一句是什么