加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

2011-03-12 SQL练习

(2011-03-12 21:01:57)
标签:

sql

杂谈

分类: 数据库

测 试
1. 显示系统时间(取别名为"DATE").
    select to_char(sysdate,'yyyy-mm-dd') "DATE" from dual

2. 查询员工号,姓名,工资(若为NULL则作为0处理),以及工资提高百分之20%后四舍五入到整数的结果(取别名为new salary)
    select empno,ename,nvl(sal,0), round(nvl(sal,0)*1.2) "new salary" from emp

3. 将员工的姓名(取别名为"Name")按字母表先后顺序排序,并写出姓名的长度(取别名为"length")
    select ename "Name",length(ename) from emp order by ename

4. 查询各员工的姓名,并显示出各员工在公司工作了多少个月份(起别名为"worked_month")四舍五入到整数.
   c

5. 查询员工的姓名和工资,按下面的形式显示结果(工资字段必须为15位,空位用$填充)
    姓名 工资
    KING $$$$$$$$$$24000
    MIKE $$$$$$$$$$$4800
    select upper(ename),lpad(sal,15,'$') from emp
   
6.  查询员工的姓名,以及在公司工作满了多少个月(worked_month),并按月份数降序排列
     select ename,trunc(months_between(sysdate,hiredate)) "worked_month" from emp order by   "worked_month"  desc

7. 做一个查询,按下面的形式显示结果
    <ename> earns <sal> monthly but wants <sal*3>
    Dream Salary
    KING earns $24000 monthly but wants $72000
    JONE earns $18000 monthly but wants $54000
    ……………………………………………………
    select upper(ename) ||'  earn  ' ||to_char(sal,'$99999999') ||'  monthly but wants  '||to_char(sal*3,'$99999999') " Dream Salary"
    from emp

8. 做一个查询,按下面的形式显示结果(注意两个日期之间的关系)需要设置语言环境:
  ALTER SESSION SET NLS_LANGUAGE=AMERICAN;
  ENAME HIREDATE 6个月零4天后
  KING 17-JUN-87 MONDAY,   the TWENTY-FIRST of DECEMBER , 1987

  select upper(ename) "ENAME",to_char(hiredate,'dd-MON-yy') "HIREDATE",
         to_char(add_months(hiredate,6)+4,'" the " DDSPTH  " of  MONTH ","  YYYY')   "6个月零4天后"
  from emp

9. 做一个查询,按下面的形式显示结果
Employees_and_their_salarys
King************************
Zhang*******************
Wang*****************
………………………….

其中每一个*代表一千元(四舍五入)。按工资从多到少排序

select rpad(initcap(ename),length(ename)+sal/1000,'*') from emp

 

10. 使用decode函数,按照下面的条件:(根据job类别来确定级别GRADE)
job       grade
AD_PRES     A
ST_MAN     B
IT_PROG     C
SA_REP      D
ST_CLERK        E
…….      OTHER
产生下面的结果:
ENAME Job_id Grade
king AD_PRES A
kate IT_PROG C

  select lower(ename) "ENAME", job "Job_id",decode(job,
                    'CLERK','A',
                    'SALESMAN','B',
                    'MANAGER','C',
                    'ANALYST','D',
                    'PRESIDENT','E',
                    'OTHER')  "Grade"
  from emp                

11. 将上一题的查询用case函数再写一遍。
  select lower(ename) "ENAME", job "Job_id",
                               case job
                               when 'CLERK' then 'A'
                               when 'SALESMAN' then 'B'
                               when 'MANAGER' then 'C'
                               when 'ANALYST' then 'D'
                               when 'PRESIDENT' then 'E'
                               else  'OTHER'
                               end  "Grade"
  from emp

 

***********************************************************************************************

测 试
1. 组函数处理多行返回一行(yes)判断题

 

2. 组函数不计算空值(no)判断题
   
3. where子句在分组之前对检索进行过滤(yes)判断题

 

4. 查询公司员工工资的最大值,最小值,平均值,总和
     select max(sal),min(sal),avg(sal),sum(sal) from emp;

 

5. 查询各job的员工工资的最大值,最小值,平均值,总和
    select job,max(sal),min(sal),avg(sal),sum(sal) from emp group by job

 

6. 选择具有各个job 的员工人数
    select job,count(*) from emp group by job

 

7. 查询员工最高工资和最低工资的差距(DIFFERENCE)
    select max(sal)-min(sal) "DIFFERENCE" from emp

 

8. 查询公司的人数,以及在80,81,82,87年,每年雇用的人数,结果类似下面的格式
    total 1980 1981 1982 1987
    14 10 2
   
    select count(*) "total",
           sum(decode(to_char(hiredate,'yyyy'),1980,1,0)) "1980",
           sum(decode(to_char(hiredate,'yyyy'),1981,1,0)) "1981",
           sum(decode(to_char(hiredate,'yyyy'),1982,1,0)) "1982",
           sum(decode(to_char(hiredate,'yyyy'),1987,1,0)) "1987"
    from emp 
      
   -------------------------------------------------------------------------------
   
    select count(*) from emp where to_char(hiredate,'yyyy')='1980'
   
    select count(*) from emp where to_char(hiredate,'yyyy')='1981'
  
    select hiredate,decode(to_char(hiredate,'yyyy'),1980,1,0) from emp
    select  sum(decode(to_char(hiredate,'yyyy'),1981,1,0)) from emp
    select hiredate,decode(to_char(hiredate,'yyyy'),1982,1,0) from emp
    select hiredate,decode(to_char(hiredate,'yyyy'),1987,1,0) from emp

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有