`

数据库中表的内联、外联、右联都有什么区别?

阅读更多

内联:
a inner join b on a.id=b.id
查两张表都有的id记录

左外联:
a left join b on a.id=b.id
只要表a有的id,表a有,b没有的b字段为NULL

右外联:
a right join b on a.id=b.id
只要表b有记录,与左相反

 数据库的外联和内联知识 
使用关系代数合并数据
1 关系代数
合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。
在关系代数的形式化语言中:
        用表、或者数据集合表示关系或者实体。
        用行表示元组。
        用列表示属性。
关系代数包含以下8个关系运算符
        选取――返回满足指定条件的行。
        投影――从数据集合中返回指定的列。
        笛卡尔积――是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式进行组合。
        并――关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。
        交――返回两个数据集合所共有的行。
        差――返回只属于一个数据集合的行。
        连接――在水平方向上合并两个表,其方法是:将两个表中在共同数据项上相互匹配的那些行合并起来。
        除――返回两个数据集之间的精确匹配。
此外,作为一种实现现代关系代数运算的方法,SQL还提供了:
        子查询――类似于连接,但更灵活;在外部查询中,方式可以使用表达式、列表或者数据集合的地方都可以使用子查询的结果。
本章将主要讲述多种类型的连接、简单的和相关的子查询、几种类型的并、关系除以及其他的内容。
2 使用连接
2.1 连接类型
在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。
SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。
连接类型        定义
内连接        只连接匹配的行
左外连接        包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右外连接        包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接        包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
(H)(theta)连接        使用等值以外的条件来匹配左、右两个表中的行
交叉连接        生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配
在INFORMIX中连接表的查询
如果FROM子句指定了多于一个表引用,则查询会连接来自多个表的行。连接条件指定各列之间(每个表至少一列)进行连接的关系。因为正在比较连接条件中的列,所以它们必须具有一致的数据类型。
SELECT语句的FROM子句可以指定以下几种类型的连接
FROM子句关键字        相应的结果集
CROSS JOIN        笛卡尔乘积(所有可能的行对)
INNER JOIN        仅对满足连接条件的CROSS中的列
LEFT OUTER JOIN        一个表满足条件的行,和另一个表的所有行
RIGHT OUTER JOIN        与LEFT相同,但两个表的角色互换
FULL OUTER JOIN        LEFT OUTER 和 RIGHT OUTER中所有行的超集

2.2 内连接(Inner Join)
内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接。
下面是ANSI SQL-92标准
select *
from  t_institution i
inner join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = "5801"
其中inner可以省略。
等价于早期的连接语法
select *
from t_institution i, t_teller t
where i.inst_no = t.inst_no
and i.inst_no = "5801"

2.3 外连接
2.3.1        左外连接(Left Outer Jion)
select *
from  t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
其中outer可以省略。
2.3.2        右外连接(Rigt Outer Jion)
select *
from  t_institution i
right outer join t_teller t
on i.inst_no = t.inst_no
2.3.3        全外连接(Full Outer)
全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集。
在现实生活中,参照完整性约束可以减少对于全外连接的使用,一般情况下左外连接就足够了。在数据库中没有利用清晰、规范的约束来防范错误数据情况下,全外连接就变得非常有用了,你可以使用它来清理数据库中的数据。
select *
from  t_institution i
full outer join t_teller t
on i.inst_no = t.inst_no
2.3.4        外连接与条件配合使用
当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到 join子句时,SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:
条件在join子句
select *
from  t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
and i.inst_no = “5801”
结果是:
inst_no    inst_name            inst_no    teller_no  teller_name
5801       天河区               5801       0001       tom
5801       天河区               5801       0002       david
5802       越秀区
5803       白云区
条件在where子句
select *
from  t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = “5801”
结果是:
inst_no    inst_name            inst_no    teller_no  teller_name
5801          天河区                   5801         0001              tom
5801          天河区                   5801         0002             david

2.4 自身连接
自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。
下面例子是在机构表中查找本机构和上级机构的信息。
select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
from t_institution i
join t_institution s
on i.superior_inst = s.inst_no

结果是:
superior_inst sup_inst_name        inst_no    inst_name
800                            广州市               5801       天河区
800                            广州市               5802       越秀区
800                            广州市               5803       白云区

2.5 交叉(无限制) 连接
交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中一的每个行都要与数据集合二中的每一个行分别组成一个新的行。例如,如果第一个数据源中有5个行,而第二个数据源中有4个行,那么在它们之间进行交叉连接就会产生20个行。人们将这种类型的结果集称为笛卡尔乘积。
大多数交叉连接都是由于错误操作而造成的;但是它们却非常适合向数据库中填充例子数据,或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。
select *
from  t_institution i
cross join t_teller t
在交叉连接中没有on条件子句

分享到:
评论

相关推荐

    sql语句的内联外联 经典面试题

    在电子商务系统中,SQL语句的内联外联可以用来连接多个表,例如订单表、客户表、产品表等,以便进行订单管理和客户管理。 四、SQL语句的内联外联经典面试题 4.1 什么是SQL语句的内联外联? 答案:SQL语句的内联...

    数据库的外联和内联知识 Inner Join

    数据库的外联和内联知识是关系数据库管理系统中的一种基本操作,它们用于从多个表中提取相关数据,生成新的结果集合。在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个...

    数据库外联、内联.pdf

    本文主要讨论了数据库中的连接类型,包括内联(Inner Join)、外联(Outer Join)以及它们的变体,如左外联(Left Outer Join)、右外联(Right Outer Join)和全外联(Full Outer Join)。这些概念对于理解和优化...

    数据库外联内联.pdf

    数据库外联内联.pdf 本文档主要讲述数据库外联内联的相关知识点,涵盖自联、...本文档总结了数据库外联内联的相关知识点,涵盖自联、关系代数、连接类型、子查询等内容,为读者提供了系统的了解数据库外联内联的方法。

    数据库内联外联等代码.txt

    y由于编程需要各种不同功能的数据库连接,这里整理了常用的数据库内联,外联,交叉连接等代码,直接复制就可以

    sql中内联和外联区别

    右外连接正好与左外连接相反,它会在两个表中查找所有B表中的记录,以及A表中符合条件的记录。如果A表中没有符合条件的记录,则返回null值。 #### 实例说明 如果我们想要查看所有在表B中出现过的卡号及其得分,并...

    内联函数-14.08.25

    内联函数有两种形式:**内联版本**和**外联版本**。 1. **内联版本**:当内联功能被启用,并且函数体简单到足以被内联时,编译器会在函数调用位置直接展开函数体。 2. **外联版本**:当内联功能被禁用或者函数体...

    数据库面试题目(基础)

    数据库面试题目(基础) 数据库面试题目是数据库开发人员面试时经常被问到的问题,...本文对数据库面试题目进行了分类解释,涵盖了存储过程、内联和外联、触发器等重要知识点,为数据库开发人员提供了有价值的参考。

    解析:内联,左外联,右外联,全连接,交叉连接的区别

    在数据库查询中,连接操作是将两个或多个表格的数据结合在一起的关键方法,使得我们可以从不同表格中获取相关信息。本文将详细解析五种不同的连接类型:内连接、左外连接、右外连接、全连接和交叉连接。 1. 内连接...

    数据库多表联接PPT学习教案.pptx

    本教程主要介绍了如何在SQL中进行多表联接,包括表的别名、内联接、外联接和自联接等关键知识点。 首先,使用表的别名可以简化SQL语句,提高可读性。别名的设定有两种方式:一是直接在表名后跟AS,如`SELECT * FROM...

    sql.rar_sql外联查询

    在SQL(结构化查询语言)中,外联查询是数据库操作中的重要概念,它用于从多个表中检索数据,特别是当这些数据分布在不同的表中时。外联查询分为三种主要类型:左外联(LEFT JOIN)、右外联(RIGHT JOIN)和全外联...

    Visual+C#+2005数据库项目案例导航源文件

    9. **多表关联与JOIN操作**:通过实例学习如何处理多表关联查询,包括内联JOIN、外联JOIN以及自联JOIN。 10. **数据库设计原则**:在某些案例中,可能涉及数据库模式设计,如ER模型转换为关系模式,以及索引优化等...

    SQL server2000数据库知识

    - 右联接(外联接):`SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.连接列 = 表2.连接列` 以上只是SQL Server 2000数据库管理的一些基础操作,实际应用中还有更多复杂的查询、事务处理、备份恢复、安全性设置等内容...

    外 联 接.rar

    在IT行业中,外联接(Outer Join)是数据库查询中的一种关键操作,它允许我们从一个或多个表中检索数据,即使某些记录在另一个表中没有匹配。这与内联接(Inner Join)不同,内联接只返回两个表中都有匹配记录的结果...

    数据库试卷库题目111

    外联接(如左联接、右联接)涉及两个表,返回所有匹配和非匹配的记录。 11. **删除操作**:删除数据库使用 `DROP DATABASE` 命令,删除表使用 `DROP TABLE`,删除视图使用 `DROP VIEW`。 12. **主键**:主键是表中...

    数据库面试题-DBA数据库管理员

    内联接是指保证两个表中所有的行都要满足连接条件的连接,外联接则不然,它可以显示出不满条件的列。 本文档总结了数据库管理系统的基本概念和技术,涵盖了数据抽象、SQL 语言、视图、完整性约束、第三范式、ER ...

    mysql 多表联接查询练习

    ### MySQL多表联接查询...通过内联接、左外联接等不同的联接方式,我们可以灵活地从多个表中提取所需的数据,这对于日常的数据库管理与数据分析工作非常重要。希望本文能够帮助读者更好地掌握多表联接查询的技术要点。

    数据库面试题

    内联接是指连接两个表时,两个表的所有行都要满足连接条件,例如,Select * From Table1 Inner Join Table2 On Table1.col = Table2.col。外联接是指连接两个表时,只限制其中一个表的行,例如,Select * From Table...

    SQL SERVER 多表联接查询SQL SERVER 多表联接查询SQL SERVER 多表联接查询

    SQL Server 多表联接查询 SQL Server 是一个功能...左(右)外联接可以从两个表中返回符合联接条件的记录,同时也将返回左(右)边不符合联接条件的记录。使用外联接可以从多个表中检索数据,以满足复杂的业务需求。

Global site tag (gtag.js) - Google Analytics