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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM