Oreacle函数-续

模糊查询:
关键字:like 
 通配符: %:表示0到多个字符
         _:表示一个字符   
1练习:第三个姓名为N      
 select  * from emp where job LIKE '_ _N%';
 --练习:10,20部门中,名字有E,L的
 select *  from emp  where  deptno  in(10,20)  and (ename LIKE '%E%L%' or ename like '%L%E%');
 --练习:10,20部门中,有E或L的姓名
 select *  from emp  where  deptno  in(10,20) and  (ename LIKE '%E%' or ename like '%E%');

--2:条件中可以使用表达式或函数
--练习:查询年薪大于20000的员工信息
  select * from emp where SAL*12>20000
--练习:查看姓名叫jones的员工  不区分大小写
  select job,sal from emp where lower(ename)='jones';
  
 --练习:姓名 长度大于5
  select * from emp where ename like '_ _ _ _ _%'

  select * from emp where  length(ename) >5 

3.排序:也是查询语句中的一个子句

    位置:一定要放在查询语句的最后
    用法:order by colName列名
    升序:asc,默认不写
    降序:desc
  按照一个字段进行排序: order by colName  asc/desc
   排序时,null为最大值,理解为无穷大。
   按照两个字段排序:
        逻辑:先按照第一个字段排序,当值一样时,才会按照第二个字段排序
        每个字段都有自己的排序规则。
       reg: order by colName asc,colName 
   --练习:查询所有员工信息,按照月薪的降序排序
           select * from  emp  order by sal desc
   --练习:查看10和20部门的姓名,部门号,月薪,奖金,按照奖金升序排序
           select deptno,sal,comm from emp where deptno in (10,20) order by comm asc
   --工资升序,奖金降序
           select * from emp order by sal asc,comm desc;
  4.去重
      去掉重复的数据,显示一次(过滤掉重复的数据) 
       关键字:distinct(col)
       用法L:此关键字
  --练习:查看员工表部门号,按照部门号升序排序
              select distinct(deptno) from emp order by deptno;
  --练习:按照职位降序排序
          select distinct(job) from emp order by length(job) desc;
  --练习:按照奖金降序排序
          select distinct(comm) from emp order by comm desc;
  5 聚合函数
        需求:查看员工表中最高月薪
              查看每个部门的平均工资
              所要的数据,表中无法直接体现,需要经过计算
              需要统计多条记录,然后显示成一条记录。
      这时就需要使用聚合函数,也叫多行函数,分组函数
        max()/min()
        max():查看每一组中最大值 
        min():每一组中数据最小值
   -- 练习:查看员工最高月薪和最低月薪
            select  max(sal),min(sal) from emp
  --练习:统计员工表中最高年收入,最低奖金
            select  max((sal+nvl(comm,0))*12),min(nvl(comm,0)) from emp
            select  max((sal+nvl(comm,0))*12),min(comm),max(comm) from emp
            select max ((sal+ comm )*12),min(comm),max(comm) from emp
    
  **所有的聚合函数都忽略空值
 1 --sum()每一组数据的和
           --练习:计算月薪,奖金的总和,月薪的最大值
              select sum(sal),sum(comm),max(sal) from emp
  --练习:计算员工表中的平均月薪
              select  sum(sal)/14 from emp
 2--avg()求每一组数据的平均值 必须要有nvl(_)
              通常都要进行nvl(,0)
  --练习:查看员工表中平均奖金
              select avg(nvl(comm,0)) from emp
  --练习:查看员工表平均奖金  
             select  sum(comm)/14 from emp
             select avg(sal) from emp == select  sum(sal)/14 from emp
              select avg(nvl(comm,0)) from emp==select  sum(comm)/14 from emp
  --练习:统计员工的年收入的平均数
          select sum((sal+nvl(comm,0))*12)/12 from emp
 3 ---count():  
      统计每一组中的数据记录数,就是有多少行
      通配符 * 可以代替任意字段。可以统计总记录数
  --练习:统计员工表中月薪个数
     select  count(sal) from emp 
  --练习:统计员工表中奖金个数
     select count(comm) from emp
  --练习:统计员工表中人数
    select count(nvl(comm,0)) from emp
4   group by子句:
      作用是通过字段进行分组。字段值一样的为一组。
      用法:group by colNamee
   --练习:查看每个部门的最高月薪,最低月薪,平均月薪,平均奖金,总人数
    select deptno,max(sal),min(sal),avg(nvl(comm,0)),avg(nvl(sal,0)),count(*) from emp group by deptno
    ***分组查询时,只有分组字段可以放在select子句中
    练习:查看每组职位的最高月薪,平均月薪
      select  job,max(sal),avg(nvl(sal,0)) from emp group by job
    练习:按照部门和职位进行分组,查看最高工资,平均奖金
      select deptno,job,max(sal),avg(nvl(comm,0)) from emp group by deptno,job
 5   having子句  过滤
  --练习:查看部门平均工资大于2000的部门号
   select  deptno,avg(nvl(sal,0)) avg_sal from emp group by deptno having avg(nvl(sal,0)) >2000
  --练习:查看部门最高月薪大于3000的部门
  select deptno,max(sal) max_sal from emp group by deptno having max(sal)>3000
注意:判断的话,聚合函数要用having





















猜你喜欢

转载自blog.csdn.net/xiaozelulu/article/details/80238408