数据库表连接总结
来源:互联网 发布: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均不支持,其作用是:找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可以利用数据库的集合操作来实现此功能。
- 数据库表连接总结
- c#连接数据库总结
- C#连接数据库总结
- C#连接数据库总结
- ODBC连接数据库总结
- Hibernate连接数据库总结
- jdbc连接数据库总结
- jsp连接mysql数据库总结
- 连接远程数据库方法总结
- asp连接数据库方法总结
- 连接远程数据库方法总结
- VB.NET连接数据库总结
- JSP连接数据库的总结
- ADO.NET连接数据库总结
- jsp连接数据库方法总结
- ASP 连接数据库方法总结
- vc++连接数据库 个人总结
- Node.js连接数据库总结
- Java异步调用-多线程实现
- 基于android的java复习0
- 【数值计算】householder矩阵的QR算法,求特征值
- JavaWeb学习笔记02_javascript
- 设置UINavigationController的返回按钮 样式
- 数据库表连接总结
- Cookie细节
- Android应用框架之PackageManagerService
- 理解Websocket
- 嵌入式学习心得(一)
- 事件分发机制简单理解
- 【在路上】Learn Python The Hard Way 习题心得(ex11,12,13,14,15)
- Java任务调度框架Quartz入门教程指南(一) Quartz——一个强大的定时任务调度框架
- CVPR 2016