Oracle數據庫的多表關聯查詢SQL語句

轉至 數據庫(學習整理)----7--Oracle多表查詢,三種join連接

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章