Oracle_SQL练习_08

本文通过一系列的Oracle SQL练习,涵盖了数据创建、主键约束、插入、查询以及更新等操作。涉及了关联子查询、窗口函数、删除操作及索引创建等,旨在提升对Oracle数据库管理和查询效率的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--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   emp
INNER  JOIN (SELECT round(AVG(nvl(sal, 0)), 2) avgsal, deptno
             FROM   emp
             GROUP  BY deptno) t1
ON     emp.deptno = t1.deptno
WHERE  nvl(sal, 0) > avgsal

--7、给所有10部门的经理(MANAGER)和20部门的职员(CLERK),增加薪金10%。
UPDATE emp
SET    sal = sal * 1.1
WHERE  (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.loc
FROM   (SELECT COUNT(*) CNT, deptno FROM emp GROUP BY deptno) t1
INNER  JOIN dept
ON     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) t1
WHERE  t1.grade <= 2

--13、显示薪金最高的3位员工
SELECT *
FROM   (SELECT emp.*, row_number() over(ORDER BY nvl(sal, 0) DESC) grade
        FROM   emp) t1
WHERE  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');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值