Oracle SQL:经典查询练手第二篇

本文与大家共同讨论与分享ORACLE SQL的一些常用经典查询,欢迎大家补充,同时你认为有那些经典的也可分享出来。在本文中,对每一个问题,你要是认为有什么更好的解决方法也欢迎你及时提出。交流与分享才能共同进步嘛,感谢!

接上一篇Oracle SQL:经典查询练手第一篇

本篇相对上篇来说比较简单,如果你对本篇的各测试做得不称心如意的话,我想你是时候给自己充下电了!

本文使用的实例表结构与表的数据如下:

scott.emp员工表结构如下:

  1. SQL> DESC SCOTT.EMP;  
  2. Name     Type         Nullable Default Comments   
  3. -------- ------------ -------- ------- --------   
  4. EMPNO    NUMBER(4)                     员工编号    
  5. ENAME    VARCHAR2(10) Y                员工姓名    
  6. JOB      VARCHAR2(9)  Y                职位       
  7. MGR      NUMBER(4)    Y                上级编号    
  8. HIREDATE DATE         Y                雇佣日期    
  9. SAL      NUMBER(7,2)  Y                薪金       
  10. COMM     NUMBER(7,2)  Y                佣金       
  11. DEPTNO   NUMBER(2)    Y                所在部门编号  
  12. --提示:工资 = 薪金 + 佣金 

scott.dept部门表

  1. SQL> DESC SCOTT.DEPT;  
  2. Name   Type         Nullable Default Comments   
  3. ------ ------------ -------- ------- --------   
  4. DEPTNO NUMBER(3)                     部门编号    
  5. DNAME  VARCHAR2(14) Y                部门名称    
  6. LOC    VARCHAR2(13) Y                地点  

scott.emp表的现有数据如下:

  1. SQL> SELECT * FROM SCOTT.EMP;  
  2.    
  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  4. ----- ---------- --------- ----- ----------- --------- --------- ------  
  5.  7369 SMITH      CLERK      7902 1980-12-17     800.00               20  
  6.  7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30  
  7.  7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30  
  8.  7566 JONES      MANAGER    7839 1981-4-2      2975.00               20  
  9.  7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30  
  10.  7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30  
  11.  7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10  
  12.  7788 SCOTT      ANALYST    7566 1987-4-19     4000.00               20  
  13.  7839 KING       PRESIDENT       1981-11-17    5000.00               10  
  14.  7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30  
  15.  7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20  
  16.  7900 JAMES      CLERK      7698 1981-12-3      950.00               30  
  17.  7902 FORD       ANALYST    7566 1981-12-3     3000.00               20  
  18.  7934 MILLER     CLERK      7782 1982-1-23     1300.00               10  
  19.   102 EricHu     Developer  1455 2011-5-26 1   5500.00     14.00     10  
  20.   104 huyong     PM         1455 2011-5-26 1   5500.00     14.00     10  
  21.   105 WANGJING   Developer  1455 2011-5-26 1   5500.00     14.00     10  
  22.    
  23. 17 rows selected  

Scott.dept表的现有数据如下:

  1. SQL> SELECT * FROM SCOTT.DEPT;  
  2.    
  3. DEPTNO DNAME          LOC  
  4. ------ -------------- -------------  
  5.    110 信息科         海口  
  6.     10 ACCOUNTING     NEW YORK  
  7.     20 RESEARCH       DALLAS  
  8.     30 SALES          CHICAGO  
  9.     40 OPERATIONS     BOSTON  
  10.     50 50abc          50def  
  11.     60 Developer      HaiKou  
  12.    
  13. rows selected  

用SQL完成以下问题列表:

  1. 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名。
  2. 找出EMP表员工名字中含有A 和N的员工姓名。
  3. 找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,佣金从大到小。
  4. 列出部门编号为20的所有职位。
  5. 列出不属于SALES 的部门。
  6. 显示工资不在1000 到1500 之间的员工信息:名字、工资,按工资从大到小排序。
  7. 显示职位为MANAGER 和SALESMAN,年薪在15000 和20000 之间的员工的信息:名字、职位、年薪。
  8. 说明以下两条SQL语句的输出结果:
    1. SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;  
    2. SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL
  9. 让SELECT 语句的输出结果为
    1. SELECT * FROM SALGRADE;  
    2. SELECT * FROM BONUS;  
    3. SELECT * FROM EMP;  
    4. SELECT * FROM DEPT;  
    5. ……

    列出当前用户有多少张数据表,结果集中存在多少条记录。 

  10. 判断SELECT ENAME,SAL FROM EMP WHERE SAL > ‘1500’是否抱错,为什么?

#p#

各试题解答如下(欢迎大家指出不同的方法或建议!):

  1. --------1. 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名。---------  
  2. SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '__A%';  
  3.    
  4. ENAME  
  5. ----------  
  6. ADAMS  
  7. BLAKE  
  8. CLARK 
  1. -------2. 找出EMP表员工名字中含有A 和N的员工姓名。----------  
  2. SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '%A%' AND ENAME LIKE '%N%';  
  3.    
  4. ENAME  
  5. ----------  
  6. ALLEN  
  7. MARTIN  
  8. WANGJING  
  9. --------或--------  
  10. SQL> SELECT ENAME FROM SCOTT.EMP WHERE ENAME LIKE '%A%N%';  
  11.    
  12. ENAME  
  13. ----------  
  14. ALLEN  
  15. MARTIN  
  16. WANGJING 
  1. /*--------3. 找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,  
  2. 佣金从大到小。----------*/  
  3. SQL> SELECT ENAME,SAL + COMM AS WAGE,COMM  
  4.   2  FROM SCOTT.EMP  
  5.   3  ORDER BY WAGE,COMM DESC;  
  6.    
  7. ENAME            WAGE      COMM  
  8. ---------- ---------- ---------  
  9. TURNER           1500      0.00  
  10. WARD             1750    500.00  
  11. ALLEN            1900    300.00  
  12. MARTIN           2650   1400.00  
  13. EricHu           5514     14.00  
  14. WANGJING         5514     14.00  
  15. huyong           5514     14.00  
  16. SMITH                   
  17. JONES                   
  18. JAMES                   
  19. MILLER                  
  20. FORD                    
  21. ADAMS                   
  22. BLAKE                   
  23. CLARK                   
  24. SCOTT                   
  25. KING                    
  26.    
  27. 17 rows selected 
  1. -------4. 列出部门编号为20的所有职位。----------  
  2. SQL> SELECT DISTINCT JOB FROM EMP WHERE DEPTNO = 20;  
  3.    
  4. JOB  
  5. ---------  
  6. ANALYST  
  7. CLERK  
  8. MANAGER 
  1. -------5. 列出不属于SALES 的部门。----------  
  2. SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME <> 'SALES';  
  3.    
  4. DEPTNO DNAME          LOC  
  5. ------ -------------- -------------  
  6.     10 ACCOUNTING     NEW YORK  
  7.     20 RESEARCH       DALLAS  
  8.     40 OPERATIONS     BOSTON  
  9.     50 50abc          50def  
  10.     60 Developer      HaiKou  
  11.    110 信息科         海口  
  12.    
  13. rows selected  
  14.  
  15. --或者:  
  16. SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME != 'SALES';  
  17. SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME NOT IN('SALES');  
  18. SQL> SELECT DISTINCT * FROM SCOTT.DEPT WHERE DNAME NOT LIKE 'SALES'
  1. ---6. 显示工资不在1000 到1500 之间的员工信息:名字、工资,按工资从大到小排序。---------  
  2. SQL> SELECT ENAME,SAL + COMM AS WAGE FROM SCOTT.EMP  
  3.   2  WHERE SAL + COMM NOT BETWEEN 1000 AND 1500  
  4.   3  ORDER BY WAGE DESC;  
  5.    
  6. ENAME            WAGE  
  7. ---------- ----------  
  8. EricHu           5514  
  9. huyong           5514  
  10. WANGJING         5514  
  11. MARTIN           2650  
  12. ALLEN            1900  
  13. WARD             1750  
  14.    
  15. rows selected  
  16. --或者  
  17. SQL> SELECT ENAME,SAL + COMM AS WAGE FROM SCOTT.EMP  
  18.   2  WHERE SAL + COMM < 1000 OR SAL + COMM > 1500  
  19.   3  ORDER BY WAGE DESC;  
  20.    
  21. ENAME            WAGE  
  22. ---------- ----------  
  23. EricHu           5514  
  24. huyong           5514  
  25. WANGJING         5514  
  26. MARTIN           2650  
  27. ALLEN            1900  
  28. WARD             1750  
  29.    
  30. rows selected 

#p#
 

  1. /*----- 7. 显示职位为MANAGER 和SALESMAN,年薪在15000 和20000 之间的员工的信息:名字、职位、年薪。----------*/  
  2. SQL> SELECT ENAME 姓名,JOB 职位,(SAL + COMM) * 12 AS 年薪  
  3.   2  FROM SCOTT.EMP  
  4.   3  WHERE (SAL + COMM) * 12 BETWEEN 15000 AND 20000  
  5.   4  AND JOB IN('MANAGER','SALESMAN');  
  6.    
  7. 姓名       职位              年薪  
  8. ---------- --------- ----------  
  9. TURNER     SALESMAN       18000 
  1. /*----- 8. 说明以下两条SQL语句的输出结果:  
  2.     SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;  
  3.     SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL;  
  4. ----------*/  
  5. SQL> SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;  
  6.    
  7. EMPNO      COMM  
  8. ----- ---------  
  9.  7369   
  10.  7566   
  11.  7698   
  12.  7782   
  13.  7788   
  14.  7839   
  15.  7876   
  16.  7900   
  17.  7902   
  18.  7934   
  19.    
  20. 10 rows selected  
  21.  
  22. ---------------------------------------------------------------  
  23. SQL> SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL;  
  24.    
  25. EMPNO      COMM  
  26. ----- ---------  
  27.  
  28. --说明:IS NULL是判断某个字段是否为空,为空并不等价于为空字符串或为数字0;  
  29. --而 =NULL 是判断某个值是否等于 NULL,NULL = NULL和NULL <> NULL都为 FALSE。 

 

  1. ---10. 语句SELECT ENAME,SAL FROM EMP WHERE SAL > '1500'是否抱错?---------  
  2. SQL> SELECT ENAME,SAL FROM EMP WHERE SAL > '1500';  
  3.    
  4. ENAME            SAL  
  5. ---------- ---------  
  6. ALLEN        1600.00  
  7. JONES        2975.00  
  8. BLAKE        2850.00  
  9. CLARK        2450.00  
  10. SCOTT        4000.00  
  11. KING         5000.00  
  12. FORD         3000.00  
  13. EricHu       5500.00  
  14. huyong       5500.00  
  15. WANGJING     5500.00  
  16.    
  17. 10 rows selected  
  18.    
  19. SQL> SELECT ENAME,SAL FROM EMP WHERE SAL > 1500;  
  20.    
  21. ENAME            SAL  
  22. ---------- ---------  
  23. ALLEN        1600.00  
  24. JONES        2975.00  
  25. BLAKE        2850.00  
  26. CLARK        2450.00  
  27. SCOTT        4000.00  
  28. KING         5000.00  
  29. FORD         3000.00  
  30. EricHu       5500.00  
  31. huyong       5500.00  
  32. WANGJING     5500.00  
  33.    
  34. 10 rows selected  
  35. --说明不会抱错,这儿存在隐式数据类型的。  
  1. /*-----9. 让SELECT 语句的输出结果为  
  2.     SELECT * FROM SALGRADE;  
  3. SELECT * FROM BONUS;  
  4. SELECT * FROM EMP;  
  5. SELECT * FROM DEPT;  
  6. ……  
  7. 列出当前用户有多少张数据表,结果集中存在多少条记录。  
  8. ----------*/  
  9.  
  10. SQL> SELECT 'SELECT * FROM '||TABLE_NAME||';' FROM USER_TABLES;  
  11.    
  12. 'SELECT*FROM'||TABLE_NAME||';' 
  13. ---------------------------------------------  
  14. SELECT * FROM BONUS;  
  15. SELECT * FROM EMP;  
  16. SELECT * FROM DEPT;  
  17. --......等等,在此不列出。 

 

 

原文链接:http://www.cnblogs.com/huyong/archive/2011/06/16/2082581.html

【编辑推荐】

  1. PL/SQL开发中动态SQL的使用与过程分页
  2. 详解Oracle的几种分页查询语句
  3. Oracle分页小谈
  4. 简单说说Oracle分区
  5. Oracle数据库日常维护知识总结

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/229681.html<

(0)
管理的头像管理
上一篇2025-04-18 21:25
下一篇 2025-04-18 21:28

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注