Oracle SQL:经典入门级查询练习(1)



    转:http://blog.csdn.net/cselmu9/article/details/7702813

    下面是一些sql语句的练习题目,后面附加有详细的答案,可作为入门练习参考。
    1. 用SQL完成以下问题列表:  
    2. 1、列出至少有一个员工的所有部门。  
    3. 2、列出薪金比“SMITH”多的所有员工。  
    4. 3、列出所有员工的姓名及其直接上级的姓名。  
    5. 4、列出受雇日期早于其直接上级的所有员工。  
    6. 5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门  
    7. 6、列出所有“CLERK”(办事员)的姓名及其部门名称。  
    8. 7、列出最低薪金大于1500的各种工作。  
    9. 8、列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。  
    10. 9、列出薪金高于公司平均薪金的所有员工。  
    11. 10、列出与“SCOTT”从事相同工作的所有员工。  
    12. 11、列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。  
    13. 12、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。  
    14. 13、列出在每个部门工作的员工数量、平均工资和平均服务期限。  
    15. 14、列出所有员工的姓名、部门名称和工资。  
    16. 15、列出所有部门的详细信息和部门人数。  
    17. 16、列出各种工作的最低工资。  
    18. 17、列出各个部门的MANAGER(经理)的最低薪金。  
    19. 18、列出所有员工的年工资,按年薪从低到高排序。  
    用SQL完成以下问题列表:
    1、列出至少有一个员工的所有部门。
    2、列出薪金比“SMITH”多的所有员工。
    3、列出所有员工的姓名及其直接上级的姓名。
    4、列出受雇日期早于其直接上级的所有员工。
    5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
    6、列出所有“CLERK”(办事员)的姓名及其部门名称。
    7、列出最低薪金大于1500的各种工作。
    8、列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
    9、列出薪金高于公司平均薪金的所有员工。
    10、列出与“SCOTT”从事相同工作的所有员工。
    11、列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。
    12、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
    13、列出在每个部门工作的员工数量、平均工资和平均服务期限。
    14、列出所有员工的姓名、部门名称和工资。
    15、列出所有部门的详细信息和部门人数。
    16、列出各种工作的最低工资。
    17、列出各个部门的MANAGER(经理)的最低薪金。
    18、列出所有员工的年工资,按年薪从低到高排序。
    
    1. /*查看有哪些表存在*/  
    2. select * from tab;  
    3.    
    4. TNAME                          TABTYPE  CLUSTERID  
    5. ------------------------------ ------- ----------  
    6. BONUS                          TABLE     
    7. DEPT                           TABLE     
    8. EMP                            TABLE     
    9. SALGRADE                       TABLE     
    10. /*查看bonus表的全部数据*/  
    11. SELECT  * FROM bonus;  
    12.   
    13. /*查看dept表的全部数据*/  
    14. SELECT  * FROM dept;  
    15.   
    16. /*查看emp表的全部数据*/  
    17. SELECT  * FROM emp;  
    18.   
    19. /*查看salgrade表的全部数据*/   
    20. SELECT  * FROM salgrade;  
    21.   
    22.   
    23. /*1、列出至少有一个员工的所有部门。*/  
    24. SELECT COUNT(empno),deptno FROM emp GROUP BY deptno HAVING  COUNT(empno)>  
    25.   
    26. /*2、列出薪金比“SMITH”多的所有员工。*/  
    27. SELECT * FROM emp WHERE sal >(SELECT sal FROM emp WHERE ename='SMITH');/*注意括号不能省略*/  
    28.   
    29. /*3、列出所有员工的姓名及其直接上级的姓名。*/  
    30. SELECT e.ename,m.ename FROM emp e,emp m WHERE e.mgr = m.empno;  
    31.   
    32. /*4、列出受雇日期早于其直接上级的所有员工。*/  
    33. SELECT e.empno,e.ename,m.empno, e.hiredate,m.hiredate FROM emp e,emp m WHERE e.mgr = m.empno AND e.hiredate < m.hiredate;  
    34. select a.ename from emp a where a.hiredate<(select hiredate from emp b where b.empno=a.mgr);  
    35.   
    36.   
    37. /*5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门*/  
    38.  SELECT d.dname,e.empno,e.ename,e.job,e.hiredate,e.sal FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno;  
    39.  select a.dname,b.empno,b.ename,b.job,b.mgr,b.hiredate,b.sal,b.deptno from dept a left join emp b on a.deptno=b.deptno;   
    40.   
    41. /*6、列出所有“CLERK”(办事员)的姓名及其部门名称。*/  
    42. SELECT e.ename,d.dname FROM emp e ,dept d WHERE e.deptno = d.deptno AND e.job = 'CLERK';  
    43. select a.ename,b.dname from emp a join dept b on a.deptno=b.deptno and a.job='CLERK';     
    44.   
    45. /*7、列出最低薪金大于1500的各种工作。*/  
    46. SELECT DISTINCT(e.job) FROM emp e group by job HAVING MIN(e.sal)>1500;  
    47.   
    48. /*8、列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。*/  
    49. SELECT e.ename FROM emp e JOIN dept d ON e.deptno = d.deptno AND d.dname='SALES';  
    50. SELECT e.ename FROM emp e,dept d WHERE e.deptno = d.deptno AND d.dname='SALES';  
    51. select ename from emp where deptno=(select deptno from dept where dname='SALES');   
    52.   
    53. /*9、列出薪金高于公司平均薪金的所有员工。*/  
    54. SELECT ename FROM emp WHERE sal > sum(sal);  
    55.   
    56. /*10、列出与“SCOTT”从事相同工作的所有员工。*/  
    57. SELECT ename FROM emp WHERE job = (SELECT job FROM emp WHERE ename='SCOTT'AND ename!='SCOTT';/*SCOTT不算在内*/  
    58. select ename from emp where job=(select job from emp where ename='SCOTT');  /*SCOTT算在内*/  
    59.   
    60. /*11、列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。*/  
    61. SELECT ename,sal FROM emp WHERE sal IN (SELECT sal FROM emp WHERE deptno=30) AND deptno!=30;  
    62. SELECT ename,sal FROM emp WHERE sal IN (SELECT sal FROM emp WHERE deptno=30) AND deptno<>30;  
    63.   
    64. /*12、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。*/  
    65. SELECT ename,sal FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE deptno=30) AND deptno!=30;/*其实没有必要加 deptno!=30这个条件,因为已经是大于部门30中的最大薪金*/  
    66. select ename,sal from emp where sal>(select max(sal) from emp where deptno=30);  
    67.   
    68. /*13、列出在每个部门工作的员工数量、平均工资和平均服务期限。*/  
    69. SELECT COUNT(empno),SUM(sal)/COUNT(empno),AVG((SYSDATE-hiredate)/365) FROM emp GROUP BY(deptno);    
    70. SELECT COUNT(empno),AVG(sal),AVG((SYSDATE-hiredate)/365) FROM emp GROUP BY(deptno);  
    71.   
    72. /*14、列出所有员工的姓名、部门名称和工资。*/  
    73. SELECT e.ename,d.dname,e.sal FROM emp e, dept d WHERE e.deptno=d.deptno;  
    74. SELECT e.ename,d.dname,e.sal FROM emp e JOIN dept d ON e.deptno=d.deptno;  
    75. select a.ename,(select b.dname from dept b where b.deptno=a.deptno) as deptname,sal from emp a  
    76.   
    77. /*15、列出所有部门的详细信息和部门人数。*/  
    78. SELECT d.deptno,d.dname,d.loc, (SELECT COUNT(empno) from emp e WHERE e.deptno = d.deptno GROUP BY e.deptno) as emp_count FROM dept d;  
    79.   
    80. /*16、列出各种工作的最低工资。*/  
    81. SELECT job, MIN(sal) FROM emp GROUP BY job;  
    82. SELECT job, MIN(sal),MAX(sal),AVG(sal) FROM emp GROUP BY job;/*查看最低、最高、平均工资*/  
    83.   
    84. /*17、列出各个部门的MANAGER(经理)的最低薪金。*/  
    85. SELECT deptno, MIN(sal) FROM (SELECT sal,deptno FROM emp WHERE job='MANAGER'GROUP BY deptno;  
    86. SELECT deptno, MIN(sal),MAX(sal),AVG(sal) FROM (SELECT sal,deptno FROM emp WHERE job='MANAGER'GROUP BY deptno;/*查看最低、最高、平均工资*/  
    87. select deptno,min(sal) from emp where job='MANAGER' group by deptno;  
    88.   
    89. /*18、列出所有员工的年工资,按年薪从低到高排序。*/  
    90. SELECT ename,12*(sal+NVL(comm,0)) AS year_sal FROM emp ORDER BY year_sal;/*NVL(variable,x,)表示当变量variable为NULL的时候用x来替代*/  
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值