zoukankan      html  css  js  c++  java
  • 数据库——Oracle(3)

    1 排序:对查询返回的结果,根据某一个列或者某几个列的列值大小进行升序或者降序排列。
      1)根据某一个列的列值大小进行升序或者降序排列
        格式:
          select 列名/* from 表名
          order by 列名 asc/desc
          asc: 升序 ,默认值
          desc:降序
        案例:查询emp表中员工的编号,姓名,职位,工资,奖金,最后根据员工的编号进行降序排列
          select empno,ename,job,sal,comm
          from emp
          order by empno desc
        案例:查询emp表中员工的姓名,职位,工资,所在部门的编号,最后根据工资进行升序排列
          select ename,job,sal,deptno
          from emp
          order by sal
        案例:查询emp表中员工的姓名,上级领导编号,入职时间,以及职位,最后根据入职时间进行升序排列。
          select ename,mgr,hiredate,job
          from emp
          order by hiredate asc
        案例:查询emp表中员工的编号,姓名,职位以及所在部门的编号,最后根据部门编号进行降序排列
          select empno,ename,job,deptno
          from emp
          order by deptno desc

      2) 根据两个列的列值大小进行排序
        格式:
          select */列名 from 表名
          order by 列名1 asc/desc,列名2 asc/desc
        分析:首先根据列名1中的列值大小进行升序或者降序排列,如果列名1中列值大小一致,根据列名2中的列值大小进行升序或者降序排列。
        案例:查询emp表中员工的编号,姓名,职位,以及员工所在部门的编号,最后根据部门编号进行升序排列,如果部门编号一致,根据员工的编号进行降序排列
          select empno,ename,job,deptno
          from emp
          order by deptno asc , empno desc
        案例:查询emp表中员工的姓名,职位,工资,奖金以及入职时间,最后根据工资进行升序排列,如果工资一致根据入职时间也进行升序排列
          select ename,job,sal,comm,hiredate
          from emp
          order by sal ,hiredate asc


    2 nvl()函数:
      1)数字类型的数据可以进行算术运算
        案例:查询emp表中员工的编号,姓名,工资,以及年薪
          年薪 = 工资 * 12
          select empno,ename,sal,sal*12 年薪
          from emp
        案例:查询emp表中员工的编号,姓名,工资,奖金以及年薪
          年薪 = 工资*12+奖金
          select empno,ename,sal,comm,sal*12+comm 年薪
          from emp
      2)使用+连接null和数字返回的结果也为null
      3)nvl()函数:
        nvl(列名,数值):如果列中列值不为null,返回该列的列值;反之如果该列中列值为null,返回数值。
        nvl(comm,0): 如果奖金不为null,返回奖金的值;反之如果奖金为null,返回0.
        案例:查询emp表中员工的姓名,职位,工资,奖金以及年薪
          年薪 = 工资 * 12 + 奖金

    3 带条件的查询语句
      格式:
        select */列名 from 表名
        where 条件
        order by 列名 asc/desc
      1) 关系运算符:>,>=,<,<=,=(等于),!=(不等于),<>(不等于)
        select * from emp
        where empno = 7499
        案例:查询emp表中名字是'KING'的编号,姓名,职位,工资,以及入职时间
          select empno,ename,job,sal,hiredate
          from emp
          where ename = 'KING'
        案例:查询emp表中工资高于2000的所有员工的编号,姓名,职位,工资
          select empno,ename,job,sal
          from emp
          where sal > 2000
        案例:查询emp表中职位是MANAGER的员工的所有信息
          select * from emp
          where job = 'MANAGER'
        案例:查询emp表中工资不是3000的员工的姓名,职位,工资(两种写法)
          select ename,job,sal from emp
          where sal <> 3000
          select ename,job,sal from emp
          where sal != 3000
      2) 列名 is null : 判断该列的列值是否为null
        案例:查询emp表中奖金为null的员工的编号,姓名,奖金
          select empno,ename,comm from emp
          where comm is null
        案例:查询emp表中没有上级领导的员工的编号,姓名,工资,职位以及上级领导编号
          select empno,ename,sal,job,mgr from emp
          where mgr is null
          列名 is not null :判断该列的列值不为null
        案例:查询emp表中奖金不为null 的员工的编号,姓名,职位,工资,奖金,根据奖金进行升序排列
          select empno,ename,job,sal,comm
          from emp
          where comm is not null
          order by comm asc
        案例: 查询emp表中含有上级领导的所有员工的编号,姓名,职位,领导编号,以及入职时间,最后根据入职时间进行降序排列
          select empno,ename,job,mgr,hiredate
          from emp
          where mgr is not null
          order by hiredate desc
      3) like:模糊查询
        %:指代任意0或者多个字符
        _: 指代任意的一个字符
        案例:查询emp表中姓名以S开头的所有员工的姓名,职位
        分析:以'S'开头,'S'的后面可能有字母也可能没有字母 S%
          select ename,job from emp
          where ename like 'S%'
        案例:查询emp表中姓名以S结尾的员工的姓名
          select ename from emp
          where ename like '%S'
        案例:查询emp表中名字以K开头员工的所有信息
          select * from emp
          where ename like 'K%'
        案例:查询emp表中名字包含K的员工的姓名
        分析:包含K
          第1种可能:以K开头 K%
          第2种可能:以K结尾 %K
          第3种可能:K在姓名中间 %K%
          %K%所有的可能
            select ename from emp
            where ename like '%K%'
        案例:查询emp表中名字的倒数第2个字母N的员工的姓名
        分析:倒数第2个字母N,N的后面一定有一个字母(_),在N的前面可能有也可能没有字母(%) %N_
          select ename from emp
          where ename like '%N_'
        案例:查询emp表中名字的倒数第3个字母A的员工的姓名
          select ename from emp
          where ename like '%A__'

          not like
        案例:查询emp表中名字不是以K开头的员工姓名
          select ename from emp
          where ename not like 'K%'
        案例:查询emp表中不包含K的所有员工的编号,姓名,最后根据员工的编号进行降序排列
          select empno,ename from emp
          where ename not like '%K%'
          order by empno desc
        案例:查询emp表中名字的倒数第2个字母不是L所有员工的信息,最后根据入职时间进行升序排列
          select * from emp
          where ename not like '%L_'
          order by hiredate
      4) 逻辑运算符:and , or ,not
        a) and : 并且,连接并且关系的表达式
          案例:查询工资在1000~3000之间所有员工的编号,姓名,职位,工资,入职时间
            select empno,ename,job,sal,hiredate
            from emp
            where sal >= 1000 and sal <= 3000
          案例:查询emp表中没有奖金并且职位是MANAGER的员工的编号,姓名,职位,工资,奖金,最后根据编号进行升序排序。
            select empno,ename,job,sal,comm
            from emp
            where comm is null and job = 'MANAGER'
            order by empno asc
          案例:查询emp表中名字中不包含S并且工资高于1000的所有员工的编号,姓名,职位,工资,以及入职时间,最后根据入职时间进行降序排列
            select empno,ename,job,sal,hiredate
            from emp
            where ename not like '%S%' and sal > 1000
            order by hiredate desc
      2) or: 或者,用来连接多个或者关系的表达式
        案例:查询emp表中工资高于1000,或者奖金不为null的员工的姓名,职位,工资,奖金,最后根据工资降序排列
          select ename,job,sal,comm from emp
          where sal > 1000 or comm is not null
          order by sal desc
        案例:查询emp表中职位不是PRESIDENT或者姓名中的倒数最后一个字母不是S的员工的编号,姓名,职位
          select empno,ename,job from emp
          where job != 'PRESIDENT' or ename not like '%S'
        案例:查询emp表中没有上级领导或者职位是SALESMAN的员工的编号,姓名,职位,上级领导编号,入职时间,最后根据员工编号进行升序排列。
          select empno,ename,job,mgr,hiredate from emp
          where mgr is null or job = 'SALESMAN'
          order by empno asc
      3) not : 取反
        案例:查询emp表中员工的编号不是7369的员工的所有信息
          select * from emp where empno!=7369
          select * from emp where empno<>7369
          select * from emp
          where not empno = 7369
        案例:查询emp表中工资不是5000的员工的编号,姓名,职位,工资
          select empno,ename,job,sal from emp
          where not sal = 5000

    4 聚合函数(分组函数):count(),sum(),avg(),max(),min()
      1) count(*/列名):*,统计表中数据的总条数;列名,统计该列的列值不为null的数据的条数
        案例:查询emp表中员工的总个数
          select count(*) from emp
        案例:查询emp表中含有上级领导的员工的个数
          select count(mgr) from emp
        案例:查询emp表中员工职位种类个数
          select count(distinct job) from emp
        案例:查询emp表中员工所在部门个数
          select count(distinct deptno) from emp
        案例:查询emp表中含有奖金的员工的个数
          select count(comm) from emp
      2) sum(列名):统计该列的列值总和
        案例:查询emp表中员工工资的总和
          select sum(sal) from emp
        案例:查询emp表中员工奖金的总和
          select sum(comm) from emp
      3) avg(列名):统计该列的平均值
        案例:查询emp表中员工的平均工资
          select avg(sal) from emp
        案例:查询emp表中员工的平均奖金
          select avg(comm) from emp
      4) max(列名):统计该列的最大值
        select max(empno) from emp
        案例:查询emp表中员工最高工资和奖金
          select max(sal),max(comm) from emp
      5) min(列名):统计该列的最小值
        案例:查询emp表中员工编号的最小值
          select min(empno) from emp
        案例:查询emp表中员工最低工资和最低奖金
          select min(sal) 最低工资,min(comm) 最低奖金
          from emp
        案例:查询emp表中员工的总人数,工资的总和,平均工资,最高工资以及最低工资,对查询返回列都起别名。
          select count(*) 总人数,sum(sal) 工资总和,avg(sal) 平均工资,max(sal) 最高工资,min(sal) 最低工资
          from emp

    5 group by :分组,根据某一个列把数据分成几组,对每一组数据使用聚合函数。
      1)格式:
        select 列名/聚合函数
        from 表名
        where 条件
        group by 列名
        order by 列名/别名/聚合函数 asc/desc
      2)分析:首先根据where条件进行过滤,然后对过滤后的数据使用group by进行分组,之后对每一组的数据使用聚合函数,最后使用order by进行排序
        案例:查询emp表中每个部门的编号,人数,工资总和,平均工资,最后根据工资总和进行降序排列
          select deptno,count(*),sum(sal) 工资总和,avg(sal) 平均工资
          from emp
          group by deptno
          order by 工资总和 desc

          select deptno,count(*),sum(sal),avg(sal)
          from emp
          group by deptno
          order by sum(sal) desc

        案例:查询员工在20号部门或者工资高于2000的信息,根据部门进行分组,求出每个部门编号,人数,平均工资和最低工资,最后根据人数进行升序排列
          select deptno,count(*),avg(sal),min(sal)
          from emp
          where deptno = 20 or sal>2000
          group by deptno
          order by count(*) asc

        案例:查询emp表中含有上级领导并且职位不是MANAGER的员工,以职位分组,查询每一个职位名称,人数,平均工资,最低和最高工资,最后根据人数进行升序排列,如果人数一致根据最高工资进行降序排列
          select job,count(*),avg(sal),min(sal),max(sal)
          from emp
          where mgr is not null and job != 'MANAGER'
          group by job
          order by count(*) asc,max(sal) desc

  • 相关阅读:
    C++箴言:避免构造或析构函数中调用虚函数
    程序员面试题精选100题(32)-不能被继承的类
    面试题之数组统计
    面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
    数组Magic Index
    ALAssetsLibrary学习总结
    设计模式
    android之LruCache源代码解析
    Mac OS X将CSV格式转换为Excel文档格式,Excel转CSV中文乱码问题
    Atitit.jquery 版本号新特性attilax总结
  • 原文地址:https://www.cnblogs.com/KalosOwen/p/8563187.html
Copyright © 2011-2022 走看看