轉至 數據庫(學習整理)----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;