1. 程式人生 > >oracle基本語法(4)

oracle基本語法(4)

最大的 style 基本語法 重點 結果 解決 最小 語句 括號

1>多表聯合查詢
2>分組查詢
3>子查詢
————————————————————
一、多表聯合查詢

總結:
1.多表聯合查詢;你想要的要的數據,分布在多個表中,得從多個表中查詢才能獲取;但是必須加連接條件,如果不加,會出現大量的錯誤數據;
2.連接條件:分析表盒表之間的關系,分析清楚數據和數據之間的關系==》用表達式寫出來即可;
3.一個連接條件可以連接2個表(只能連2個);如果需要連接N個表,至少需要N-1個條件;

註意:“未明確定義列”是指未說明該列是哪個表的。

多表聯合查詢語法:
select 列名1,列名2,列名3,…… from 表名1,表名2,表名3,... where 1個或者多個連接條件 [and 查詢條件];

補充知識點:

多表聯合查詢時,查詢項是某表的全部列 可使用 表名.*

為了結果清晰,可以使用ordery by 來選擇按照某一列排序

————————————————————

二、分組查詢

分組查詢主要是用來統計的,一般根據某個列或者幾個列來統計;
統計類型:求和、求平均值、最大、最小等等;
分組查詢需要結合分組函數一起使用,實現查詢結果;
常用分組函數:
count(參數):統計查詢語句返回的行數;
max(參數):最大
min(參數):最小
avg(參數):平均值
sum(參數):求和

註意:參數一般是列名

總結:分組查詢用於統計

關鍵詞:group by 視情況使用
語法:
select 分組函數,列名(被分組) from 表名 group by 列名1,列名2,... order by 列名;
select 分組函數,列名(被分組) from 表名 group by 列名1,列名2,... having 條件;


order by 作用:排序,使結果更清晰
having 作用:分組後進行過濾數據使用
備註:
查詢內容可以是分組函數,或者被分組列名,而且被分組的列名可加可不加,視情況而定,一般都加上。
group by 後面跟的是參與分組的列名,而且是用逗號,分隔的

________________________________________________

分組函數故障分析及解決:

一、

報錯:不是單組分組函數

如果語句中使用了分組函數,則有兩種情況可以使用:

1 使用group by:語句中存在group by即存在分組子句,並指定了分組條件,這樣可以將分組條件一起查詢出來
2 不使用group by:如果不使用分組的話,則只能單獨使用分組函數,在使用分組函數的時候,不能出現分組條件之外的字段
如下不會報錯:select ename,deptno,avg(sal) from emp group by ename,deptno;
如下會報錯: select ename,deptno,avg(sal) from emp; 提示不是單組分組函數。


二、

當使用分組函數時,分組函數只能出現在選擇列表、order by 和 having 子句中,而不能出現在 where 和 group by 子句中。另外,使用分組函數還有以下一些註意事項:

1、 當使用分組函數時,除了函數 count(*) 之外,其他分組函數都會忽略 null 行,當然 count(列名) 也會忽略 null 行。

2、 當執行 select 語句時,如果選擇列表時包含列、表達式和分組函數,那麽這些列和表達式必須出現在 group by 子句中。

3、 當使用分組函數時,在分組函數中可以指定 all 和 distinct 選項。其中 all 是默認選項,該選項表示統計所有行數據(包括重復行);如果指定 distinct,則只會統計不同行值。

4、 Having 是在 group by 語句之後。

三、

group by 用於對查詢結果進行分組統計,而 having 子句則用於限制分組顯示結果。註意,如果在選擇列表中同時包含列、表達式和分組函數,那麽這些列和表達式必須出現在 group by 子句中。

四、

使用 group by 子句、where 子句和分組函數有以下一些註意事項:

1、分組函數只能出現在選擇列表、having 子句和 order by 子句中

2、如果在select 語句中同時包含 group by 、having 以及 order by 子句,則必須將 order by 子句放在最後。默認情況下,當使用 group by 子句統計數組時,會自動按照分組列的升序顯示統計結果。通過使用 order by 子句,可以改變數據分組的排序方式。

3、如果選擇列表包含有列、表達式和分組函數,那麽這些列和表達式必須出現在 group by 子句中,否則會顯示錯誤消息。

4、當限制分組顯示結果時,必須要使用 having 子句,而不能在 where 子句中使用分組函數限制顯示結果,否則會顯示錯誤信息。

————————————————————

三、子查詢
子查詢:又叫嵌套查詢;一個查詢語句中又包含了查詢語句;
目的:查詢的過程中,想要的數據不是直接可以查詢出來,需要拐個彎(借助別的查詢語句)
常見2種用法:
1.子查詢用在查詢條件中;(重點)
2.子查詢代替一個表;

子查詢語法
select * from 表名 where 列名 運算符 (子查詢語句);
delete from 表名 where 列名 運算符 (子查詢語句);
子查詢的使用原則
1.子查詢一定要放在小括號:小括號優先級最高,保證子查詢先執行==》搜索值
2.子查詢語句放在查詢條件的右側,替換的是搜索值.where 列名 運算符 (子查詢語句)
3.子查詢分為單行子查詢,多行子查詢
單行子查詢:子查詢語句返回的查詢結果是一個行,一個值(一個列);
多行子查詢:子查詢語句返回查詢結果是多個行;多個值

單行子查詢的運算符:=,!=,<,>,<=,>=
多行子查詢的運算符:in all any
一個列對應多個值, 同一列名 in (搜索值1,值2,...),等價於:列名=值1 or 列名=值2 Or....
總結:all、any 需要結合>,<,>=,<=等一起使用;
all:跟子查詢結果中所有的值進行比較,比贏所有的;>all(子查詢):大於最大的 ;<all(子查詢):小於最小的
any:跟子查詢結果中所有返回值比較,比贏其中一個即可;>any(子查詢):大於最小的;<any(子查詢):小於最大的

oracle基本語法(4)