数据库常见的join方式有三种:inner join, left outter join, right outter join(还有一种full join,因不常用,本文不讨论)。这三种连接方式都是将两个以上的表通过on条件语句,拼成一个大表。以下是它们的共同点: 1. 关于左右表的概念。左表指的是在SQL语句中排在left join左边的表,右表指的是排在left join右边的表。
inner join 格式:select * from 部门 inner join 组织 on 部门.组织编号 = 组织.编号 目的:将两表中符合on条件的所有记录都找出来。 规律: 1. 拼出的大表记录不会增加。 典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过=号将主外键进行连接,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。 备注:inner join 是默认的连接方式,可缩写为join。 转化为where子句: select * from 部门, 组织 where 部门.组织编号 = 组织.编号
left outter join 格式: select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号 格式: select * from 组织 left join 部门 on 组织.编号 = 部门.组织编号 目的:将左表的所有记录列出,右表中只要符合on条件的,与左表记录相拼合,不符合条件的,填以null值。 规律: 1. 选出所有符合条件的左表,如果左边与右表的关系是一对一的关系,则拼成的大表记录不会改变。 典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。 备注:left outter join可用left join代替。在有些数据库中,如HSqlDb, 只能使用left join而不能使用left outter join。 转化为where子句: select * from 部门, 组织 where 部门.组织编号 = 组织.编号
格式: select * from 部门 right join 组织 on 部门.组织编号 = 组织.编号 格式: select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号 目的:将右表的所有记录列出,左表中只要符合on条件的,与右表记录相拼合,不符合条件的,填以null值。 规律:(与left outter join相反) 典型应用:可转化成left outter join。例如 select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号 备注:right outter join可用right join代替。在有些数据库中,如HSqlDb, 没有实现right join功能。 转化为where子句: select * from 部门, 组织 where 部门.组织编号 = 组织.编号 |
|
来自: bigyellowdoc > 《编程》