oracle内连接(innerjoin)、外连接(outerjoin)、全连接
(fulljoin)
建表语句:
create table EMPLOYEE
(
EID NUMBER,
DEPTID NUMBER,
ENAME VARCHAR2(200)
)
create table DEPT
(
DEPTID NUMBER,
DEPTNAME VARCHAR2(200)
)
oracle中的连接可分为,内连接(inner join)、外连接(outer join)、全连接(full join),不光是Oracle,其他很多的数据库也都有这3种连接查询⽅式
⼀、内连接inner join,这是我们经常⽤的查询⽅式,⽐如select * from A inner join B on A.field1=B.field2,个⼈认为,这样的内连接查询与下⾯的查询等效,select * from A,B where A.field1=B.field2,内连接查询只能查询出匹配的记录,匹配不上的记录时⽆法查询出来的。
select * from dept inner join employee on dept.deptid=employee.deptid
select * from dept , employee where dept.deptid=employee.deptid多表left join
⼆、外连接outer join,可进⼀步分为左外连接left outer join和右外连接right outer join,具体说⼀下左外连接和右外连接查询的特点,有2个表,部门表和职⼯表,⼀个部门下可以有多个职⼯,⼀个职⼯只能对应⼀个部门,所以部门和职⼯时1对多的关系,设计表如下
⽐如现在有需求1,要进⾏部门表和职⼯表的关联查询,并要查询出所有的部门信息,这时候,下⾯的左连接查询就能够查询出想要的结果,左连接就是以left join前⾯的表为主表,即使有些记录关联不上,主表的信息能够查询出来的
select * from dept left outer join employee on dept.deptid=employee.deptid
⽐如现在有需求2,要进⾏部门表和职⼯表的关联查询,并要查询出所有的职⼯信息,这时候,下⾯的右连接查询就能够查询出想要的结果,右连接就是以right join后⾯的表为主表,即使有些记录关联不上,主表的信息能够查询出来
select * from dept right outer join employee on dept.deptid=employee.deptid
在介绍另外的⼀种写法,同样达到外连接的效果,⼤家可以尝试使⽤。⽐如在需求1中,下⾯的查询语句与需求1中给出的左连接语句等效!select * from dept ,employee where dept.deptid=employee.deptid(+)
总之,外连接就是在关联不上的时候,把其中的部分信息查询出来
三、全连接full join,语法为full join ... on ...,全连接的查询结果是左外连接和右外连接查询结果的并集,即使⼀些记录关联不上,也能够把部分信息查询出来
select * from dept full join employee on dept.deptid=employee.deptid
select * from dept full join employee on 1=1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论