GZICP.com   
 
    返回首页
    联系我们
 
 
     

SQL入门:连接

www.gzicp.com   2004年7月15日 11:55:56
 
  从两个或更多个表中组
所有组合。对于每个组合,
束的列表,参考 SQL Refer
合数据的过程称为连接表。数据
它都测试连接条件。连接条件是
ence。
库管理程序从指定的表中形成行的
带有一些约束的搜索条件。有关约


  注意:连接条件涉及的
条件的方式与计算其他搜索
列的数据类型不必相同;然而,
条件的方式相同,并且使用相同
这些数据类型必须相容。计算连接
的比较规则。

  如果未指定连接条件,
完全不相关。该结果称为这
则返回在 FROM 子句中列出的表
两个表的交叉积。
中行的所有组合,即使这些行可能


  本节中的示例基于下面两个表。这两
中并不存在。这两个表一般用来概述关于
雇员的姓名以及这些雇员的职务说明,而
姓名以及这些雇员所参与的项目。
个表只是样本数据库中表的简化形式,在样本数据库
连接的重点。 SAMP_STAFF 列出未作为合同工雇用的
SAMP_PROJECT 则列出雇员(合同工和全职人员)的


  这些表如下:                                                                 

  图 5. SAMP_PROJECT 表                                        

   


  图 6. SAMP_STAFF 表                                            

   


  下列示例产生两个表的交叉积。因未指定连接条件,所以给出了行的所有组合:       

   SELECT SAMP_PROJECT.NAME,                  
   SAMP_PROJECT.PROJ, S
AMP_STAFF.NAME, SAMP_STAFF.JOB
   FROM SAMP_PROJECT, SAMP_STAFF    

  此语句产生下列结果:                                                         

   


  两个主要的连接类型是
连接只保留交叉积中满足连
在,则结果表中不包括该信
内连接和外连接。到目前为止,
接条件的那些行。如果某行在一
息。
所有示例中使用的都是内连接。内
个表中存在,但在另一个表中不存


  下列示例产生两个表的内连接。该内连接列出分配给某个项目的全职雇员信息:       

   SELECT SAMP_PROJECT.NAME,                  
   SAMP_PROJECT.PROJ, S
AMP_STAFF.NAME, SAMP_STAFF.JOB
   FROM SAMP_PROJECT, SAMP_STAFF    
   WHERE SAMP_S
TAFF.NAME = SAMP_PROJECT.NAM
E

  或者,也可以指定如下内连接:                                                 

   SELECT SAMP_PROJECT.NAME,                  
   SAMP_PRO
JECT.PROJ, SAMP_STAFF.NAME,
SAMP_STAFF.JOB

   FROM SAMP_PR
OJECT INNER JOIN SAMP_STAFF
   ON SAMP_STAFF.NAME = S
AMP_PROJECT.NAME

  结果是:                                                                     

  


  注意:该内连接的结果由右表和左表
'Thompson' 都包括在列出所有全职雇员
和合同雇员的 SAMP_PROJECT 表中。
中姓名列的值匹配的行组成- 'Haas' 和
的 SAMP_STAFF 表中以及列出分配给某个项目的专职


  外连接是内连接和左表
连接时,可任意将一个表指
和/或右表中未包括内连接中的
定为左表而将另一个表指定为右
那些行的并置。当对两个表执行外
表。外连接有三种类型:


  左外连接包括内连接和左表中未包括在内连接中的那些行。                         

  右外连接包括内连接和右表中未包括在内连接中的那些行。                         

  全外连接包括内连接以及左表和右表中未包括在内连接中的行。                     
  使用 SELECT 语句来指
JOIN、RIGHT OUTER JOIN
关键字的第二个表。在 ON
定要显示的列。在 FROM 子句中
或 FULL OUTER JOIN 的第一个
关键字后面,指定表示要连接的
,列出后跟关键字 LEFT OUTER
表的名称。接着需要指定后跟 ON
表之间关系的连接条件。

  在下列示例中,将 SAMP_STAFF 指定
用 LEFT OUTER JOIN,列出所有全职和合
号,如果是全职雇员(在 SAMP_STAFF 中
为右表,而 SAMP_PROJECT 则被指定为左表。通过使
同雇员(在 SAMP_PROJECT 中列出)的姓名和项目编
列出),还列出这些雇员的职位:

   SELECT SAMP_PRO
JECT.NAME, SAMP_PROJECT.PROJ
,

   SAMP_STA
FF.NAME, SAMP_STAFF.JOB
   FROM SAMP_PROJECT LEFT O
UTER JOIN SAMP_STAFF

   ON SAMP_ST
AFF.NAME = SAMP_PROJECT.NAME

  此语句产生下列结果:                                                          

   


  所有列中都具有值的那些行是该内连
'Thompson' 既在 SAMP_PROJECT(左表
满足连接条件的行,右表的列上出现空值
列出的合同雇员,因而未在 SAMP_STAFF

接的结果。这些都是满足连接条件的行: 'Haas' 和
)中列出又在 SAMP_STAFF(右表)中列出。对于不
: 'Lutz' 和 'Walker' 都是在 SAMP_PROJECT 表中
表中列出。注意:左表中的所有行都包括在结果集中


  在下一个示例中,将 S
用 RIGHT OUTER JOIN 列出
将这些雇员分配给了某个项
AMP_STAFF 指定为右表而 SAMP_
所有专职雇员(在 SAMP_STAFF
目(在 SAMP_PROJECT 中列出)
PROJECT 则被指定为左表。通过使
中列出)的姓名和工作职位,如果
,还列出他们的项目编号:

   SELECT SAMP_PROJECT.NAME,                  
   SAMP_PRO
JECT.PROJ, SAMP_STAFF.NAME,
SAMP_STAFF.JOB
   FROM SAMP_PROJECT RIGHT
OUTER JOIN SAMP_STAFF

   ON SAMP_ST
AFF.NAME = SAMP_PROJECT.NAME

  结果为:                                                                     

   


  象在左外连接中一样,所有列中都具
件的行: 'Haas'和'Thompson'既在 SAMP
中列出。对于不满足连接条件的行,右表
分配项目的专职雇员。虽然他们在 SAMP_
:右表中的所有行都包括在结果集中。
有值的那些行是内连接的结果。这些都是满足连接条
_PROJECT(左表)中列出又在 SAMP_STAFF(右表)
的列上出现空值: 'Lucchessi'和'Nicholls'都是未
STAFF 中列出,但未在 SAMP_PROJECT 中列出。注意


  下一个示例对 SAMP_PROJECT 表和 S
有专职雇员(包括未分配项目的雇员)和
AMP_STAFF 表使用 FULL OUTER JOIN。该示例列出所
合同雇员的姓名:

   SELECT SAMP_PRO
JECT.NAME, SAMP_PROJECT.PROJ
,

   SAMP_STA
FF.NAME, SAMP_STAFF.JOB
   FROM SAMP_PROJECT FULL O
UTER JOIN SAMP_STAFF
   ON SAMP_STAFF.NAME = S
AMP_PROJECT.NAME

  结果为:                                                                      

   


  此结果包括左外连接、
接和右外连接一样,对于不
SAMP_PROJECT 中的每一行
右外连接以及内连接。列出所有
满足连接条件的值,相应列中出
都包括在结果集中。
专职雇员和合同雇员。正如左外连
现空值。 SAMP_STAFF 和

 
 

ChinaITLab 

相关文章
·SQL入门:用约束和触发器实施商业规则(2004年07月15日)
·SQL入门:谓词(2004年07月15日)
·SQL入门:用集合运算符组合查询(2004年07月09日)
·SQL入门:相关子查询(2004年07月09日)
·SQL入门:相关名(2004年07月09日)
·SQL入门:表表达式(2004年07月09日)
·SQL入门:条件表达式(2004年07月09日)
·SQL入门:转换数据类型(2004年07月09日)
·SQL入门:标量全查询(2004年07月09日)
·SQL入门:分组(2004年07月09日)
·SQL入门:使用函数(2004年07月09日)
·SQL入门:使用子查询(2004年07月09日)
·SQL入门:从多个表中选择数据(2004年07月09日)
·SQL入门:给表达式命名(2004年07月05日)
·SQL入门:使用表达式来计算值(2004年07月05日)
·SQL入门:运算次序(2004年07月05日)
·SQL入门:除去重复行(2004年07月05日)
·SQL入门:将行进行排序(2004年07月05日)
·SQL入门:选择行(2004年07月05日)
·SQL入门:选择列(2004年07月05日)
·SQL入门:创建视图(2004年06月30日)
·SQL入门:删除数据(2004年06月30日)
·SQL入门:更改数据(2004年06月30日)
·SQL入门:插入数据(2004年06月30日)
·SQL入门:创建表(2004年06月30日)
·SQL入门:数据类型(2004年06月28日)
·SQL入门:模式(2004年06月28日)
·SQL入门:视图(2004年06月28日)
·SQL入门:表(2004年06月28日)
最新文章
·防范SQL注入式攻击  (2004年09月05日)
·SQL injection的实现与应用  (2004年09月04日)
·SQL入门:目录视图的介绍  (2004年07月15日)
·SQL入门:大对象 (LOB)  (2004年07月15日)
·SQL入门:用户定义函数  (2004年07月15日)
·SQL入门:用户定义类型  (2004年07月15日)





 
 
Copyright © 1999-2008 GZICP.com All Rights Reserved