Oracle只的多表连接查询

1.交叉连接(笛卡尔积)

所有情况的组合(n*n),不推荐使用

select * from emp  ,dept;

2.内连接

多张表通过相同字段进行匹配,只显示匹配成功的数据

a.(oracle独有)
	select * from emp e ,dept d
	where e.deptno = d.deptno ;
b.
	select * from emp e
	inner join dept d
	on e.deptno = d.deptno 

3.外连接

左外连接:以左表为基准(左表数据全部显示),去匹配右表数据,如果匹配成功,则全部显示,匹配不成功,显示部分(无数据部分用null填充)

a.(oracle独有)
	select * from emp e ,dept d
	where e.deptno = d.deptno(+) ;
b
	select * from emp e
	left outer join dept d
	on e.deptno = d.deptno 

4.右外连接

右外连接:以右表为基准(右表数据全部显示),去匹配左表数据,如果匹配成功,则全部显示,匹配不成功,显示部分(无数据部分,用null填充)

a.(oracle独有)
	select * from emp e ,dept d
	where e.deptno(+) = d.deptno;
b
	select * from emp e
	right outer join dept d
	on e.deptno = d.deptno 

5.不等值连接

一般不使用

select * from emp e ,dept d
	where e.deptno <= d.deptno ;

6.全外连接

全外连接=左外连接+右外连接-去重

7.自连接

将一张表,通过别名"视为"不同的表

查询员工姓名,以及该员工的领导姓名

select e.ename ,b.ename from emp e,emp b
where e.mgr =b.empno;
//员工表的领导编号mgr = 领导表的 员工编号号empno

自连接比较费性能,因为是交叉连接的形式

对于自连接的优化

层次连接:
select level ,empno, ename ,mgr from emp
connect by prior empno=mgr

​ start with 当前节点的上层节点值=x

​ start with mgr is null
​ order by level ;

SQL> select level ,empno, ename ,mgr from emp connect by prior  empno=mgr
  2  start with mgr is null order by level ;

     LEVEL      EMPNO ENAME                       MGR
---------- ---------- -------------------- ----------
         1       7839 KING
         2       7566 JONES                      7839
         2       7698 BLAKE                      7839
         2       7782 CLARK                      7839
         3       7902 FORD                       7566
         3       7521 WARD                       7698
         3       7900 JAMES                      7698
         3       7934 MILLER                     7782
         3       7499 ALLEN                      7698
         3       7788 SCOTT                      7566
         3       7654 MARTIN                     7698

     LEVEL      EMPNO ENAME                       MGR
---------- ---------- -------------------- ----------
         3       7844 TURNER                     7698
         4       7876 ADAMS                      7788
         4       7369 SMITH                      7902

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值