Oracle多表查询,四种连接方式[通俗易懂]

Oracle多表查询,四种连接方式[通俗易懂]
一、聚合函数:(都会忽略null数据) 1、常用的有5种:将字段中所有的数据聚合在一条中 1、sum(字段名) :求总和 2、avg(字段名) :求平均值 …

	Oracle多表查询,四种连接方式[数据库教程]

 一、聚合函数:(都会忽略null数据)
        1、常用的有5种:将字段中所有的数据聚合在一条中
            1、sum(字段名)        :求总和    
            2、avg(字段名)        :求平均值
            3、max(字段名)        :求最大值
            4、min(字段名)        :求最小值
            5、count(字段名、*)    :统计行数  
        2、按部门编号,查询平均薪水 ,并且平均薪水<1300的不显示,结果按降序排序
            select empno,avg(sal) as avgsal
            from scott.emp
            group by empno
            having avg(sal)>=1300
            order by avgsal desc;

        说明:
            SQL语句的执行顺序:一定是从上到下的!   
            group by 执行之后才会执行having、select中没有使用聚合函数的字段名必须写在这里
            having 后不能使用字段的别名、可以聚合函数、一般字段名
            order by 后面可以有:字段名、聚合函数、字段别名

        注意:
            Oracle 10g中才会出现的容错性:
                having 语句可以写在group by 之前,不会报错,但是实际上执行的顺序还是先执行group by 后执行having子句

        说明:
            1、当一个查询中,出现聚合函数和没有使用聚合函数的字段,则该字段必须出现在group by子句中!
            2、group by 字段1,字段2;  会先按照字段1分组得到一个结果集,再按照字段2进行分组!
            3、where 发生在group by 前!
            4、where 后面不能有聚合函数!

    二、多表查询:
            表连接分类: 内连接、外连接、交叉连接、自连接
            1、内连接: [inner] join    on
                SQL语法格式:
                    语法1:
                        select *
                        from 表1 [inner] join 表2 on 表1.字段1=表2.字段1;
                    语法2:
                        select *
                        from 表1,表2
                        where 表1.字段1=表2.字段1;

                说明: 
                    内连接中的inner join 和 join 是等价的!但是建议为了程序的可读性
                    尽量不要省略inner!

            2、外连接:         
                分类:左外连接、右外连接、全连接!
                1)、左外连接:left outer join             
                    连接效果:
                        左侧的表中的全部数据都会被显示出来,但是右侧表的数据,
                        只有和左侧匹配上的字段才会被查询出来!否则都会显示null!
                    SQL语法格式:             
                        语法1:
                            select *
                            from 表1 left outer join 表2
                                 on 表1.字段1=表2.字段1;
                        语法2:
                            select *
                            from 表1 left outer join 表2
                            where 表1.字段1=表2.字段1(+);

                2)、右外连接:right outer join           
                    连接效果:
                        右侧的表中的全部数据都会被显示出来,但是左侧表的数据,
                        只有和右侧匹配上的字段才会被查询出来!否则都会显示null!
                    SQL语法格式:              
                        语法1:
                            select *
                            from 表1 right outer join 表2
                                 on 表1.字段1=表2.字段1;
                        语法2:
                            select *
                            from 表1 left outer join 表2
                            where 表1.字段1(+)=表2.字段1;

                3)、全外连接:full/all outer join 
                    SQL语法格式:              
                            select *
                            from 表1 full outer join 表2
                                 on 表1.字段1=表2.字段1;

            3、自连接(self join)
                    自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。
                    示例:
                    在oracle的scott的schema中有一个表是emp。在emp中的每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的经理。
                    但现在我们只有一张emp表。所以我们可以采用自连接。自连接的本意就是将一张表看成多张表来做连接。我们可以这样来写SQL语句:
                    SQL> select work.ename worker,mgr.ename  manager from scott.emp work, scott.emp mgr
                      2  where work.mgr = mgr.empno
                      3  order by work.ename;
                        WORKER     MANAGER
                        ———- ———-
                        ADAMS      SCOTT
                        ALLEN      BLAKE
                        BLAKE      KING
                        CLARK      KING
                        FORD       JONES
                        JAMES      BLAKE
                        JONES      KING
                        MARTIN     BLAKE
                        MILLER     CLARK
                        SCOTT      JONES
                        SMITH      FORD

                        WORKER     MANAGER
                        ———- ———-
                        TURNER     BLAKE
                        WARD       BLAKE

                        已选择13行。

            4、交叉连接: 表与表之间做笛卡尔积查询!
                SQL语法格式:(无条件查询)
                    select *
                    from 表1 cross join 表2;
                           或者
                    select *
                    from 表1, 表2;

Oracle多表查询,四种连接方式

原文地址:https://www.cnblogs.com/lma0702/p/13468398.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6790.html

(0)
上一篇 2023-04-03
下一篇 2023-04-03

相关推荐

  • [20191218]降序索引疑问4.txt

    [20191218]降序索引疑问4.txt[20191218]降序索引疑问4.txt–//前几天优化一个项目,我发现许多表里面有有隐含字段,一般开发很少建立函数索引.我自己检查发现里面存在大量的降序索引.–//我感觉有点奇怪,为什么开发要

    2022-12-27
    151
  • 时序数据库Influx-IOx源码学习四(Run命令的执行)「建议收藏」

    时序数据库Influx-IOx源码学习四(Run命令的执行)「建议收藏」欢迎关注公众号: 上篇介绍到:InfluxDB-IOx的命令行及配置,详情见:https://my.oschina.net/u/3374539/blog/5017858 这章记录一下Run命令的执行…

    2023-04-13
    150
  • mysql触发器trigger 实例详解「建议收藏」

    mysql触发器trigger 实例详解「建议收藏」 https://www.cnblogs.com/phpper/p/7587031.html MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概…

    2023-03-23
    136
  • PyCharm终端位置

    PyCharm终端位置PyCharm是一款功能强大的Python IDE,它提供了很多方便开发的工具和功能。在PyCharm中,终端也是一个非常重要的工具,它可以方便地执行命令,例如调试Python程序、运行pip命令等。

    2024-07-21
    38
  • Python退出程序教程

    Python退出程序教程在编写Python程序时,退出程序是一项基本的任务。Python提供了多种方法来退出程序,包括使用异常、调用系统退出函数、使用sys模块等等。本篇文章将详细介绍Python通过不同方式退出程序的方法。

    2024-09-19
    16
  • Python DIY文件处理器:自定义文件句柄的方法

    Python DIY文件处理器:自定义文件句柄的方法Python是一种威力强大的编程语言,其文件处理功能使得程序员能够对文件进行读取、写入和处理等各种操作。本文将介绍如何使用Python自定义文件句柄,以更好地实现文件相关操作。

    2024-02-06
    94
  • 使用Python对MongoDB进行排序优化

    使用Python对MongoDB进行排序优化MongoDB是一个非关系型数据库,支持将数据存储为JSON文档。在MongoDB中,数据是以集合(Collection)的形式存储的。在集合中,文档是基本单位。在查询数据时,我们可以使用sort()方法进行排序。

    2024-02-09
    92
  • 一个韭菜用python采集(Python采集)

    一个韭菜用python采集(Python采集)数据采集(DAQ),又称数据获取,是指从传感器和其它待测设备等模拟和数字被测单元中自动采集非电量或者电量信号,送到上位机中进行分析,处理。数据采集系统是结合基于计算机或者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。采集一般是采样方式,即隔一定时间(称采样周期)对同一点数据重复采集。采集的数据大多是瞬时值,也可是某段时间内的一个特征值。

    2024-06-16
    52

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注