PLSQL练习

1 篇文章 0 订阅

---1、列出所有员工的姓名以及其直接上级的姓名
select e.ename,m.ename
from emp e,emp m
where e.empno=m.mgr

---2、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
select empno,ename,dname
from emp,dept
where emp.deptno=dept.deptno

---3、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
select dname ,empno,ename,job,mgr,hiredate,sal,comm
from dept,emp
where emp.deptno(+)=dept.deptno
group by dname,empno,ename,job,mgr,hiredate,sal,comm;

---4、列出所有员工的姓名、部门名称和工资  
select ename,dname,sal
from emp,dept
where emp.deptno=dept.deptno

---5、查出某个员工的上级主管,并要求出这些主管中的薪水超过3000
select e.ename,m.ename manager
from emp e,emp m
where e.mgr=m.empno and m.sal>3000

---6、列出至少有4个员工的部门名称
select dname
from emp,dept
where emp.deptno=dept.deptno
group by dname
having count(empno)>=4;

---7、列出薪金比"SMITH"多的所有员工
select *
from emp
where sal>(select sal from emp where upper(ename)='SMITH');

---8、列出所有从事"CLERK"工作的雇员姓名及其部门名称、部门人数
select ename,dname,ce
from emp,dept,(select dept.deptno, count(empno) ce from emp,dept where emp.deptno=dept.deptno group by dept.deptno) t
where emp.deptno=dept.deptno and job='CLERK'
and emp.deptno=t.deptno 

---9、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数
select job,count(empno)
from emp
group by job
having min(sal)>1500

---10、列出在部门"sales"(销售部)工作的员工的姓名,假定不知道销售部的部门编号
select ename
from emp
where deptno=(select deptno from dept where upper(dname)=upper('sales'))

---11、列出薪金高于公司平均薪金的雇员姓名、所在部门名称、领导姓名、雇员的工资等级
select e.ename,dname,m.ename,s.grade
from emp e,emp m,dept d,salgrade s
where e.mgr=m.empno and e.deptno=d.deptno
and e.sal between s.losal and s.hisal
and e.sal>(select avg(sal) from emp )

---12、列出与"SMITH"从事相同工作的所有员工及部门名称
select emp.*,dname
from emp,dept
where emp.deptno=dept.deptno
and job=(select job from emp where ename='SMITH')

---13、列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金 
select ename,sal
from emp
where sal in(select sal from emp where deptno=30)

---14、列出薪金高于部门30所有员工薪金的员工姓名、薪金及部门名称
select ename,sal
from emp
where sal >all(select sal from emp where deptno=30)

---15、列出在每个部门工作的员工数量、平均工资和平均服务年限 
select count(empno),avg(sal),avg(to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy'))
from emp
group by deptno

---16、列出所有员工的姓名、部门名称和工资
select ename,dname,sal
from emp,dept
where emp.deptno=dept.deptno

---17、列出所有部门的详细信息和部门人数
select dept.deptno,dname,loc,count(empno)
from emp,dept
where emp.deptno=dept.deptno
group by dept.deptno,dname,loc;

---18、列出每种工作的最低工资以及从事此工作的最低工资的雇员姓名
select ename, min(sal)
from emp
group by ename,job;

---19、列出各个部门的经理的最低薪金
select min(m.sal)
from emp e,emp m
where e.mgr=m.empno
group by m.deptno

---20、列出所有员工的年工资,按年薪从低到高排序
select ename,sal*12
from emp 
order by sal*12
---21、查询雇员的领导信息,要求领导的薪水要超过3000
select distinct m.*
from emp e,emp m
where e.mgr=m.empno
and m.sal>3000
---22、求出部门名称中,带'S'字符的部门员工的工资总和 、部门人数
select dname, sum(sal),count(empno)
from emp,dept
where emp.deptno(+)=dept.deptno
and dname in(select dname from dept where dname like '%S%')
group by dname;
 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经典的PL/SQL练习题常常涉及到条件判断、循环和数据操作等方面的知识。以下是一些经典的PL/SQL练习题: 1. 给定三个数值,返回其中较大的那个数: ```sql DECLARE A INT := &输入1; B INT := &输入2; C INT := &输入3; BEGIN IF A > B AND A > C THEN DBMS_OUTPUT.PUT_LINE(A); ELSIF B > A AND B > C THEN DBMS_OUTPUT.PUT_LINE(B); ELSIF C > A AND C > B THEN DBMS_OUTPUT.PUT_LINE(C); END IF; END; ``` [引用1] 2. 给定三个数值,按照从大到小的顺序返回: ```sql DECLARE A INT := &输入1; B INT := &输入2; C INT := &输入3; BEGIN IF A > B AND A > C THEN IF B > C THEN DBMS_OUTPUT.PUT_LINE(A || ',' || B || ',' || C); ELSIF C > B THEN DBMS_OUTPUT.PUT_LINE(A || ',' || C || ',' || B); END IF; ELSIF B > A AND B > C THEN IF A > C THEN DBMS_OUTPUT.PUT_LINE(B || ',' || A || ',' || C); ELSIF C > A THEN DBMS_OUTPUT.PUT_LINE(B || ',' || C || ',' || A); END IF; ELSIF C > A AND C > B THEN IF A > B THEN DBMS_OUTPUT.PUT_LINE(C || ',' || A || ',' || B); ELSIF B > A THEN DBMS_OUTPUT.PUT_LINE(C || ',' || B || ',' || A); END IF; END IF; END; ``` [引用1] 3. 编写一个存储过程,将STUDENT_INFO_01表中的数据拷贝到STUDENT_INFO_02表中: ```sql CREATE OR REPLACE PROCEDURE COPY_STUDENT_INFO AS BEGIN INSERT INTO STUDENT_INFO_02 SELECT * FROM STUDENT_INFO_01 WHERE AGE BETWEEN 15 AND 20 AND FLG = 0; END COPY_STUDENT_INFO; ``` [引用2] 4. 编写一个存储过程,将STUDENT_INFO_01表中的性别字段由Code转换为具体的性别: ```sql CREATE OR REPLACE PROCEDURE CONVERT_GENDER AS BEGIN UPDATE STUDENT_INFO_01 SET GENDER = CASE WHEN GENDER = 'M' THEN 'Male' WHEN GENDER = 'F' THEN 'Female' ELSE 'Unknown' END; END CONVERT_GENDER; ``` [引用2] 5. 给定一个数N,计算2^1 + 2^2 + ... + 2^N 的值: ```sql DECLARE N NUMBER := &输入; S NUMBER := 0; A NUMBER := 0; BEGIN FOR B IN 1 .. N LOOP A := A || 2; S := S + A; END LOOP; DBMS_OUTPUT.PUT_LINE(S); END; ``` [引用3] 这些是一些经典的PL/SQL练习题,涉及到了条件判断、循环和数据操作等方面的知识。可以通过编写相应的PL/SQL代码来解决这些问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值