Oracle_SQL99_连接查询

Oracle_SQL99_连接查询

交叉连接 cross join  
--交叉连接 cross join
--作用:产生两个表的笛卡尔积
select * from emp cross join dept;
select * from emp cross join dept where emp.deptno = dept.deptno;  
自然连接 natural join  
--自然连接 natural join,类似于SQL92中的等值连接
--自然连接不允许在参照列上使用表名或者别名作为前缀
select * from emp natural join dept;
 
 
--using连接,用于指定进行等值连接的列名
--using中不允许使用表名或表的别名修饰
--join单独使用就是内连接的意思,可以省略inner
select * from emp inner join dept using(deptno); 
 
on 子句
--查询员工的姓名,职位,薪资,薪资等级
--on子句:用于指定连接条件
select e.ename, e.job, e.sal, s.grade from emp e 
join salgrade s
on e.sal between s.losal and s.hisal;

--查询员工的编号,姓名,部门名称,薪资等级
select e.empno, e.ename, d.dname, s.grade
from emp e 
join dept d on e.deptno = d.deptno
join salgrade s on e.sal between s.losal and s.hisal;
 
 
select e.empno, e.ename, d.dname, s.grade
from emp e 
natural join dept d
join salgrade s on e.sal between s.losal and s.hisal;
 
 
select e.empno, e.ename, d.dname, s.grade
from emp e 
join dept d using(deptno)
join salgrade s on e.sal between s.losal and s.hisal;    
自然连接
--自连接
--查询员工的编号,姓名,领导的编号,领导的姓名
select  e1.ename, e2.empno, e2.ename from emp e1
join emp e2
on e1.mgr = e2.empno(+);  
--SQL99外连接 outer join
--左外连接(left outer join)
--右外连接(right outer join)
--满外连接(full outer join)  
select * from emp;
select e1.empno, e1.ename, e1.mgr, e2.ename from emp e1
left outer join emp e2
on e1.mgr = e2.empno;--左外连接,显示左边表的全部行
 
 
select * from emp;
select e1.empno, e1.ename, e1.mgr, e2.ename from emp e1
right outer join emp e2
on e1.mgr = e2.empno;--右外连接,显示右边表的全部行
 
 
 
select * from emp;
select e1.empno, e1.ename, e1.mgr, e2.ename from emp e1
full outer join emp e2
on e1.mgr = e2.empno;--满外连接,显示两个表的全部行  
 
 
 
 
原文地址:https://www.cnblogs.com/haozhengfei/p/6538376.html