`

SQL中的left outer join,inner join,right outer join各种连接用法

阅读更多

使用关系代数合并数据
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_n

分享到:
评论

相关推荐

    SQL中的left outer join,inner join,right outer join用法详解

    SQL 中的左外连接、内连接、右外连接用法详解 SQL 中的连接操作是数据库管理系统中最基本的操作之一,它能够将多个表中的数据结合起来,生成一个新的结果集。本文将对 SQL 中的左外连接、内连接、右外连接进行详细...

    inner join、 left join 、right join、 outer join之间的区别

    根据连接的方式不同,可以分为几种类型:`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`以及`FULL OUTER JOIN`。下面将详细解释这些连接方式的区别。 #### INNER JOIN (内连接) `INNER JOIN`是最常用的一种连接方式,它...

    关于sql的left join,right join,inner join,outerjoin

    本篇文章将深入探讨四种基本的JOIN类型:LEFT JOIN(左连接)、RIGHT JOIN(右连接)、INNER JOIN(内连接)以及OUTER JOIN(外连接)。我们将详细解释这些概念,它们的工作原理以及在实际数据库操作中的应用。 1. ...

    SQL语句inner join,left join ,right join连接的不同之处

    根据连接方式的不同,可以分为多种类型,包括内连接(Inner Join)、左连接(Left Join)以及右连接(Right Join)。本文将详细探讨这三种连接方式的区别,并通过具体的例子来解释它们的应用场景。 ### 内连接...

    sql join( inner join, outer join) 分析

    - 右JOIN(或RIGHT OUTER JOIN)与LEFT JOIN相反,返回右表的所有行,即使左表中没有匹配的行。 - FULL JOIN(或FULL OUTER JOIN)返回两个表中的所有行,无论是否有匹配。如果在任何一方表中没有匹配,结果将是...

    SQL中inner join、outer join和cross join的区别

    根据不同的连接方式,`JOIN`可以分为几种类型,包括`INNER JOIN`、`OUTER JOIN`(左外联接`LEFT JOIN`、右外联接`RIGHT JOIN`以及全外联接`FULL JOIN`)和`CROSS JOIN`。每种类型的`JOIN`都有其独特的应用场景和特点。...

    SQL left join

    在本文中,我们将详细介绍SQL Left Join的使用方法、特点和区别,以及与Right Join和Inner Join的比较。 一、SQL Left Join的定义和使用 SQL Left Join也称为左外连接,它可以将左表中的所有记录与右表中的记录...

    (Left join , Right Join, Inner Join)用法详解

    ### (Left join , Right Join, Inner Join)用法详解 #### 一、基本概念与应用场景 在数据库查询语言SQL中,连接(Join)是一种非常重要的操作,它允许我们结合两个或多个表的数据来检索信息。根据不同的连接方式,...

    inner join and outer join.pdf

    - **Outer Join**(外部连接)可以分为 Left Outer Join、Right Outer Join 和 Full Outer Join。 - 这种类型的连接不仅返回满足连接条件的行,还返回一个表中所有行(对于 Left 或 Right)或两个表中所有行(对于 ...

    SQL联合查询inner join、outer join和cross join的区别详解

    这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,而outer join还包括full join....

    有关sql中的join用法

    在SQL查询中,JOIN操作是连接两个或多个表的关键部分,用于从这些表中提取相关数据。JOIN的主要目的是合并来自不同表的行,基于这些表之间的共同列或字段。在这个主题中,我们将深入探讨JOIN的不同类型,以及某些...

    sql语句中join的用法

    下面我们将详细介绍几种常见的JOIN类型:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全连接(FULL JOIN),并通过具体的例子进行说明。 #### 一、内连接(INNER JOIN) 内连接是最常用...

    inner join-outer join-cross join查询方式总结

    根据连接方式的不同,可以分为内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN 和 FULL JOIN)以及交叉连接(CROSS JOIN)。下面我们将详细探讨每种连接方式的特点、适用场景及其具体的实现方法。 #### 内...

    【SQL高级(三)】【SQL 连接(JOIN)】

    文章目录SQL 连接(JOIN)不同的 SQL JOINSQL INNER JOIN 关键字SQL LEFT JOIN 关键字SQL RIGHT JOIN 关键字SQL FULL OUTER JOIN 关键字 SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来。 下图展示了 ...

    SQL中的left join right join

    SQL中的JOIN操作是数据库查询中不可或缺的部分,特别是LEFT JOIN和RIGHT JOIN,它们允许我们合并来自多个表的数据,根据特定的关联条件。以下是这些JOIN类型详细解释: 1. INNER JOIN(或简写JOIN): INNER JOIN...

    SQL连接JOIN例

    本文将详细介绍五种主要的`JOIN`类型:左连接(`LEFT JOIN`/`LEFT OUTER JOIN`)、右连接(`RIGHT JOIN`/`RIGHT OUTER JOIN`)、全连接(`FULL JOIN`/`FULL OUTER JOIN`)、内连接(`INNER JOIN`/`JOIN`)以及交叉连接(`...

    sql中join总结

    在SQL查询中,JOIN操作是用于将两个或更多表格的数据结合在一起的关键技术。根据不同的需求,SQL提供了多种类型的JOIN,包括交叉JOIN、内JOIN、左外JOIN、右外JOIN和全外JOIN。以下是对这些JOIN类型的具体解释和示例...

    join on 语句及扩展

    3. RIGHT JOIN (或 RIGHT OUTER JOIN): 右JOIN与LEFT JOIN相反,返回右表的所有记录,即使左表中没有匹配的记录。左表中未找到匹配项的记录将用NULL填充。语法: ```sql SELECT columns FROM table1 RIGHT JOIN ...

    画图解释 SQL join 语句1

    LEFT OUTER JOIN 也称为左外连接,它返回左表中的所有记录,包括匹配和不匹配的记录。例如,我们有两个表 A 和 B,我们想从表 A 中检索所有记录,包括匹配和不匹配的记录。 ```sql SELECT * FROM TableA LEFT ...

Global site tag (gtag.js) - Google Analytics