求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
 
内连接和外连接
 

2010-04-16 来源:网络

 

内连接

内连接也叫连接,是最早的一种连接,最早被称为普通连接或自然连接。内连接是从结果中删除其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。

内连接的语法:

SELECT fieldlist

FROM table1 [INNER] join table2

ON table1.column=table2.column

一个表中的行和与另外一个表中的行匹配连接。表中的数据决定了如何对这些行进行组合。从每一个表中选取一行,根据这些列的值是否相同,组合方式分为一对一、多对一和多对多的关系。

1.一对一关系

当连接的两个表,两个连接列的值完全相同,则两个表连接相当于一对一的关系。

下面在“pubs”数据库中“titles”和“titleauthor”两个表中,根据相同列“title_id”进行内连接。在查询分析器中输入的SQL语句如下:

use pubs

select *

from titles

inner join titleauthor

on titles.title_id= titleauthor.title_id

实现的过程如图1所示。

图1 内连接时一对一的关系

说明:表“titles”和“titleauthor”都是SQL Server自带的数据库“pubs”的表。由于两个表中的title_id列都是具有惟一值的索引,所以两个表的内连接属于一对一的关系。

2.多对一关系

当连接的两个表,其中一个表要连接的列出现重复值,另外一个表的值是惟一的。这时连接的两个表之间的出现了多对一的关系。

下面“student”表中的“学号”具有惟一值,而“grade”成绩表中的“学号”有重复值。现在实现这两个表的内连接。在查询分析器中输入的SQL语句如下:

use student

select *

from grade

join student

on student.学号=grade.学号?

实现的过程如图2所示。

图2 内连接时多对一的关系

3.多对多关系

当连接的两个表,要连接的列都出现重复值,这时连接的两个表之间出现多对多的关系。

本例是SQL Server自带的数据库“pubs”,其中的两个表“titles”和“roysched”中的“royalty”列都有重复值,现在实现这两个表的内连接。在查询分析器中输入的SQL语句如下:

use pubs

select *

from titles

inner join roysched

on titles.royalty=roysched.royalty

实现的过程如图3所示。

图3 内连接时多对多的关系

外连接则扩充了内连接的功能,会把内连接中删除表源中的一些保留下来,由于保留下来的行不同,把外连接分为左外连接、右外连接和全外连接这3种连接。

1.左外连接

左外连接保留了第一个表的所有行,但只包含第二个表与第一表匹配的行。第二个表相应的空行被放入NULL值。

左外连接的语法:

use student

SELECT fieldlist

FROM table1 left join table2

ON table1.column=table2.column

下面把“student”表和“grade”表左外连接,第一个表“student”有不满足连接条件的行。在查询分析器中输入的SQL语句如下:

use student

select *

from student

left join grade

on student.学号=grade.学号

实现的过程如图1所示。

2.右外连接

右外连接保留了第二个表的所有行,但只包含第一个表与第二个表匹配的行。第一个表相应空行被入NULL值。

右外连接的语法:

use student

SELECT fieldlist

FROM table1 right join table2

ON table1.column=table2.column

下面把“grade”表和“course”表右外连接,第二个表“course”有不满足连接条件的行。在查询分析器中输入的SQL语句如下:

use student

select *

from grade

right join course

on course.课程代号=grade.课程代号

实现的过程如图2所示。

3.全外连接

全外连接会把两个表所有的行都显示在结果表中。

全外连接的语法:

use student

SELECT fieldlist

FROM table1 full join table2

ON table1.column=table2.column

把“grade”表和“course”表实现全连接,两个表都有不满足连接条件的行。在查询分析器中输入的SQL语句如下:

use student

select * from

grade full

join course

on course.课程代号=grade.课程代号

实现的过程如图3所示。

 



MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...