当前位置:数据库 > Oracle >>

一个菜鸟的oracle之路--------二(续)

一个菜鸟的oracle之路--------二(续)
 
案例16  哪些员工的奖金不是400,500,1000,也不为空。
 
[sql] 
select ename,bonus from emp_xxx  
      where bonus not in(400,1000) or bonus is  null;  
 
    //用not in 进行比较时,集合中不能包含null値,若包含
    //则会出现no rows selected
//显示每个员工的最后两个字符。
  
[sql] 
select substr(ename,2,2)from emp_xxx;  
  alter session set nls_date_format=  
     'yyyy_mm_dd hh24:mi:ss';  
 
案例17.  case语句
     根据员工的职位,计算加薪后的数据。
     如果职位是Analist,加薪10%
     如果职位是Programmer 加薪5%
     如果职位是clerk,加薪2%
     其他职位       薪水不变
     
[sql] 
select ename,job,  
         case job when 'Analyst' then salary*1.1  
                  when 'Programmer' then salary*1.05  
                  when 'clerk' then salary*1.02  
                  else salary  
                  end new_salary from emp_xxx;  
     select ename,salary,  
         case salary when  <5000 then salary*1.2                                         
                     else salary  
                     end new_salary   
                     from emp_xxx;  
 
      //此处有问题。
    
 
[sql] 
 select ename,salary,  
         case  salary  when  10000 then salary*9                     
         else salary  
         end new_salary  
from emp_xxx;  
 
案例18   decode函数
     decode()函数是oracle中等价于case when语句的函数。
     作用同case相同
     decode 函数语法如下。
     要求和case语句相同
   
 
[sql] 
select ename,decode(job, 'Analyst',salary*1.1,  
                           'Programmer',salary*1.05,  
                           'clerk',salary*1.02,  
                           salary) new_salary from emp_xxx;  
 
案例19    函数的嵌套
      薪水由低到高排序
     
 
[sql] 
select ename,salary from emp_xxx order by salary ;  
 
     也可以这么写:
     select ename,salary from emp_xxx order by salary asc ;
案例20  薪水由高到低排序
    
 
[sql] 
select ename,nvl(salary,100000) from emp_xxx order by salary desc;  
 
案例21  按照入职时间排序,入职时间越早排在前面
   
 
[sql] 
select ename,hiredate from emp_xxx order by hiredate;  
 
案例22  按照部门排序,同一个部门按薪水由高到低排序
    
 
[sql] 
select ename,deptno,salary from emp_xxx order by deptno,salary desc;    
 
案例23  员工表中有多少条记录
    
 
[sql] 
select count(*) from emp_xxx;  
 
      
      数据字典  user_tables
案例24  当前用户下有多少张表
  
 
[sql] 
select count(*) from user_tables;  
 
案例25  openlab账户下有多少包含emp的表
    
 
[sql] 
select count(*) from user_tables where table_name like '%emp%';  
 
案例26  入职时间不是null的数据总数
    
 
[sql] 
select count(hiredate) from emp_xxx;  
 
 
 
  sqlplus 命令
     查看当前用户账户  show user
 
 
 组函数 count() arv() sum() max() min()
      与单行函数round(),to_date() to_char() coalesce()等不同,单行函数
      是每行函数返回一个结果,组函数是多行数据返回一个结果
案例27   计算员工的薪水总和是多少
    
 
[sql] 
select sum(salary) from emp_xxx;  
 
案例28   计算员工的薪水平均值是多少
      
 
[sql] 
select avg(salary) from emp_xxx;  
 
      //注意,薪水为null的情况下不参与平均薪値的计算
      计算员工的人数综合,薪水总和,平均薪水是多少
     
 
[sql] 
select count(*) num ,sum(salary) sum,avg(salary) avg from emp_xxx;  
 
      //薪水平均值=薪水总和/人数总和,avg(salary)=sum(salary)/count(*)
      //avg(salary)只按有薪水的员工人数计算平均值,这样得到的数据不够准确
案例29  计算员工的最高薪水和最低薪水
   
 
[sql] 
select max(salary) 高薪,min(salary) 最低薪 from emp_xxx;  
 
案例30 计算员工最早和最晚入职时间
   
 
[sql] 
select max(hiredate) max_hiredate,min(hiredate) min_hiredate from emp_xxx;  
 
    //此处课件上有错误,max是计算入职时间最晚的,min使计算最早的
    
   分组查询 group by **
案例31  按部门计算每个部门的最高和最低薪水是多少
  
 
[sql] 
select deptno,max(salary),min(salary) from emp_xxx group by deptno;  
 
案例32  计算每个部门的薪水总和和平均薪水
  
 
[sql] 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,