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;--满外连接,显示两个表的全部行 |