---oracle中专用外连接select*from emp e,dept d
where e.deptno(+)= d.deptno
--查询出员工姓名,员工领导姓名--自连接:其实就是站在不同的角度把一张表看成多张表select e1.ename 员工姓名,e2.ename 领导姓名
from emp e1 , emp e2
where e1.mgr=e2.empno;--把e1表看成员工表,e2表看成部门表, 员工表的领导是部门表的员工select*from emp;----查询出员工姓名,员工部门名称,员工领导姓名,员工领导部门名称select e1.ename 员工姓名,d1.dname 员工部门名称,e2.ename 领导姓名,d2.dname 领导部门名称
from emp e1,emp e2,dept d1,dept d2
where e1.mgr=e2.empno and e1.deptno = d1.deptno and e2.deptno = d2.deptno
--子查询--子查询返回一个值---查询出工资和SCOTT一样的员工信息select*from emp
where sal in--安全起见,这里不用= 因为查询条件不是主键,有可能存在多条记录,存在隐患(select sal from emp where ename='SCOTT')--子查询返回一个集合--查询出工资和10号部门任意员工一样的员工信息select*from emp
where sal in(select sal from emp where deptno =10)--子查询返回一张表--查询出每个部门最低工资,和最低工资员工姓名,和该员工所在部门名称--1.先查询出每个部门最低工资select
deptno,min(sal)最低工资
from emp
groupby deptno;--2.三表联查,得到最终结果select t.deptno,msal,e.ename,d.dname
from(select
deptno,min(sal) msal
from emp
groupby deptno) t ,emp e, dept d
where t.deptno=e.deptno
and t.msal=e.sal
and e.deptno = d.deptno;--Oracle中的分页查询--rownum行号:当我们做select操作的时候,--每查询出一行记录,就会在该行上加上一个行号,行号从1开始,依次递增,不能跳着走-----emp表工资倒序排列后,每页五条记录,查询第二页--排序操作会影响rownum的操作select rownum ,e.*from emp e
orderby e.sal desc;-----如果涉及到排序,但是还要使用rownum的话,我们可以再次嵌套查询-----emp表工资倒序排列后,每页五条记录,查询第二页--rownum行号不能写大于一个正数select*from(select rownum rn,t.*from(select*from emp orderby sal desc) t
where rownum<11)where rn>5;