`
lige239141
  • 浏览: 174868 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库的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_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条件子句

转自 http://hi.baidu.com/llscompazz/blog/item/dc5e23d9ce2b62eb39012fb4.html


0
0
分享到:
评论
1 楼 lendau 2013-08-15  
网上搜了半天,还是这个讲的最清楚啊,谢谢主机,保存了!

相关推荐

    数据库各种join连接

    数据库各种join连接 数据库中的join连接是指将两个或多个表连接起来,以便检索数据的操作。Join连接可以分为交叉连接、内连接和外连接三种类型。 一、交叉连接(Cross Join) 交叉连接也叫笛卡尔积,返回的是两表...

    数据库内外连接举例

    数据库连接是数据库操作中的一种重要方法,用于合并来自多个表的数据。主要分为内连接、外连接和交叉连接,每种连接都有其特定的应用场景和逻辑。 内连接(INNER JOIN)是最常见的连接类型,它返回两个表中列相等的...

    thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例

    本文实例讲述了thinkPHP5框架实现多数据库连接,跨数据连接查询操作。分享给大家供大家参考,具体如下: 1. 多数据库连接 方法1:在需要连接其他数据库的地方,使用Db::connect()方法动态连接数据库,方法参数为...

    数据库连接测试及数据的查询

    数据库连接测试及数据查询是IT领域中常见的任务,特别是在开发和维护基于MS SQL Server的应用程序时。这个过程涉及确保应用程序能够正确地与SQL Server数据库建立连接,并执行有效的数据查询操作。下面将详细介绍这...

    数据库:左连接、右连接、全连接

    外连接(OUTER JOIN)是一种连接操作,用于查询多个表中的数据,但不 sadece 返回符合连接条件的数据行,而是返回左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中的所有数据行。外连接可以分为三种...

    数据库连接 数据库连接

    数据库连接是计算机应用程序与数据库系统之间建立的通信通道,它是数据操作和管理的核心部分,尤其在Web应用、企业信息系统和各种软件开发中扮演着至关重要的角色。本文将深入探讨数据库连接的相关知识点,包括连接...

    数据库自连接应用范例(Oracle)

    数据库自连接是数据库查询中的一种特殊技巧,尤其在Oracle数据库中有着广泛的应用。自连接允许一个表自身与其进行连接操作,这在处理复杂的数据关系时非常有用,例如查询上下级关系、查找共同属性或者实现某种特定的...

    数据库连接查询相关外连接内连接

    【数据库连接查询详解】 在数据库管理系统中,查询是获取数据的核心操作。本篇文章将深入探讨数据库连接查询,包括内连接、外连接和交叉连接等,同时结合实例来帮助理解。 首先,了解数据库的基础架构。Oracle...

    关于数据库连接的问题

    ### 数据库连接类型详解 #### 一、引言 在数据库操作中,连接查询是非常重要的一个环节,尤其当数据分布在不同的表中时,通过连接查询可以有效地整合这些数据,为数据分析提供强有力的支持。本文将围绕“关于...

    数据库多表连接

    数据库多表连接是数据库操作中的核心技能之一,它允许我们从多个相关联的表中获取数据,以便进行更复杂的查询和分析。在SQL语言中,多表连接主要用于合并多个表中的记录,根据它们之间的关系来获取所需信息。下面将...

    java与数据库连接图书管理系统.zip

    4. SQL语言:你需要掌握基本的SQL操作,包括SELECT(查询)、INSERT(插入)、UPDATE(更新)和DELETE(删除)语句,以及可能用到的JOIN操作,以便在数据库中管理图书信息。 5. 控制台交互:本项目可能通过控制台...

    关于数据库连接的资源

    数据库连接是IT领域中至关重要的一个环节,尤其是在开发和维护数据驱动的应用程序时。数据库连接允许应用程序与存储数据的数据库进行交互,执行SQL语句,从而实现数据的查询、插入、更新和删除等操作。本资源针对...

    数据库连接的一些相关资料

    数据库连接是IT领域中至关重要的一个环节,尤其是在开发基于Java的应用程序时。本文将深入探讨数据库连接的相关知识点,包括各种数据库的连接方式、新手入门资料以及与Java、JSP和SQL Server、MySQL数据库相关的知识...

    oracle数据库表左连接右连接全连接的认识

    Oracle 数据库表连接(Join)知识点总结 Oracle 数据库表连接(Join)是指从两个或多个表中检索数据,并且将它们组合成一个结果集的操作。连接操作可以大大提高数据库查询的效率,特别是在需要访问多个表中的字段...

    oracle数据库 左连接 右连接 自连接 。。

    在Oracle数据库中,连接操作是查询数据的核心部分,它允许我们合并来自多个表的数据。这里主要涉及三种类型的连接:左连接、右连接和自连接。理解这些连接方式对于有效地管理和查询数据库至关重要。 1. **左连接...

    数据库连接表查询

    内连接(INNER JOIN)是数据库中最常用的连接类型之一,它返回两个表中满足指定连接条件的行。内连接可以分为显式内连接和隐式内连接。 - **显式内连接**:使用 `INNER JOIN` 关键字来实现。 - **隐式内连接**:...

    DBeaver连接mysql数据库图文教程

    **DBeaver 连接 MySQL 数据库的详细步骤** DBeaver 是一款强大的数据库管理工具,因其免费、开源且支持多种数据库的特点,深受开发者和DBA的青睐。它提供了直观的用户界面,使得数据库的管理和操作变得更加简单。...

    国内神通数据库工具,国产化开发

    例如,它们都支持SELECT、INSERT、UPDATE、DELETE等标准SQL语句,以及JOIN、GROUP BY、HAVING等复杂查询操作。然而,由于每种数据库系统都有其特定的特性和扩展,使用神通数据库时,还需要了解其特有的函数、语法和...

    连接各种数据库的sql语句

    本文将详细讲解如何使用SQL语句来连接各种类型的数据库,包括关系型数据库如MySQL、Oracle、SQL Server,以及非关系型数据库如MongoDB、Redis等。 首先,我们关注的是“连接”这一概念,它在数据库世界中通常指的是...

    数据库方面注意事项及连接数据库

    掌握SELECT、INSERT、UPDATE、DELETE等基本操作,以及JOIN、GROUP BY、子查询等高级特性,对于有效连接和操作数据库至关重要。 5. 连接池:在高并发环境中,使用连接池(如C3P0、HikariCP)可以提高效率,通过复用...

Global site tag (gtag.js) - Google Analytics