【1】交叉连接 cross join
select * from emp,dept; ---sql92 select * from emp cross join dept; ---sql99
【2】自然连接 natural join
自然连接会自动查找两张表中所有的相同的字段,进行等值连接
select * from emp e, dept d where e.deptno = d.deptno; ---sql92
select * from emp e natural join dept d;
查询所有的员工名称,部门编号和部门名称
select e.ename,d.deptno,d.dname from emp e, dept d where e.deptno = d.deptno; ---sql92 select e.ename, deptno, d.dname from emp e natural join dept d; ---sql99
【3】using:指定字段进行等值连接
select e.ename , deptno, d.dname --注意:deptno不区分是哪个表中的。 from emp e inner join dept d --内连接:通常inner可以省略。 using(deptno); 使用using指定列名,不区分在哪个表中。
【4】on子句;用于指定连接的条件
--查询30号部门员工的编号,姓名和部门的名称 select e.empno,e.ename,d.dname from emp e,dept d where e.deptno = d.deptno; ---sql92 select e.empno,e.ename,d.dname from emp e join dept d on e.deptno = d.deptno where d.deptno = 30; ---sql99 --查看10部门员工姓名,薪水 和薪水等级 select e.ename, e.sal, s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal where e.deptno = 10; --sql99
【5】自连接
select e1.empno,e1.ename, e2.empno,e2.ename from emp e1 join emp e2 on e1.mgr = e2.empno; --sql99 ---但是注意;少了KING这个用户,所以使用外连接。
【6】外连接
外连接有三种:左外连接,右外连接,全外连接
--[6] 外连接 [outer] join outer 可以省略 与 inner一样! -- 左外连接 left [outer] join -- 右外连接 right [outer] join -- 全外连接 full [outer] join select e1.empno,e1.ename,e2.empno,e2.ename from emp e1 left join emp e2 --e1 是可以看作员工表 e2可以看作领导表 on e1.mgr = e2.empno; --查询所有部门的详细信息以及每个部门的平均工资,包含没有员工的部门 select d.*,round(nvl(avg(sal),0)) avg_sal from emp e1 right join dept d on e1.deptno = d.deptno group by d.deptno,d.dname,d.loc order by d.deptno;--按照部门编号排序 --查询部门30员工编号,姓名,部门名称,薪水,薪水等级 select e.empno,e.ename,d.dname,e.sal,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 where d.deptno = 30;