zoukankan      html  css  js  c++  java
  • Oracle-04

    数据查询语言---DQL

    1、查询语句中函数的使用

        单行函数:每一行数据会返回一个结果

        1)数字函数

          * round(数字,保留到小数点后指定位数):用于对数字进行四舍五入

    select round(123.456,2) from dual;  //保留小数点后两位

          * trunc(数字,截取到小数点后指定的位数):用于截取数据,若第二个参数没有,默认为0

    select trunc(123.456,1) from dual;  //123.4,截取到小数点后面一位

        2)日期函数

          * sysdate:返回系统当前的时间

    select sysdate from dual;

          * months_between(d1,d2):计算这两个日期之间相隔的月份

    eg:计算员工入职多少个月
    select ename,trunc(months_between(sysdate,hiredate)) months from emp_xu;

          * add_months(date,number):在date时间增加number个月

    eg:计算四个月之后的时间
    select add_months(sysdate,4) from dual;//当前时间加上4个月
    select add_months(sysdate,-4) from dual;//“-4”代表当前时间4个月之前的月份

           * last_day(date):当前月份的最后一天

    eg:计算上个月(5月份)最后一天
    select last_day(add_months(sysdate,-1)) from dual;

        3)转换函数

          a. 常用日期格式

            * yyyy:四位的年----2018

            * year:全拼的年----twenty eightteen或2018年

            * mm:两位的月份---06

            * month:全拼的月---June或6月

            * mon:简拼的月

            * dd:表示两位的天---05

            * day:表示全拼的星期---Tuesday或星期二

            * dy:简拼的星期---Tue或星期二

            * am/pm:上午/下午

          b. to_char(日期数据,指定的格式):将日期数据按照指定格式转换成字符数据

    select to_char(sysdate,'month') from dual;
    select to_char(sysdate,'yyyy-mon-dd day hh24:mi:ss') from dual;//显示年月日,星期,时分秒

          c. to_date(字符数据,指定格式):将字符数据按照指定格式转换成日期数据

    select to_date('2018-06-05','DD-MON-YY') from dual;//报格式不匹配错误
    select to_date('2018-06-05','yyyy-mm-dd') from dual;

        4)其他函数

         * coalesce(参数列表):目的是返回参数列表中第一个非空参数值,参数列表中最后一个值通常是常量,coalesce(d1,d2,d3,...,100)

    eg:计算员工的年终奖(要求:bonus不为null,年终奖就是bonus;bonus为null,年终奖是salary*0.05;bonus和salary都是null,年终奖就是100)
    select ename,bonus,salary,coalesce(bonus,salary*0.05,100) money from emp_xu;

          * case...when:表示数据的分支

    eg:根据员工的职位来计算加薪之后的薪水(要求:若职位是‘Analyst’加薪20%;若职位是'Programmer'加薪5%;若职位是'Clerk'加薪2%;其他职位薪水不变)
    select ename,salary,position,case position when 'Analyst' then salary*1.2 when 'Programmer' then salary*1.05
    when 'Clerk' then salary*1.02 else salary end new_salary from emp_xu;//在case...when中间是没有逗号的,else相当于java中的default,end表示语句的结束

          * decode(判断条件,匹配1,值1,匹配2,值2...默认值):作用和case..when是一样的

    select ename,salary,position,decode(position,'Analyst',salary*1.2,'Programmer',salary*1.05,'Clerk',salary*1.02,salary) new_salary from emp_xu;

    2、组函数:多行数据返回一个结果(如求平均成绩)

        1)count():求记录数,能够处理任何数据类型,忽略空值

    eg:根据员工号统计有多少条记录
    select count(empno) from emp_xu; //13
    select count(position) from emp_xu; //12,忽略了null空值
    select count(*) from emp_xu; //13,'*'不忽略空值的

        2)sum()/avg():求和/求平均

            注:只能处理数值类型的数据,忽略空值

    eg:计算员工的薪水总和

    select sum(salary) from emp_xu;

    eg:计算员工的人数、薪水总和、平均薪水

    select count(*),sum(salary),avg(salary) from emp_xu;//有一个salary 为null,最终计算平均会忽略掉
    select count(*),sum(salary),avg(nvl(salary,0)) from emp_xu;//需要加空值处理函数,nvl()

        3)min()/max():最小值/最大值(能够处理任何数据类型)

    eg:计算员工的最高薪水、最低薪水
    select min(salary),max(salary) from emp_xu;//salary为空会被忽略掉

        总结:

           a.  count/sum/avg/max/min:如果函数写列名默认是忽略空值的

           b.  count(*)不忽略空值:sum/avg针对数值类型操作

           c.  max/avg:针对全部的数据类型操作

  • 相关阅读:
    java:产生小数位数为2的随机概率,使得和为1
    大数据网络分析规划
    java碎笔
    mysql修改记录
    mysql导入导出数据
    Centos中hive/hbase/hadoop/mysql实际操作及问题总结
    linux后台运行程序
    Centos搭建mysql/Hadoop/Hive/Hbase/Sqoop/Pig
    ARM-LINUX自动采集温湿度传感器数据
    java中枚举类型的使用
  • 原文地址:https://www.cnblogs.com/xslzwm/p/9584310.html
Copyright © 2011-2022 走看看