1. 程式人生 > >Oracle資料庫的多表關聯查詢SQL語句

Oracle資料庫的多表關聯查詢SQL語句

=======================

聚合函式:(都會忽略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;