当前位置: 主页 > 行业资讯 > 大数据培训 > 光环大数据Oracle培训学习教程

光环大数据Oracle培训学习教程

2018-03-22 17:49:58 作者:光环大数据 栏目:未知

光环大数据作为国内知名的高端IT就业培训机构,多年来培养无数高薪人才!为了让更多人了解大数据、人工智能、数据分析、python等相关技能,光环大数据免费提供学习视频、2周免费跟班试听课程,如有需要,可点击留言

近日,由光环大数据教学部项目经理提供了一部分光环大数据java培训学员正在学习的Oracle培训教程,现分享给大家:


1.高级函数      *1)分支判断函数(适合==判断)     decode(字段或计算表达式,           条件值1,结果值1,           条件值2,结果值2[,默认值]           )      if(字段或计算表达式 == 条件值1){       return 结果值1;    }else if(字段或计算表达式 == 条件值2){       return 结果值2;    }else{       return 默认值;    }      //将查询的sal列显示大写形式   select empno,ename,          decode(sal,800,'捌佰元',            1100,'壹仟一佰元',            1300,'壹仟叁佰元',            1600,'壹仟陆佰元',            '默认值') upper   from emp;   //统计部门编号,工资大于等于2000的人数,   //小于2000的人数,该部门总人数   select deptno,count(*) total,    sum(decode(sign(sal-2000),-1,0,1)) great,    sum(decode(sign(sal-2000),-1,1,0)) least   from emp   where deptno is not null   group by deptno;    ==========sign函数介绍(补充)===========   sign(n):判断n>0返回1;n=0返回0;n<0返回-1.   select sign(10),sign(0),sign(-2)   from dual;     select ename,sign(sal-2000) from emp; =====================================    *2)case函数 (适合区间,>,<判断)    case when 判断表达式 then         when 判断表达式 then         .....    end     select deptno,count(*) total,    sum(case when sal>=2000 then 1        end) great,    sum(case when sal<2000 then 1        end) least   from emp   where deptno is not null   group by deptno;   //统计部门中男人数和女人数  create table j20(   id number(7),   name varchar(20),   sex char(1), --'M'或'F'   deptno number(7));    select deptno,         sum(decode(sex,'M',1,0)) as male,         sum(decode(sex,'F',1,0)) as female  from j20  group by deptno;    select deptno,         sum(case when sex='M' then 1              else 0 end) as male,         sum(case when sex='F' then 1             else 0 end) as female  from j20  group by deptno;  //基于EMP表查询部门编号,工资1000以内人数,  1000-2000人数,2000以上人数  select deptno,     sum(case when sal<1000 then 1              else 0          end) "1000以内",     sum(case when sal>=1000 and sal<2000 then 1              else 0         end) "1000-2000",     sum(case when sal>=2000 then 1              else 0         end) "2000以上"  from emp  group by deptno;    //查询调薪结果,规则:MANAGER涨10%,CLERK涨20%,   其他人涨5%  select empno,ename,job,sal,         decode(job,'MANAGER',sal*1.1,                    'CLERK',sal*1.2,                    sal*1.05) "加薪之后"  from emp;      3)集合操作     A={1,3,5,7,8}   B={3,5,6,9}   A和B并集={1,3,5,6,7,8,9} //合并两个集合元素union   A和B交集={3,5} //两个集合相同元素 intersect   A-B求差={1,7,8} //A有的而B没有的元素minus   B-A求差={6,9} //B有的而A没有的元素minus     *a.求并    union : 将两个select结果合并(去除重复记录)    union all :将两个select结果合并(不去除重复记录)      select empno,ename,sal   from emp   where sal>=1000 and sal<=2000   union   select empno,ename,sal   from emp   where sal>=1500 and sal<=3000;    b.求交集    intersect:将两个select结果相同记录提取.     select empno,ename,sal   from emp   where sal>=1000 and sal<=2000   intersect   select empno,ename,sal   from emp   where sal>=1500 and sal<=3000;    c.求差集   minus : 计算前面select有的而后面select没有的记录     select empno,ename,sal   from emp   where sal>=1000 and sal<=2000   minus   select empno,ename,sal   from emp   where sal>=1500 and sal<=3000;        select empno,ename,sal   from emp   where sal>=1500 and sal<=3000    minus   select empno,ename,sal   from emp   where sal>=1000 and sal<=2000    //查询工资最高的前3名和最低前3名的员工信息 select empno,ename,sal from   (select empno,ename,sal     from emp    order by sal desc) where rownum<=3 union select empno,ename,sal from   (select empno,ename,sal     from emp    order by sal asc) where rownum<=3 order by sal asc; --将合并结果按sal升序排列    //查询既是工资排名前5的,也是最早入职前5的员工 select empno,ename from   (select empno,ename     from emp    order by sal desc) where rownum<=5 intersect select empno,ename from   (select empno,ename    from emp    order by hiredate) where rownum<=5;      =====集合操作注意事项====== --想控制结果排序,需要在第二个select中使用order by --两个select语句查询的列数必须相同 --结果集字段名以第一个select的列名为准 --两个select列数相同,类型相同就可以进行集合操作  (名称可以不同)    4)排名函数(分析函数)    row_number(),rank(),dense_rank()   使用格式:   row_number() over(partition by 字段1                      order by 字段2)   作用:按将查询结果按字段1分组,然后按字段2排序,   再调用row_number(),rank(),dense_rank()编号.     *a.row_number()     不允许重复,编号唯一并且连续。    select empno,ename,sal,      row_number() over(order by sal desc) as rn    from emp;    //将查询结果按deptno分组,组内记录再按sal降序排列    //然后调用row_number()对组内记录编号    select ename,deptno,sal,      row_number() over(partition by deptno                   order by sal desc) as rn    from emp;     *b.rank()     允许并列排名(重复),编号不连续。例如1,2,3,3,5,6    select empno,ename,sal,      rank() over(order by sal desc) as rn    from emp;     c.dense_rank()     允许并列排名(重复),编号连续。例如1,2,3,3,4,5,6    select empno,ename,sal,      dense_rank() over(order by sal desc) as rn    from emp;   //查询工资最高的前3名,(允许并列情况,并列后编号跳跃) select empno,ename,sal,rn from(   select empno,ename,sal,       rank() over(order by sal desc) as rn   from emp  ) where rn<=3; //where rn>=5 and rn<=10;--查询工资排在5-10位的 //查询每个部门工资最高的前2名(不允许重复) select empno,ename,sal,deptno from (   select empno,ename,sal,deptno,          row_number() over(partition by deptno              order by sal desc) rn   from emp ) where rn<=2; //查询每个职位工资最高的员工信息(允许重复) select empno,ename,job,sal from(   select empno,ename,job,sal,      rank() over(partition by job                  order by sal desc) rn   from emp ) where rn=1;   ====row_number()和rownum区别===== --rownum是一个伪劣字段;row_number()是个函数 --rownum序号列是唯一连续的编号;row_number()也可以   唯一连续的编号. --row_number()可以进行组内编号,每个组都从1开始。    5)高级聚合函数    rollup(),cube(),grouping sets()   上面这几个函数,是对group by分组功能做的功能扩展。    a.rollup()   功能:在原结果基础上追加一行总合计记录   rollup(字段1,字段2)会追加按字段1进行的合计记录,   最后再追加一个总合计记录     select deptno,count(*)   from emp   group by rollup(deptno);     select deptno,job,count(*)   from emp   group by rollup(deptno,job)   order by deptno;   ----等价于下面写法-----   select deptno,job,count(*)   from emp   group by deptno,job   union   select deptno,null,count(*)   from emp   group by deptno   union   select null,null,count(*)   from emp   order by deptno;      结论:group by rollup(字段1,字段2,字段3)     --查询按字段1,字段2,字段3分组统计结果     --追加按字段1和字段2的合计     --追加按字段1的合计     --追加总合计记录     b.cube()     select deptno,count(*)   from emp   group by cube(deptno)   order by deptno;     cube(字段1):作用于rollup(字段1)相同。    追加一行总合计记录。     select deptno,job,count(*)   from emp   group by cube(deptno,job)   order by deptno;   --查询group by deptno,job分组统计结果   --查询group by deptno分组统计结果   --查询group by job分组统计结果   --查询没有group by统计结果    结论:group by cube(字段1,字段2,字段3)   --查询group by 字段1,字段2,字段3统计结果   --查询group by 字段1,字段2统计结果   --查询group by 字段1统计结果   --查询group by 字段2统计结果   --查询group by 字段3统计结果   --查询group by 字段2,字段3统计结果   --查询group by 字段1,字段3统计结果   --查询没有group by统计结果    c.grouping sets()      select deptno,count(*)   from emp   group by grouping sets(deptno)   order by deptno;   --上面和没加grouping sets()效果一样     select deptno,job,count(*)   from emp   group by grouping sets(deptno,job)   order by deptno;  --只返回cube规则追加的分组统计结果  --不包含没有group by和group by deptno,job的统计      ==========作业(面试题)==============
  1.1.18. 数据库有两张表一个学生表(id,name,sex), 一个学生成绩表(id,chineses,English,math), 要求查询学生基本信息以及各科成绩和总成绩, 总成绩要求在200到300之间,学生姓名降序。 【锐志信息】 1.1.19. 现有关系数据库表如下: 学生表(学号 char(6), 姓名,性别,身份证号) 课程表(课号 char(6), 名称) 成绩表(id,学号,课号,分数)
  用sql实现下面2题: 1.检索姓马的女同学情况(姓名,身份证号) 2.检索有一门或一门以上课程成绩大于等于90的所有学生信息(学号,姓名) 1.1.20. 有三张表,学生表 Student,课程 Coruse, 学生课程表 SC,学生可以选修多门课程, 一门课程可以被多个学生选修,通过 SC 表关联。 1)写出建表语句; 2)写出 SQL 语句,查询选修了所有选修课程的学生; 3)写出 SQL 语句,查询选修了至少2门以上的课程的学生。


以上java教希望对大家有所帮助!


光环大数据作为国内知名的高端IT就业培训机构,多年来培养无数高薪人才!为了让更多人了解大数据、人工智能、数据分析、python等相关技能,光环大数据免费提供学习视频、2周免费跟班试听课程,如有需要,可点击留言
Tags标签 大数据培训

领取资料

X
立即免费领取

请准确填写您的信息

点击领取