数据库(学习整理)Oracle多表查询,三种join连接

wenjieyatou 2020-05-08

聚合函数:(都会忽略null数据)
    常用的有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;

    2、交叉连接: 表与表之间做笛卡尔积查询!

        SQL语法格式:(无条件查询)

            select *
            from 表1 cross join 表2;

                   或者

            select *
            from 表1, 表2;

相关推荐