`
Angelialily
  • 浏览: 241698 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

内联结、外联结、左联结、右联结的含义及区别

阅读更多
内联结、外联结、左联结、右联结的含义及区别:

在SQL标准中规划的(join)联结大致分为下面四种:
1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。
2.外联结:分为外左联结和外右联结。左联结A、B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。右联结A、B表的结果和左联结B、A的结果是一样的,也就是说: select A.name B.name From A Left join B On A.id=B.id 和select A.name B.name From B Right join A on B.id=A.id执行后的结果是一样的。
3.全联结:将两个表中存在联结关系的字段的所有记录取出形成记录集的联结(这个不需要记忆,只要是查询中提到了的表的字段都会取出,无论是否符合联结条件,因此意义不大)。
4.无联结:不用解释了吧,就是没有使用联结功能呗,也有自联结的说法。这里我有个比较简便的记忆方法,内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了。其实大家回忆高等教育出版社出版的《数据库系统概论》书中讲到关系代数那章(就是将笛卡儿积和投影那章)的内容,相信不难理解这些联结功能的内涵。

2. MySQL联结(join)的语法:

MySQL支持select和某些update和delete情况下的join语法,具体语法上的细节有: table_references: table_reference [, table_reference] … table_reference: table_factor | join_table table_factor: tbl_name [[AS] alias] [{USE|IGNORE|FORCE} INDEX (key_list)] | ( table_references ) | { OJ table_reference LEFT OUTER join table_reference ON conditional_expr } join_table: table_reference [INNER | CROSS] join table_factor [join_condition] | table_reference STRAIGHT_join table_factor | table_reference STRAIGHT_join table_factor ON condition | table_reference LEFT [OUTER] join table_reference join_condition | table_reference NATURAL [LEFT [OUTER]] join table_factor | table_reference RIGHT [OUTER] join table_reference join_condition | table_reference NATURAL [RIGHT [OUTER]] join table_factor join_condition: ON conditional_expr | USING (column_list)

上面的用法摘自权威资料,不过大家看了是否有点晕呢?呵呵,应该问题主要还在于table_reference是什么,table_factor又是什么?这里的table_reference其实就是表的引用的意思,因为在MySQL看来,联结就是一种对表的引用,因此把需要联结的表定义为table_reference,同时在SQL Standard中也是如此看待的。而table_factor则是MySQL对这个引用的功能上的增强和扩充,使得引用的表可以是括号内的一系列表,如下面例子中的join后面括号:

select * FROM t1 LEFT join (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

这个语句的执行结果和下面语句其实是一样的:

select * FROM t1 LEFT join (t2 CROSS join t3 CROSS join t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

这两个例子不仅让我们了解了MySQL中table_factor和table_reference含义,同时能理解一点CROSS join的用法,我要补充的是在MySQL现有版本中CROSS join的作用和INNER join是一样的(虽然在SQL Standard中是不一样的,然而在MySQL中他们的区别仅仅是INNER join需要附加ON参数的语句,而CROSS join不需要)。

既然说到了ON语句,那就解释一下吧,ON语句其实和where语句功能大致相当,只是这里的ON语句是专门针对联结表的,ON语句后面的条件的要求和书写方式和where语句的要求是一样的,大家基本上可以把ON当作where用。大家也许也看到了OJ table_reference LEFT OUTER join table_reference这个句子,这不是MySQL的标准写法,只是为了和ODBC的SQL语法兼容而设定的,我很少用,Java的人更是不会用,所以也不多解释了。

那下面就具体讲讲简单的join的用法了。首先我们假设有2个表A和B,他们的表结构和字段分别为:

表A: ID Name 1 Tim 2 Jimmy 3 John 4 Tom

表B: ID Hobby 1 Football 2 Basketball 2 Tennis 4 Soccer

1. 内联结: select A.Name B.Hobby from A, B where A.id = B.id,这是隐式的内联结,查询的结果是: Name Hobby Tim Football Jimmy Basketball Jimmy Tennis Tom Soccer 它的作用和 select A.Name from A INNER join B ON A.id = B.id是一样的。这里的INNER join换成CROSS join也是可以的。
2. 外左联结 select A.Name from A Left join B ON A.id = B.id,典型的外左联结,这样查询得到的结果将会是保留所有A表中联结字段的记录,若无与其相对应的B表中的字段记录则留空,结果如下: Name Hobby Tim Football Jimmy Basketball,Tennis John Tom Soccer 所以从上面结果看出,因为A表中的John记录的ID没有在B表中有对应ID,因此为空,但Name栏仍有John记录。
3. 外右联结 如果把上面查询改成外右联结:select A.Name from A Right join B ON A.id = B.id,则结果将会是: Name Hobby Tim Football Jimmy Basketball Jimmy Tennis Tom Soccer 这样的结果都是我们可以从外左联结的结果中猜到的了。说到这里大家是否对联结查询了解多了?这个原本看来高深的概念一下子就理解了,恍然大悟了吧(呵呵,开玩笑了)?

最后给大家讲讲MySQL联结查询中的某些参数的作用:
1.USING (column_list):其作用是为了方便书写联结的多对应关系,大部分情况下USING语句可以用ON语句来代替,如下面例子: a LEFT join b USING (c1,c2,c3),其作用相当于下面语句 a LEFT join b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3 只是用ON来代替会书写比较麻烦而已。
2.NATURAL [LEFT] join:这个句子的作用相当于INNER join,或者是在USING子句中包含了联结的表中所有字段的Left join(左联结)。
3.STRAIGHT_join:由于默认情况下MySQL在进行表的联结的时候会先读入左表,当使用了这个参数后MySQL将会先读入右表,这是个MySQL的内置优化参数,大家应该在特定情况下使用,譬如已经确认右表中的记录数量少,在筛选后能大大提高查询速度。

最后要说的就是,在MySQL5.0以后,运算顺序得到了重视,所以对多表的联结查询可能会错误以子联结查询的方式进行。譬如你需要进行多表联结,因此你输入了下面的联结查询:

select t1.id,t2.id,t3.id FROM t1,t2 LEFT join t3 ON (t3.id=t1.id) where t1.id=t2.id;

但是MySQL并不是这样执行的,其后台的真正执行方式是下面的语句:

select t1.id,t2.id,t3.id FROM t1,( t2 LEFT join t3 ON (t3.id=t1.id) ) where t1.id=t2.id;

这并不是我们想要的效果,所以我们需要这样输入:

select t1.id,t2.id,t3.id FROM (t1,t2) LEFT join t3 ON (t3.id=t1.id) where t1.id=t2.id;
分享到:
评论

相关推荐

    等电位联结目的及规范要求.ppt

    MEB是整个建筑范围内的联结,通过连接PE母排、公用设施管道、建筑金属结构等,降低整个建筑内的接触电压和电位差。LEB则针对特定区域,如浴室、厨房等,将该区域内的导电部分连接。SEB是补充性的,用于满足特定安全...

    过盈联结的设计、计算与装拆

    过盈联结作为一种机械连接方式,在现代机械设计和制造领域扮演着重要角色。这种联结方法主要依赖于两个配合零件之间的过盈配合来传递载荷,它不需要额外的锁紧装置,因此具有结构简单、承载能力大、抗冲击和振动性能...

    SQL查询中外联结的使用.pdf

    1. LEFT OUTER JOIN(左外联结):保留左表(LEFT)的所有行,当右表(RIGHT)中没有匹配行时,结果中的对应列用空值(NULL)填充。 2. RIGHT OUTER JOIN(右外联结):保留右表的所有行,当左表中没有匹配行时,...

    SQL 四种连接-左外连接、右外连接、内连接、全连接详解

    SQL中的四种连接方式是数据库操作中非常重要的概念,它们分别是内连接、左外连接、右外连接和全连接。理解这四种连接可以帮助我们更有效地从多个表中提取所需信息。 1. **内连接(Inner Join)** 内连接是最常见的...

    图集《吊车轨道联结及车挡》(05G525)

    ### 图集《吊车轨道联结及车挡》(05G525)知识点解析 #### 一、概述 图集《吊车轨道联结及车挡》(05G525)是一部专门针对吊车轨道及其车挡结构设计、安装与维护的标准文档。该标准由国家相关部门组织编制,旨在规范...

    SQL Server 2005中的外联结用法

    外联结分为三种类型:左外联结(Left Outer Join)、右外联结(Right Outer Join)和全外联结(Full Outer Join)。下面将详细介绍这三种类型的外联结及其在SQL Server 2005中的用法。 1. 左外联结(Left Outer ...

    一种无需联结外网的语音识别装置的制作方法.docx

    一种无需联结外网的语音识别装置的制作方法主要针对的是语音识别技术领域中的设备设计问题,特别是如何解决装置在运行过程中的散热不均、易损坏电子元件以及安装位置不可调节的问题。传统的语音识别装置通常内置散热...

    低压系统接地故障的保护设计和等电位联结.docx

    局部等电位联结是在特定区域内进行的等电位联结,而辅助等电位联结则是在设备之间或设备与装置外可导电部分之间直接建立的联结,以防止局部区域出现危险电位差。 等电位联结的主要作用在于降低预期接触电压和消除自...

    1 小时 SQL 极速入门(二).pdf

    本篇教程将详细介绍表联结的概念及其不同类型,包括内联结、左外联结、右外联结和全外联结,并通过具体的例子帮助大家理解。 #### 二、表联结概述 **表联结** 是指通过一条 `SELECT` 语句从多个表中查询数据。它使...

    电信设备-可用于多种带有可移动联结外壳的光纤连接器的拔除装置.zip

    标题中的“电信设备-可用于多种带有可移动联结外壳的光纤连接器的拔除装置”指的是一种专门设计用于从电信设备中安全、便捷地拔出具有可移动联结外壳的光纤连接器的工具或系统。这样的装置在现代通信网络维护和安装...

    02D501-2 等电位联结安装.rar

    等电位联结(Earth Bonding)是将建筑物内的金属构件、电气装置、管道系统等相互连接,并与接地系统相连,以减少因电磁干扰或雷击等原因造成的电压差,从而确保用电安全。这一概念源于IEC(国际电工委员会)的标准,...

    电子信息系统机房等电位联结相关问题.pdf

    等电位联结通过连接建筑物内的金属物体、电气装置以及防雷系统,确保所有导电部分处于相同的电位,防止电流冲击引发的反击和触电事故。 在电子信息系统机房中,等电位联结分为三种类型:总等电位联结(MEB)、局部...

    php5.6.8版

    php开发 内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结 外联结:分为外左联结和外右联结

    建筑电气总等电位-局部等电位-辅助等电位联结知识.docx

    等电位联结是建筑电气安全中的重要概念,旨在通过将建筑物内的金属部分、设备以及接地体相互连接,以减少电位差,从而降低间接接触电击的风险和防止电气火灾的发生。这一技术主要包括三种类型:总等电位联结(MEB)...

    电子功用-用于联结主机与外部装置的可装拆电路联结器

    压缩包内的文件“用于联结主机与外部装置的可装拆电路联结器.pdf”很可能详细介绍了以下内容: 1. **电路连接器的基本概念**:包括连接器的定义、作用、分类,以及在电子设备中的重要性。 2. **连接器的结构与组成...

    电路基础 《 三相负载的联结方式》.doc

    为了安全,有时候会采用四线制,即除了三根相线外,还有一根中性线,用于承载不平衡电流。 总的来说,理解三相负载的联结方式及其特性是电气工程基础中的关键部分。正确选择和配置三相负载的联结方式,不仅能保证...

    参考资料-4.3.7.16 建筑物等电位联结检验批质量验收表.zip

    等电位联结,简而言之,就是将建筑物内的金属结构、电气设备的外露可导电部分、防雷装置、保护接地线以及管道系统等通过低电阻连接,形成一个共同的电位参考点,以减少电流流经人体的风险。在施工过程中,这一环节...

    Oracle中的半联结和反联结详解

    在Oracle数据库中,半联结(Semi-Join)和反联结(Anti-Join)是两种特殊的查询操作,它们通常用于处理两个表之间的关联,但返回的结果与传统的内联结(Inner Join)和外联结(Outer Join)有所不同。这两种操作在...

Global site tag (gtag.js) - Google Analytics