9、显示工资比部门30的所有员工的工资高的员工姓名、工资和部门号。
ENAME SAL DEPTNO ---------- --------- ------ JONES 2975.00 20 SCOTT 3000.00 20 KING 5000.00 10 FORD 3000.00 20 或者 SQL> select ename,sal,deptno from emp where sal>(select max(sal) from emp where deptno=30); ENAME SAL DEPTNO ---------- --------- ------ JONES 2975.00 20 SCOTT 3000.00 20 KING 5000.00 10 FORD 3000.00 20
10、查询与SMITH部门和岗位完全相同的所有雇员
SQL> select ename from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH'); ENAME ---------- SMITH ADAMS
SQL> select ename,sal,svg "部门平均工资" from emp,(select deptno,avg(sal) svg from emp group by deptno) t where sal>svg and emp.deptno=t.deptno; ENAME SAL 部门平均工资 ---------- --------- ------------ ALLEN 1600.00 1566.6666666 JONES 2975.00 2375 BLAKE 2850.00 1566.6666666 SCOTT 3000.00 2375 KING 5000.00 2916.6666666 FORD 3000.00 2375 6 rows selected
12、修改员工scott的岗位、工资、补助与smith员工一样。
SQL> update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT'; 1 row updated
13、oracle分页。
SQL> select * from emp where empno in(select empno from (select empno,rownum rn from (select empno from emp order by sal desc) where rownum<=10) t where t.rn>=6); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7782 CLARK MANAGER 7839 1981-06-09 2450.00 10 7844 TURNER SALESMAN 7698 1981-09-08 1500.00 0.00 30 7934 MILLER CLERK 7782 1982-01-23 1300.00 34.56 10 7499 ALLEN SALESMAN 7698 1981-02-20 1600.00 300.00 30 7369 SMITH CLERK 7902 1980-12-17 1800.00 2014、用查询结果创建新表
SQL> create table emp1(id,name) as select empno,ename from emp; Table created Executed in 0.532 seconds SQL> select * from emp1; ID NAME ----- ---------- 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER 14 rows selected15、合并查询。(union、union all、intersect、minus) (1)union 取两个结果集的并集,会自动去掉结果集中重复行。
SQL> select empno id,ename name from emp 2 union 3 select id,name from emp1; ID NAME ----- ---------- 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER 14 rows selected(2)union all 取两个结果集的并集,不会去掉结果集中重复行。
SQL> select empno id,ename name from emp 2 union all 3 select id,name from emp1 4 ; ID NAME ----- ---------- 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE ID NAME ----- ---------- 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER 28 rows selected(3)intersect 取两个结果的交集。
SQL> select ename,sal from emp where sal>2500 2 intersect 3 select ename,sal from emp where job='MANAGER'; ENAME SAL ---------- --------- BLAKE 2850.00 JONES 2975.00(4)minus 取两个结果的相