数据库中的join连接

来源:互联网 发布:阿里云计算是什么 编辑:程序博客网 时间:2024/06/06 05:20

数据库中的join详解:

连接的类型分为:内连接(Inner join),外连接(outer join),其中外连接又分为左外连接、右外连接和全外连接。

连接的条件有:natural、on<predicate>、using<A1,A2,......An>

任意的连接类型可以和任意的连接条件进行组合。


内连接:

内连接与自然连接基本相同,不同之处在于自然连接只能是同名属性的等值连接,而内连接可以使用using或on子句来指定连接条件,连接条件中指出某两字段相等(可以不同名)。inner join中关键字inner是可选的,当join字句中没有使用outer前缀时,默认是inner join。
A(a, b, c), B(a, d, e)
图示:
Venn diagram of SQL inner join
(1)显示连接(on)与隐式连接:
显示:
select * from A inner join Bon A.a=B.a;
隐式:
select * from A,Bwhere A.a = B.a;
以上两种写法是等价的。
(2)相等连接:
提供了一种可选的简短符号去表达相等连接,它使用 USING 关键字。
select * from A inner join Busing(a);
与显示连接不同之处:结果去除重重复的属性列

(3)自然连接(natural join)

自然连接是一种特殊的等值连接,他要求两个关系表中进行比较的必须是相同的属性列,无须添加连接条件,并且在结果中消除重复的属性列。要求是两个这两个关系中参与比较的属性列必须是同名、同属性。如果两个关系中有多组这样的属性,默认是全部比较的。

sql语句:Select …… from 表1 natural join 表2,例如:

A(a, b, c), B(a, d, e)

select *from A natural join B;


(4)交叉连接(cross join)
交叉连接即笛卡尔积,结果为A×B。
select * from A cross join B;
等价于隐式:
select * from A, B;


外连接:

假设有两个表,学生表和选课表,如果有一部分学生没有选课,即只在学生表中有他们的信息,而在选课表中没有他们信息。那么以学号做内连接时,结果中只会出现两个表中都有的那些学生的信息,把为选课的学生信息丢失。使用外连接,可以将没选课的学生信息也保存在结果中,在相应的属性填上null。
表:A(a, b, c) B(a, d, e)
(1)左外连接(LEFT  JOIN或LEFT OUTER JOIN)
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
图示:
Venn diagram of SQL left join


代码:
SELECT * FROM A LEFT OUTER JOIN BON A.a = B.a
(2)右外连接(RIGHT  JOIN 或 RIGHT  OUTER  JOIN)
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行则将为左表返回空值。
代码:
SELECT * FROM A RIGHT OUTER JOIN BON A.a = B.a

(3)全外连接(FULL  JOIN 或 FULL OUTER JOIN)
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

图示:
Venn diagram of SQL cartesian join
代码:
SELECT * FROM A FULL OUTER JOIN BON A.a = B.a

对数据库中连接的认识目前是这样的,以后有补充再修改。

0 0