Oracle内链接+外连接详解

inner join(内连接)

内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表行,必须满足ON子句中的搜索条件。作为对照,如果在源表中的行在另一表中没有对应(相关)的行,则该行就被过滤掉,不会包括在结果表中。内连接使用比较运算符来完成。内连接可分为两种。

1. 等值连接

使用等于号(=)比较被连接列的列值,在查询结果中列出被连接表中的所有列,包括其中的重复列。图9.12给出了典型的等值内连接示意图。

clip_image003

图4.2.3.1 等值内连接

实例1 使用INNER JOIN内连接查询

实验:

clip_image005

1.1自然连接(特殊的等值连接)相同列合并

clip_image007

2. 不等连接

在连接条件中,可以使用其他比较运算符,比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

实验:

clip_image009

4.1.3 外连接(OUTER JOIN)

不管是内连接还是带WHERE子句的多表查询,都组合自多个表,并生成结果表。换句话说,如果任何一个源表中的行在另一个源表中没有匹配,DBMS将不把该行放在最后的结果表中。

而外连接告诉ODBC生成的结果表,不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

SQL的外连接共有3种类型:左外连接,关键字为LEFT OUTER JOIN、右外连接,关键字为RIGHT OUTER JOIN和全外连接,关键字为FULL OUTER JOIN。外连接的用法和内连接一样,只是将INNER JOIN关键字替换为相应的外连接关键字即可。

说明 使用外连接时,关键字OUTER是可选的,如可用LEFT JOIN替代LEFT OUTER JOIN。

下面分别介绍一下这几种外连接方式。

4.1.3.1左外连接

左外连接,LEFT OUTER JOIN,告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)左边表的不匹配行。左外连接实际上可以表示为:

左外连接 = 内连接 + 左边表中失配的元组

其中,缺少的右边表中的属性值用NULL表示。

clip_image010

图4.2.31 左外连接

实验:

clip_image012

4.1.3.2右外连接

右外连接(RIGHT OUTER JOIN)告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)右边表的不匹配行。右外连接实际上可以表示为:

右外连接 = 内连接 + 右边表中失配的元组

其中,缺少的左边表中的属性值用NULL表示。图9.20给出了典型的右外连接示意图。

clip_image013

图4.2.3.2 右外连接

实验:

clip_image015

4.1.3.3全外连接

全外连接,FULL OUTER JOIN,告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)左边表和右边表的不匹配行。全外连接实际上可以表示为:

全外连接 = 内连接 + 左边表中失配的元组 + 右边表中失配的元组。

其中,缺少的左边表或者右边表中的属性值用NULL表示。图9.23给出了典型的全外连接示意图。

clip_image016

图4.2.3.3 全外连接

实验:

clip_image018

posted @ 2014-04-23 19:14  夏微风  阅读(2127)  评论(0编辑  收藏  举报