为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle高级查询

  • 自连接:通过别名,将同一张表视为多张表

    实例:查询员工姓名和员工的老板姓名【使用员工表】

    查看全部
    0 采集 收起 来源:[Oracle] 自连接

    2021-10-12

  • 外连接:把对于连接条条件不成立的记录,仍然包含在最后的结果中;

    左外连接:当连接条件不成立的时候,等号左表的表仍然被包含; where e.deptno=d.deptno(+)  [写法与叫法相反]

    右外连接:当连接条件不成立的时候,等号右边的表仍然被包含; where e.deptno(+)=d.deptno 

    查看全部
    0 采集 收起 来源:[Oracle] 外连接

    2021-10-12

  • 笛卡尔集:行数:表行数相乘;列:列数相加;【笛卡尔集:数据不一定都是正确的】

    在实际运行环境下,应避免使用笛卡尔全集

    查看全部
  • 需要在,from 后面 是员工表和部门表在where等值连接=

    SQL

    查看全部
  • 层次查询:自连接的优化查询。

    level:树的深度,层次。类似序列号。

    connect by pripro  上一层的员工号等于这层的老板号。

    from emp connect by pripro empno=mgr 

    start with mgr is null;

    自连接存在的问题:
    (1)自连接不适合操作大表,也就是记录多的表,原因是自连接至少有两张表参与,并进行笛卡尔全集,连接之后的记录数就是单张表记录数的平方(笛卡尔积行数是两张表行数的乘积),如果有三张表记录数就是原来的三次方,如果原来的表包含的记录数过多,连接之后的结果就会很大,所以自连接不适合操作大表。解决办法:层次查询。注意层次查询是单表查询,不存在第二张表!因为只有在一张表的情况下才不会产生笛卡尔积,才能解决这个问题。
    层次查询在某些情况下可以替代自连接,本质上是单表查询。
    例:
    select empno,ename,sal,mgr
    from emp   //层次查询只涉及一张表
    connect by prior empno=mgr   //层次查询的条件不用where表示,而用connect by表示,上一层的员工号=当前曾的老板号
    start with mgr is null或者start with empno=7839;   //stsrt with表示从何处开始遍历查询,只有从根节点开始时才可以使用 * is null 的格式,其余节点都只能使用第二种格式。
    此外层次查询的树的深度用level表示,可以在select语句中加入level就可以得到深度的查询结果,还可以对查询结果进行排序如order by 1;
    比较自连接和层次查询的优劣:
    自连接得到的查询结果比较直观但是不适合操作大表;
    层次查询只涉及一张表,不产生笛卡尔积,但是得到的结果不够直观。
    所以不同的查询语句有不同的特点,不是万能的!

    查看全部
  • Group by
    ·在SELECT 列表中所有未包含在组函数中的列都应该包含在GROUP BY 子句中

    ·包含在GROUP BY 子句中的列不必包含在SELECT 列表中

    select a,b,c,组函数(x) from table group by a,b,c;

    select avg(sal) from emp group by deptno;

    select deptno,job,sum(sal) from emp group by deptno,job;

    查看全部
  • 一、分组函数

    AVG:平均值。

    SUM:求和。

    MIN:最小数。

    MAX:最大值。

    COUNT:计算个数。

    WM_CONCAT:行转列。

    查看全部
  • null会导致计算错误,需要使用nvl函数转为非空值

    select count(nvl(comm,0)) from emp;

    注意:sum(comm)/count(*):统计的是所有人的平均值(含该项为null的人员)

    sum(comm)/count(comm)&avg(comm)是统计comm非空的人员平均数

    查看全部
    0 采集 收起 来源:使用分组函数3

    2021-08-18

  • select deptno 部门号,wm_concat(ename) 部门中员工的名字--wm_concat行列转置 
    from emp group by deptno;

    查看全部
    0 采集 收起 来源:使用分组函数2

    2021-08-18

  • group by rollup(a,b)

        相当于

            group by a,b  

            +

            group by a 

            +

            group by null 

    例:

        select deptno,job,sum(sal) from emp group by rollup(deptno,job);

            先按照不同部门不同职位查出薪资总和显示(deptno,job,sum(sal))

            再按照不同部门查出薪资总和显示(deptno,sum(sal))

            再查出薪资总和显示(sum(sal))

        修改报表格式(只在sqlplus中有效):

    break on deptno skip 2
    相同的部门号(deptno)只显示一次,不同的部门号跳过两行。

    set pagsize 30
    让每页显示30条记录。

    查看全部
  • order by子句

    示例:求每个部门的平均工资,要求显示:部门号,部门的平均工资,并按照工资升序排列
    可以按照:列、别名、表达式、序号进行排序

    select deptno,avg(sal) from emp group by deptno order by avg(sal);

    select deptno,avg(sal) 平均工资 from emp group by deptno order by 平均工资;

    select deptno,avg(sal) 平均工资 from emp group by deptno order by 2;

    sqlplus的另一个小技能:   a命令:-append;a命令表示在上一条命令后面追加语句,a命令后必须跟两个或两个以上的空格,若只打一个空格则追加语句紧跟上一条语句最后一个单词拼接
    /表示执行
    查看全部
  • Group by
    ·在SELECT 列表中所有未包含在组函数中的列都应该包含在GROUP BY 子句中

    ·包含在GROUP BY 子句中的列不必包含在SELECT 列表中

    select a,b,c,组函数(x) from table group by a,b,c;

    select avg(sal) from emp group by deptno;

    select deptno,job,sum(sal) from emp group by deptno,job;
    查看全部
  • 分组函数会自动过滤空值
    例子:平均工资
    select sum(sal)/count(*) , sum(sal)/count(sal)  ,   avg(sal)  from emp ; 

    • count(*) 会包含空值的个数
    • 分组函数会自动过滤掉空值
    • nvl函数  使得分组函数不忽略空值
    • nvl(comm,0)   这个函数的意思是 当该字段为空的时候返回第二个参数,当字段不为空 返回他本身

    • 这个函数可用于自增的输入nvl(max(sno),0))+1  最大值加一   可用于插入数据的编号
    查看全部
    0 采集 收起 来源:使用分组函数3

    2021-08-08

  • Having

    610ff5d60001d5f211521756.jpg
    查看全部
  • testtetetetehttp://img1.sycdn.imooc.com//60d2d9c700018c6607270423.jpg

    查看全部

举报

0/150
提交
取消
课程须知
小伙伴们,学习本课程前需要掌握Oracle的语法基础,并且对Oracle的函数有所了解。如不了解这两部分内容,请移步《Oracle数据库开发必备利器之SQL基础》和《Oracle数据库开发利器之函数》两门教程。
老师告诉你能学到什么?
1、掌握分组查询 2、掌握多表查询 3、掌握子查询

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!