首页 > 数据库 >[推荐]ORACLE SQL:经典查询练手第二篇(不懂装懂,永世饭桶!)

[推荐]ORACLE SQL:经典查询练手第二篇(不懂装懂,永世饭桶!)

时间:2023-06-13 17:03:15浏览次数:45  
标签:练手 ENAME -- COMM EMP SQL ORACLE SELECT


[推荐]ORACLE SQL

经典查询练手第二篇(不懂装懂,永世饭桶!)

——通过知识共享树立个人品牌。

 

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

 接上一篇:[推荐]ORACLE SQL:经典查询练手第一篇

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



 

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

scott.emp员工表结构如下:

 


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


 

 

 

scott.dept部门表 


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


 

 

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



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



 Scott.dept表的现有数据如下:  SQL >   SELECT   *   FROM  SCOTT.DEPT;
 
DEPTNO DNAME          LOC
-- ---- -------------- -------------
    110  信息科         海口
     10  ACCOUNTING     NEW YORK
     20  RESEARCH       DALLAS
     30  SALES          CHICAGO
     40  OPERATIONS     BOSTON
     50  50abc          50def
     60  Developer      HaiKou
 
7  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语句的输出结果:
SELECT  EMPNO,COMM  FROM  EMP  WHERE  COMM  IS   NULL ;
SELECT  EMPNO,COMM  FROM  EMP  WHERE  COMM  =   NULL ;
9 . 让SELECT 语句的输出结果为
SELECT   *   FROM  SALGRADE;
SELECT   *   FROM  BONUS;
SELECT   *   FROM  EMP;
SELECT   *   FROM  DEPT;
……
列出当前用户有多少张数据表,结果集中存在多少条记录。
10 . 判断SELECT ENAME,SAL  FROM  EMP  WHERE  SAL  >   ' 1500 ' 是否抱错,为什么?   各试题解答如下(欢迎大家指出不同的方法或建议!):  -- ------1. 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名。---------
SQL >   SELECT  ENAME  FROM  SCOTT.EMP  WHERE  ENAME  LIKE   ' __A% ' ;
 
ENAME
-- --------
ADAMS
BLAKE
CLARK

-- -----2. 找出EMP表员工名字中含有A 和N的员工姓名。----------
SQL >   SELECT  ENAME  FROM  SCOTT.EMP  WHERE  ENAME  LIKE   ' %A% '   AND  ENAME  LIKE   ' %N% ' ;
 
ENAME
-- --------
ALLEN
MARTIN
WANGJING
-- ------或--------
SQL >   SELECT  ENAME  FROM  SCOTT.EMP  WHERE  ENAME  LIKE   ' %A%N% ' ;
 
ENAME
-- --------
ALLEN
MARTIN
WANGJING

/* --------3. 找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,
佣金从大到小。---------- */
SQL >   SELECT  ENAME,SAL  +  COMM  AS  WAGE,COMM
   2    FROM  SCOTT.EMP
   3    ORDER   BY  WAGE,COMM  DESC ;
 
ENAME            WAGE      COMM
-- -------- ---------- ---------
TURNER            1500        0.00
WARD              1750      500.00
ALLEN             1900      300.00
MARTIN            2650     1400.00
EricHu            5514       14.00
WANGJING          5514       14.00
huyong            5514       14.00
SMITH                 
JONES                 
JAMES                 
MILLER                
FORD                  
ADAMS                 
BLAKE                 
CLARK                 
SCOTT                 
KING                  
 
17  rows selected

-- -----4. 列出部门编号为20的所有职位。----------
SQL >   SELECT   DISTINCT  JOB  FROM  EMP  WHERE  DEPTNO  =   20 ;
 
JOB
-- -------
ANALYST
CLERK
MANAGER

-- -----5. 列出不属于SALES 的部门。----------
SQL >   SELECT   DISTINCT   *   FROM  SCOTT.DEPT  WHERE  DNAME  <>   ' SALES ' ;
 
DEPTNO DNAME          LOC
-- ---- -------------- -------------
     10  ACCOUNTING     NEW YORK
     20  RESEARCH       DALLAS
     40  OPERATIONS     BOSTON
     50  50abc          50def
     60  Developer      HaiKou
    110  信息科         海口
 
6  rows selected

-- 或者:
SQL >   SELECT   DISTINCT   *   FROM  SCOTT.DEPT  WHERE  DNAME  !=   ' SALES ' ;
SQL >   SELECT   DISTINCT   *   FROM  SCOTT.DEPT  WHERE  DNAME  NOT   IN ( ' SALES ' );
SQL >   SELECT   DISTINCT   *   FROM  SCOTT.DEPT  WHERE  DNAME  NOT   LIKE   ' SALES ' ;

-- -6. 显示工资不在1000 到1500 之间的员工信息:名字、工资,按工资从大到小排序。---------
SQL >   SELECT  ENAME,SAL  +  COMM  AS  WAGE  FROM  SCOTT.EMP
   2    WHERE  SAL  +  COMM  NOT   BETWEEN   1000   AND   1500
   3    ORDER   BY  WAGE  DESC ;
 
ENAME            WAGE
-- -------- ----------
EricHu            5514
huyong            5514
WANGJING          5514
MARTIN            2650
ALLEN             1900
WARD              1750
 
6  rows selected
-- 或者
SQL >   SELECT  ENAME,SAL  +  COMM  AS  WAGE  FROM  SCOTT.EMP
   2    WHERE  SAL  +  COMM  <   1000   OR  SAL  +  COMM  >   1500
   3    ORDER   BY  WAGE  DESC ;
 
ENAME            WAGE
-- -------- ----------
EricHu            5514
huyong            5514
WANGJING          5514
MARTIN            2650
ALLEN             1900
WARD              1750
 
6  rows selected

/* ----- 7. 显示职位为MANAGER 和SALESMAN,年薪在15000 和20000 之间的员工的信息:名字、职位、年薪。---------- */
SQL >   SELECT  ENAME 姓名,JOB 职位,(SAL  +  COMM)  *   12   AS  年薪
   2    FROM  SCOTT.EMP
   3    WHERE  (SAL  +  COMM)  *   12   BETWEEN   15000   AND   20000
   4    AND  JOB  IN ( ' MANAGER ' , ' SALESMAN ' );
 
姓名       职位              年薪
-- -------- --------- ----------
TURNER     SALESMAN        18000

/* ----- 8. 说明以下两条SQL语句的输出结果:
    SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL;
    SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL;
---------- */
SQL >   SELECT  EMPNO,COMM  FROM  EMP  WHERE  COMM  IS   NULL ;
 
EMPNO      COMM
-- --- ---------
  7369  
  7566  
  7698  
  7782  
  7788  
  7839  
  7876  
  7900  
  7902  
  7934  
 
10  rows selected

-- -------------------------------------------------------------
SQL >   SELECT  EMPNO,COMM  FROM  EMP  WHERE  COMM  =   NULL ;
 
EMPNO      COMM
-- --- ---------

-- 说明:IS NULL是判断某个字段是否为空,为空并不等价于为空字符串或为数字0;
-- 而 =NULL 是判断某个值是否等于 NULL,NULL = NULL和NULL <> NULL都为 FALSE。

/* -----9. 让SELECT 语句的输出结果为
    SELECT * FROM SALGRADE;
SELECT * FROM BONUS;
SELECT * FROM EMP;
SELECT * FROM DEPT;
……
列出当前用户有多少张数据表,结果集中存在多少条记录。
---------- */

SQL >   SELECT   ' SELECT * FROM  ' || TABLE_NAME || ' ; '   FROM  USER_TABLES;
 
' SELECT*FROM ' || TABLE_NAME || ' ; '
-- -------------------------------------------
SELECT   *   FROM  BONUS;
SELECT   *   FROM  EMP;
SELECT   *   FROM  DEPT;
-- ......等等,在此不列出。

-- -10. 语句SELECT ENAME,SAL FROM EMP WHERE SAL > '1500'是否抱错?---------
SQL >   SELECT  ENAME,SAL  FROM  EMP  WHERE  SAL  >   ' 1500 ' ;
 
ENAME            SAL
-- -------- ---------
ALLEN         1600.00
JONES         2975.00
BLAKE         2850.00
CLARK         2450.00
SCOTT         4000.00
KING          5000.00
FORD          3000.00
EricHu        5500.00
huyong        5500.00
WANGJING      5500.00
 
10  rows selected
 
SQL >   SELECT  ENAME,SAL  FROM  EMP  WHERE  SAL  >   1500 ;
 
ENAME            SAL
-- -------- ---------
ALLEN         1600.00
JONES         2975.00
BLAKE         2850.00
CLARK         2450.00
SCOTT         4000.00
KING          5000.00
FORD          3000.00
EricHu        5500.00
huyong        5500.00
WANGJING      5500.00
 
10  rows selected
-- 说明不会抱错,这儿存在隐式数据类型的。   © 2011  EricHu原创作品,转贴请注明作者和出处,留此信息。 -----------
 作者:EricHu(DB、C/S、B/S、WebService、WCF、PM等)
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
更多文章请看 [置顶]索引贴——(不断更新中)  


标签:练手,ENAME,--,COMM,EMP,SQL,ORACLE,SELECT
From: https://blog.51cto.com/guosisoft/6471597

相关文章

  • ORACLE常见问题一千问(提供下载)(不怕学不成、就怕心不诚!)
    ORACLE常见问题一千问(提供下载)(不怕学不成、就怕心不诚!)——通过知识共享树立个人品牌。ORACLE常见问题是我收集完成,在此共享出来,一为自己以后好做个参考,二为需要的朋友提供帮助。同时,感谢提供这些相关问题及解决方法的朋友。欢迎大家补充,交流与分享才能共同进步嘛,感谢!后附电子版下......
  • [推荐]ORACLE SQL:经典查询练手第五篇(不懂装懂,永世饭桶!)
    [推荐]ORACLESQL:经典查询练手第五篇(不懂装懂,永世饭桶!) ——通过知识共享树立个人品牌。 本文与大家共同讨论与分享ORACLESQL的一些常用经典查询,欢迎大家补充,同时你认为有那些经典的也可分享出来。在本文中,对每一个问题,你要是认为有什么更好的解决方法也欢迎你及时提出。交流与......
  • [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
    [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)——通过知识共享树立个人品牌。继上六篇:       [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)      [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不......
  • 记录一段mysql代码
    SELECTf.*,tmp.userid,tmp.cishuFROMfx_userf,(SELECTa.id,b.useridASuserid,COUNT(*)AScishuFROM`fx_user`ASaLEFTJOIN`fx_plan`ASbONa.id=b.useridANDb.fxtype=0GROUPBYa.id)tmpWHEREf.id=tmp.idANDpriority=1ORDERBYid......
  • RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增记录SQL执行过程
    有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件。3.2版本我们在框架底层新增了记录框架运行的所有SQl过程保存到用户指定的地方以便分析查看,只需要在配置文件把配置项”LogSQL”设置为Tr......
  • SQLServer低版本附加高版本的数据库常用处理方法
    SqlServer低版本数据库不能直接还原或附加Sql高版本数据库或备份文件,我们常用DTS互导的方式,如果不同版本数据库不可访问,可以使用高版本数据库的DTS导出整个库的相应低版本建库脚本与数据,然后放在低版本数据库中去执行,常见如:我们库数据库一般是SqlServer2008+,有的客户使用的是2005版......
  • [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
    [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)——通过知识共享树立个人品牌。继上六篇:       [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)      [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不......
  • C#连接MySql数据库的方法
     用MySQLDriverCS连接MySQL数据库   先下载和安装MySQLDriverCS,地址:   http://sourceforge.net/projects/mysqldrivercs/   在安装文件夹下面找到MySQLDriver.dll,然后将MySQLDriver.dll添加引用到项目中   注:我下载的是版本是MySQLDriverCS-n-EasyQueryTools-4.0......
  • 经典SQL语句大全
    经典SQL语句大全下列语句部分是Mssql语句,不可以在access中使用。SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)首先,简要介绍基础语句:......
  • Sql 视图
    1.定义:视图是由多张实体表联合查询后,组成的一张不含任何数据的虚拟表,存在表名,字段列。2.为什么使用视图:视图保存的是select语句,可以简化用户操作,将频繁使用的查询语句保存成视图,可以不用每次都重新写Sql语句。在创建好视图后,可以将视图和其他实体表一样,用Select语句进行查询数据......