自己的Oracle查询练习!
佐佐吉牧 2009-09-04 12:04:59 select * from dept;
select * from emp;
--连接查询连接条件是emp.deptno=dept.deptno
select empno,ename,job sal,emp.deptno,dname,loc
from emp,dept where emp.deptno=dept.deptno;
--外连接运算符为(+)
��--�� 传统的外连接分为左外连接和右外连接两种
--左外连接
select empno,ename,job sal,dept.deptno,dname,loc
from emp,dept where emp.deptno(+)=dept.deptno;
--右外连接
select empno,ename,job sal,emp.deptno,dname,loc
from emp,dept where emp.deptno=dept.deptno(+);
--满外连接(全外连接)
select empno,ename,job sal,emp.deptno,dname,loc
from emp full outer join dept on (emp.deptno=dept.deptno);
--如何查得每个员工及其上司的工号和姓名?
select * from emp;
select emp1.empno, emp1.ename,emp1.job,emp2.ename
from emp emp1,emp emp2 where emp1.mgr=emp2.empno
--会产生笛卡尔集,我们应该避免这种情况
select emp.empno,emp.ename,dept.deptno,dept.dname from
emp,dept;
--自然连接去掉重复列表的等值连接叫做自然连接
select * from dept natural join emp;
--使用using指定连接字段
select * from dept join emp using(deptno)
--子查询(记住,子查询是内层子查询先做后做外层)
--单行子查询可能使用< > = >= <= <> 多行子查询不能这样做
select * from emp;
select * from emp where sal>(
select sal from emp where ename='ALLEN'
)
select * from emp
--返回多值的子查询不能使用< > = >= <= <>但可以用any,all,in,>all <all >any <any
select * from emp where sal > all(
select sal from emp where deptno='30'
)
--查询和SMITH,BLAKE在同一个部门的员工信息
select * from emp where job in (select job from emp where ename ='SMITH' or ename='BLAKE')
--topN查询前5条记录
select * from emp;
select * from emp where rownum<=5
--查询从第6条到第10记录即(分页)
select * from emp where rownum>5 and rownum<=10;--分页错误写法
--高效查询正确写法
select * from (
select rownum num,emp.* from emp where rownum<=10
) where num>5;