首页 > 其他 > 详细

多表连接查询

时间:2020-06-27 16:38:45      阅读:77      评论:0      收藏:0      [点我收藏+]

多表连接查询:
1.交叉连接(笛卡尔积):所有情况的组合 ,不推荐使用
select * from emp ,dept ;


2.内连接 :多张表通过 相同字段进行匹配,只显示匹配成功的数据
a.
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
不等值连接(一般不用)
select * from emp e ,dept d
where 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


右外连接
右外连接:以右表为基准(右表数据全部显示),去匹配左表数据,如果匹配成功 则全部显示;匹配不成功,显示部分(无数据部分 用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


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

 


自连接:将一张表 通过别名 “视为”不同的表


查询 员工姓名,以及 该员工的领导姓名
select e.ename ,b.ename from emp e,emp b
where e.mgr =b.empno;
//员工表的领导编号mgr = 领导表的 员工编号号empno


自连接 比较费性能: emp -> e,b

优化?
层次连接:
select level ,empno, ename ,mgr from emp
connect by prior empno=mgr
start with mgr is null
order by level ;

多表连接查询

原文:https://www.cnblogs.com/mayouyou/p/13198674.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!