Oracle_SQL练习_08

来源:互联网 发布:网络蓝瘦香菇什么意思 编辑:程序博客网 时间:2024/05/16 08:28
--1、创建表myemp和emp表具有相同的结构和记录。create table myemp as select *  from emp;--2、给myemp的empno列添加主建约束。alter table myemp add constraint pk_myemp primary key(empno);--3、给myemp添加一条记录。insert into myemp(empno,ename...) values()--4、给myemp添加一条记录只有empno,ename,mgr,sal,deptno有值,其他列为空。insert into myemp(empno, ename, mgr, sal, deptno) values()--5、显示所有  薪金高于公司均薪金的人。SELECT * FROM emp WHERE nvl(sal, 0) > (SELECT AVG(nvl(sal, 0)) FROM emp)--6、显示所有  薪金高于各自部门平均薪金的人。   关联子查询*******SELECT *FROM   empINNER  JOIN (SELECT round(AVG(nvl(sal, 0)), 2) avgsal, deptno             FROM   emp             GROUP  BY deptno) t1ON     emp.deptno = t1.deptnoWHERE  nvl(sal, 0) > avgsal--7、给所有10部门的经理(MANAGER)和20部门的职员(CLERK),增加薪金10%。UPDATE empSET    sal = sal * 1.1WHERE  (deptno = 10 AND job = 'MANAGER')       OR (deptno = 20 AND job = 'CLERK')--8、使用EMP,DEPT表显示所有销售部'SALES'的员工。select * from emp where job = 'SALESMAN'--9、删除DEPT中没有员工的部门。DELETE FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)--10、显示所有的部门信息和人数。******SELECT t1.deptno, t1.cnt 员工人数, dept.dname, dept.locFROM   (SELECT COUNT(*) CNT, deptno FROM emp GROUP BY deptno) t1INNER  JOIN deptON     dept.deptno = t1.deptno--11、删除雇佣年限低于20年的员工。DELETE FROM emp WHERE months_between(SYSDATE, hiredate) < 20 * 12--12、显示各部门员工薪金最高的前2名SELECT *FROM   (SELECT emp.*,               row_number() over(PARTITION BY deptno ORDER BY nvl(sal, 0) DESC) grade        FROM   emp) t1WHERE  t1.grade <= 2--13、显示薪金最高的3位员工SELECT *FROM   (SELECT emp.*, row_number() over(ORDER BY nvl(sal, 0) DESC) grade        FROM   emp) t1WHERE  t1.grade <= 3--14、为EMP的各字段建立必要的索引,使得如下查询能使用上索引--   select * from emp where ename like 'S%';  --   select * from emp where job='MANAGER';--   select * from emp where hiredate>to_date('1982','yyyy');