赞
踩
表连接的共性:第一步均为将所有参与操作的表进行了一个笛卡儿积,然后才依据各连接条件进行记录的筛选。
(一) 笛卡尔积(交叉连接)
交叉连接的两种方式,得到的结果为笛卡尔积形式:
隐式交叉连接: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均不支持,其作用是:找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可以利用数据库的集合操作来实现此功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。