SQL查询练习(2)

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

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
-- 说明不会抱错,这儿存在隐式数据类型的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnlxj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值