数据库表连接总结

来源:互联网 发布:mac怎么下载crossover 编辑:程序博客网 时间:2024/06/06 14:11

表连接的共性:第一步均为将所有参与操作的表进行了一个笛卡儿积,然后才依据各连接条件进行记录的筛选。


(一) 笛卡尔积(交叉连接)

交叉连接的两种方式,得到的结果为笛卡尔积形式:

隐式交叉连接:select * from student, score;

显示交叉连接:select * fromstudent cross join score;

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。


(二)条件连接

条件连接就是在多个表的笛卡尔积中选取满足条件的行的连接

例如:select * from A,B where A.a > A.b

等值连接(特殊的条件连接)

例如:select * from A,B where A.a = B.b(条件为某字段=某字段时)


(三)自然连接

专业术语:自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。

自然连接(Natural join)是一种特殊的等值连接,自然连接无需指定连接列,SQL会检查两个表中是否相同名称和类型的列,如果没有则返回错误。它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。

select * from table1 natural [inner/left outer/right outer/full outer] join table2;


(四)内连接

返回连接表中符合连接条件和查询条件的数据行

1)隐式内连接(等值连接)

select * from table1t1, table2 t2 where t1.field1=t2. field2;

2)显式内连接

select * from table1t1 inner join table2 t2 on t1. field1 =t2. field2;

内连接和等值连接的区别:执行效果等价,只是写法不一样。等值连接用where,内连接用inner join … on

(在某种意义上,笛卡尔积、条件连接、自然连接、等值连接均可以归类为内连接,因为都是在笛卡尔积的基础上加上条件进行筛选。)


(五)外连接

1.左外连接(左连接)left  join或left outer join 

(会将left outer join左侧的表的所有内容显示出来,没有对应的值为空)

select *

from student s

left outer join score sc on s.studentid=sc.studentid;

左向外联接的结果集包括 left outer子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。


2.右外连接(右连接)right join 或 right outer join   

(会将连接表右侧的表中所有内容都显示出来)

select *

from student s

right outer join score sc on s.studentid=sc.studentid;

右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。


3.全外连接(全连接)full join 或 full outer join

select *

from student s

full outer join score sc on s.studentid=sc.studentid;

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


(六)联合查询(union join)

这是一种很少见的连接方式。Oracle、MySQL均不支持,其作用是:找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可以利用数据库的集合操作来实现此功能。

0 0
原创粉丝点击