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

Oracle高级查询

  • 主查询和子查询可以不是一张表

    即涉及到多表操作时,有两种解决方案,方案一是子查询,方案二是多表查询

    例:查询部门名称是sales的员工信息

    方法一

    select *

    from emp

    where emp_no = ( select emp_no

                                   from dept

                                   where dept_name = ' sales');

    方法二

    select e.* 

    from emp e,dept d 

    where e.deptno=d.deptno and d.dname='SALES';



    查看全部
  • select子查询必须是单行子查询,单行子查询只能返回一行记录

    from后面的子查询是把子查询的内容当作一个新表

    查看全部
  • 5d1317700001693912800720-156-88.jpg

    5d131843000101cc12800720-156-88.jpg

    。。。。。

    查看全部
  • 自连接 核心:通过别名,将同一张表视为多张表

    select e.ename 员工姓名,b.bname 老板姓名 

    from emp e,emp b 

    where e.mgr=b.empno;

    自连接  一张表取两个别名


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

    2019-10-19

  • 不等值连接

    select e.empno,e.ename,e.sal,s.grade 

    from emp e,salgrade s 

    where e.sal between s.losal and s.hisal;

    运用between and 查询条件  小值在前and 大值在后

    查看全部
  • 等值连接

    select e.empno,e.ename,e.sal,d.dname

     from emp e,dept d 

    where  e.deptno = d.deptno;

    查看全部
  • 5c7f6ca6000128ea12800720-156-88.jpg

    每张表的列数相加,行数相乘就得到了笛卡尔积最终表

    多表查询进行笛卡尔集运算时,产生的所有结果中并不是完全正确的,有部分结果是不需要的,为了避免笛卡尔全集中的一些错误,需要在where中使用连接条件,然而连接条件的个数与参加进行笛卡尔集运算的表的个数存在一定关系:               连接条件个数=n-1  (n为参加笛卡尔集运算的表的总个数)



    查看全部
  • 分组函数可以进行嵌套,例子如下:

    求部门平均工资的最大值

    select max(avg(sal)) from emp group by deptno;


    查看全部
  • orderby可以根据列,别名,表达式,序号进行排序

    1.select deptno,avg(sal)平均工资 from emp group by deptno 

    order by   平均工资

    *平均工资是avg(sal)的别名,order by语句可以直接使用别名,默认按升序排序

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

    order by   2

    *select语句第二列是平均工资,所以order by语句后面直接写2也是跟第一条语句执行结果一样

    a命令-append

    a命令表示在上一条命令后面追加语句

    a命令后必须跟两个或两个以上的空格,若只打一个空格则表示追加语句紧跟上一条语句

    实例 a desc:order by 2desc

    实例 a  desc:order by 2 desc


    查看全部
  • 1 having 作用是过滤分组,因此having排在group后面

    格式:select column, group_function

    from table

    where..

    group by..

    having...

    order by...;

    2 where, having功能相似,但是区别在于where不能使用组函数而having能,没有组函数的情况下,where和having可以互换,尽量使用where

    查看全部
  • select a, 组函数(x)

    from table 

    group by a;

    select 列表中所有未包含在组函数中的列都要包含在GROUP BY 子句中;而GROUP BY子句中的列不必包含在SELECT列表中,此时查询结果也只有select中的列

    select a,b,c,avg(sal)

    from emp

    group by a,b,c;


    查看全部
  • 找到员工表中薪水大于本部门平均薪水的员工

    select empno,ename,sal

    from emp e

    where sal>(select avg(sal) from emp where deptno=e.deptno);


    查看全部
  • 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 pagesize 30;


    查看全部
  • 求部门平均工资的最大值

    select max(avg(sal)) from emp group by deptno;

    查看全部
  • select count(*) as total,

       sum(case to_char(t.hiredate,'yyyy')  when'1981' then 1 else 0 end) "1981",

       sum(case to_char(t.hiredate,'yyyy')  when'1980' then 1 else 0 end) "1980",

       sum(case to_char(t.hiredate,'yyyy')  when'1987' then 1 else 0 end) "1987",

       sum(case to_char(t.hiredate,'yyyy')  when'1982' then 1 else 0 end) "1982"


     from emp t;


    查看全部
    0 采集 收起 来源:案例3

    2019-08-25

举报

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

微信扫码,参与3人拼团

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

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