oracle数据库的高级查询方法 多表联合查询

Posted yinyanlei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库的高级查询方法 多表联合查询相关的知识,希望对你有一定的参考价值。

  oracle查询

    一,简单查询

      order by 1,2

        select t.sno, t.sname, t.ssex from STUDENT t order by 1,2,3

      group by 增强版

        SELECT p.toma, p.ptype, SUM(p.lastcou) FROM product p GROUP BY rollup(p.toma, p.ptype)

    二,高级查询(多表连接查询)

      笛卡尔积的概念:

        所谓笛卡尔积,通俗点说就是指包含两个集合中任意取出两个元素构成的组合的集合。假设R中有元组M个,S中有元组N个,则R和S的笛卡

        尔积中包含的元组数量就是M*N。这个规则可以向多个关系扩展。

      分类:

        内连接:select s.sname, r.cno,r.degree from student s, score r where s.sno=r.sno

        等值连接------用=的连接

        不等值连接

          外连接(啥也不写就是内连接, 直接写两个表名)---左外连接, 右外连接

            select * from student s left outer join course c on s.sno=c.cno

            (+)修饰符的使用

              select s.sname, r.cno,r.degree from student s, score r where s.sno=r.sno(+)----等同于外连接的结果

            数据字典的使用

          自连接(自己骗一下自己):  select * from z_course c1, z_course c2 where c1.cour_code=c2.p_cour_code 

          层次查询
            CONNECT BY PRIOR 连接条件 START WITH 开始条件

            select * from Z_COURSE t connect by prior t.cour_code=t.p_cour_code start with t.cour_name like ‘%国际%‘

            伪列:

              level: 加上一列显示级别

              select t.*, level from Z_COURSE t connect by prior t.cour_code=t.p_cour_code start with t.cour_name like ‘%国际%‘

              rownum:加上一列行号

                select s.*, rownum from student s 

                使用rownum分页

                  select * from (select s.*, rownum rn from student s where rownum<=10) t where t.rn>5

          子查询(sql语句的执行顺序)

            单行子查询: 可以用=号

            多行子查询:不可以用=号,可以用 in

            exists关键字的使用: 是否存在

              select * from student t where exists(select 1 from student t1 where t1.sno=105)


以上是关于oracle数据库的高级查询方法 多表联合查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle曾经的Oracle学习笔记(4-7)多表联合查询,子查询,动态条件查询

ACCESS数据库中如何实现多表联合查询?

Oracle ODI 12c之多表联合查询以及定时任务设置

Oracle多表查询操作(SQL92&SQL99)

怎样使数据库中的多表实现联合查询

Django怎么多表联合查询