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

Oracle高级查询

  • select e.empno,e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno;

    查看全部
  • select t1.cid, concat(t1.sname)
    from(select k.ci_id cid,s.stu_name sname
        from pm_ci k,pm_stu s
        where instr(k.stu_id,s.stu_id)<>0) t1
    group by t1.cid;


    查看全部
    0 采集 收起 来源:练习

    2019-04-07

  • 提示

    1. 需要进行两个表的连接查询,为两个表都取别名

    2. 使用instr(a,b)函数,该函数的含义为:如果字符串b在字符串a里面,则返回的是b在a中的位置,即返回值大于0

    3. 需要用到分组查询

    4. 使用wm_concat(cols)函数对学生姓名用逗号拼接。

    查看全部
    0 采集 收起 来源:练习

    2019-03-31

  • SQL> select count(*) Total,

      2         sum(decode(to_char(hiredate,'YYYY'),'1980',1,0)) "1980",

      3         sum(decode(to_char(hiredate,'YYYY'),'1981',1,0)) "1981",

      4         sum(decode(to_char(hiredate,'YYYY'),'1982',1,0)) "1982",

      5         sum(decode(to_char(hiredate,'YYYY'),'1987',1,0)) "1987"

      6  from emp;


         TOTAL       1980       1981       1982       1987

    ---------- ---------- ---------- ---------- ----------

            14          1         10          1          2


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

    2019-03-31

  • 执行计划对比

    样式:

    explain plan for

    select ...

    from...

    where...

    select * from table(dbms_xplan.display);【查看】

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

    2019-03-31

  • SQL> select r,empno,ename,sal

      2  from (select rownum r,empno,ename,sal

      3       from (select rownum,empno,ename,sal from emp order by sal desc) e1

      4       where rownum<=8) e2

      5  where r>=5;


             R      EMPNO ENAME             SAL

    ---------- ---------- ---------- ----------

             5       7698 BLAKE            2850

             6       7782 CLARK            2450

             7       7499 ALLEN            1600

             8       7844 TURNER           1500


    SQL> select rownum,r,empno,ename,sal

      2  from (select rownum r,empno,ename,sal

      3       from (select rownum,empno,ename,sal from emp order by sal desc) e1

      4       where rownum<=8) e2

      5  where r>=5;


        ROWNUM          R      EMPNO ENAME             SAL

    ---------- ---------- ---------- ---------- ----------

             1          5       7698 BLAKE            2850

             2          6       7782 CLARK            2450

             3          7       7499 ALLEN            1600

             4          8       7844 TURNER           1500


    SQL> select rownum,r,empno,ename,sal

      2  from (select rownum r,empno,ename,sal

      3       from (select rownum,empno,ename,sal from emp order by sal desc) e1

      4       where rownum<=8) e2

      5  where rownum>=5;


    未选定行


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

    2019-03-31

  • 行号只能使用<,<=, 而不能使用>, >=。跟Oracle数据库的行号生成机制有关系,取了第一行才能取第二行,取了第二行才能取第三行

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

    2019-03-31

    1. ttitle col 15 '我的报表' col 35 sql.pno

      *ttitle col 15表示空15列展示报表名称

      *“我的报表”是报表名称

      * sql.pno表示报表页码

    2. col deptno heading 部门号

    3. col job heading 职位

    4. col sum(sal) heading 工资总额

    5. break on deptno skip 1

      *把以上设置放在.sql的文件下

    6. 在终端用get语句读取

    7. @+路径执行脚本

    8. 执行select  deptno, job, sum(sal) from emp group by rollup(deptno,job);

      https://img1.sycdn.imooc.com//5c9f483d00011d6009860710.jpg

    查看全部
    1. select deptno, job, sum(sal) from emp group by deptno, job(红色)

    2. select deptno, sum(sal) from emp group by deptno(蓝色)

    3. select  sum(sal) from emp (紫色)

    ===(等价于)

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


    https://img1.sycdn.imooc.com//5c9f43a90001304e06850381.jpg上面语句适用于做报表,下面是页面调整相关语句:

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

    2. set pagesize 30(设置页面大小,每页展示30条)



    查看全部
  • a not in (10, 20, null ) => a!=10 and a!=20 and a!=null--这是不可能的,null不能用等不等于来衡量

    查看全部
  • select max(avg(sal)) from emp group by deptno;

    *先在部门表里分组查出个部门的平均工资,然后嵌套max函数,得到各部门平均工资的最大值


    查看全部
  • 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也是跟第一条语句执行结果一样,是按照平均工资排序的。

    3.使用a 命令给上一语句后面加一个降序排序,那需要在a命令后面写2个空格才能成功(2个以上)

    a  desc



    查看全部
  • 行号永远按默认顺序生成

    行号只能使用<, <=, 不能使用>,>=

    查看全部
  • select *

    from emp

    where deptno=(select deptno

                  from dept

                  where dname='SALES');

    等价于:

    select e.*

    from emp e,dept d

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


    查看全部
  • 重点:from后面的子查询

    示例1:查询员工信息:员工号,姓名,月薪

    示例2:查询员工信息:员工号,姓名,月薪,年薪

    即在已知条件基础上增加更多可选择条件

    查看全部

举报

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

微信扫码,参与3人拼团

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

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