zoukankan      html  css  js  c++  java
  • Oracle第七课课后作业

    Oracle第七课课后作业

    一、作业

    一个公司有很多部门有上级部门

    一个员工有他所在的部门,根据员工编号找到他所在的所有上级部门。

    编号姓名部门
    1 张三 301
    2 李四 401
    编号名称上级部门
    301 财务部 11
    11 集团中心 2
    2 财务总监 0

    显示出张三的上级部门:财务部,集团中心,财务总监

    -- 创建员工表
    CREATE TABLE emp(ID NUMBER(2) PRIMARY KEY,
    NAME VARCHAR(6) NOT NULL,
    deptno NUMBER(4)CONSTRAINT fk_dept REFERENCES dept(ID) );
    INSERT INTO emp VALUES(1,'张三',301);
    INSERT INTO emp VALUES(2,'李四',401);
    SELECT * FROM emp;
    -- 创建部门表
    CREATE TABLE dept(ID NUMBER(4) PRIMARY KEY,NAME VARCHAR(10) NOT NULL,pre_id NUMBER(4));
    INSERT INTO dept VALUES(301,'财务部',11);
    INSERT INTO dept VALUES(11,'集团中心',2);
    INSERT INTO dept VALUES(2,'财务总监',0);
    INSERT INTO dept VALUES(401,'保安部',NULL);

    -- 张三的上级部门
    SELECT * FROM dept START WITH ID=(SELECT deptno FROM emp WHERE NAME='张三') CONNECT BY PRIOR pre_id = ID;

    二、内置函数

    1. 单行函数

      • 字符函数

        -- 返回字符的ascii值:ascii函数
        -- 将连个字符或字符串拼接起来:concat函数
        -- 查找字符:instr函数
        -- 返回字符串的长度:length函数
        -- 将所有字符全部转换为小写:lower函数
        -- 将所有字符全部转换为大写:upper函数
        -- 去掉字符串中的空格:ltrim(去掉左边的空格),rtrim(去掉字符串右边的空格),trim(去掉字符串两边的空格)
        -- 替换字符:replace函数
        -- 截取字符中的一段:substr函数
      • 数字函数

        -- 求绝对值:abs函数
        -- 求大于或等于某个数的最小值:ceil函数
        -- 求小于或等于某个数的最大值:floor函数
        -- 四舍五入:round函数
        -- 截断函数:trunc函数
        -- 取余:mod函数
      • 日期函数

        -- 显示当前时间:sysdate关键字
        -- 在当前时间上增加一个月:add_months函数
        -- 求当前月的最后一天十几号:last_day函数
        -- 四舍五入日期:round函数
        -- 求月份差:months_between函数
        -- 求当前日期的下一个星期几是几号:next_day函数
        -- 提取员工的入职月份:extract函数
        -- 截断日期:trunc函数
      • 转换函数

        -- 转换成字符:to_char函数
        -- 转换成数字:to_number函数
        -- 转换成日期:to_date函数
    2. 多行函数

      • 统计函数

        -- 求最大值:max函数
        -- 求最小值:min函数
        -- 求员工的个数:count函数
        -- 求平均值:avg函数
        -- 求和:sum函数
      • 解决空值:nvl

        -- nv1(comm,0)函数:如果奖金(comm)为空的话,则转换为0
        -- nv2(comm,1,0)函数:如果奖金(comm)不为空,则转换为1,否则,转换为0
      • decode函数

        -- decode(job,'CLERK','店员');
        -- 注释:如果job=’CLERK‘,则显示为店员

    三、应用

    1. 行转列

      CREATE TABLE resident(NAME VARCHAR(6) NOT NULL,r_month number(2) NOT NULL,sal NUMBER(8) NOT NULL);
      INSERT INTO resident VALUES('赵一',1,10000);
      INSERT INTO resident VALUES('赵一',2,10500);
      INSERT INTO resident VALUES('赵一',3,9000);
      INSERT INTO resident VALUES('赵一',4,10030);
      INSERT INTO resident VALUES('赵一',5,10500);
      INSERT INTO resident VALUES('赵一',6,10000);
      INSERT INTO resident VALUES('赵一',7,12000);
      INSERT INTO resident VALUES('赵一',8,10500);
      INSERT INTO resident VALUES('赵一',9,10800);
      INSERT INTO resident VALUES('赵一',10,10900);
      INSERT INTO resident VALUES('赵一',11,10010);
      INSERT INTO resident VALUES('赵一',12,10800);
      SELECT * FROM resident;
      DROP TABLE resident;
      -- 显示每个人每月的工资,以列的形式显示,2020我国的平均收入是40000元左右,显示该居民是否达到或拖后腿
      SELECT NAME,SUM(DECODE(r_month,1,sal)) 一月,
      SUM(DECODE(r_month,2,sal)) 二月,
      SUM(DECODE(r_month,3,sal)) 三月,
      SUM(DECODE(r_month,4,sal)) 四月,
      SUM(DECODE(r_month,5,sal)) 五月,
      SUM(DECODE(r_month,6,sal)) 六月,
      SUM(DECODE(r_month,7,sal)) 七月,
      SUM(DECODE(r_month,8,sal)) 八月,
      SUM(DECODE(r_month,9,sal)) 九月,
      SUM(DECODE(r_month,10,sal)) 十月,
      SUM(DECODE(r_month,11,sal)) 十一月,
      SUM(DECODE(r_month,12,sal)) 十二月,
      DECODE(TRUNC(SUM(sal)/40000),0,'拖后腿','合格') 是否合格
      FROM resident r GROUP BY NAME;
    2. SQL递归的实现:

      -- SELECT *  FROM XX STRAT WITH 从什么地方开始  CONNECT BY PRIOR 递归条件
      -- 找id为1的子辈
      SELECT * FROM cow START WITH ID=1 CONNECT BY PRIOR ID = parent_id;



    软件下载提取码:qwer
  • 相关阅读:
    2021-06-10 Summary: 阶段总结
    java中有符号和无符号数据类型发生转换
    关于数组和集合的冒泡排序中容易出现的IndexOutOfBoundsException
    Intellij IDEA打开多项目窗口
    使用Idea从github上获取项目
    用Intellij Idea从Github上获取代码
    Python-列表常用操作方法
    Python-字符串常用操作方法
    Python-不可变对象和可变对象的理解
    Python-内置数据类型
  • 原文地址:https://www.cnblogs.com/ty0910/p/14309557.html
Copyright © 2011-2022 走看看