Oracle資料庫的多表關聯查詢SQL語句
阿新 • • 發佈:2018-12-15
=======================
聚合函式:(都會忽略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;