標籤:
1.5 如何在SQL語句中使用算數運算式
可以在SQL語句中使用運算式。在運算式中可以使用一下4種運算子:+,-,*,/
它們分別代表加、減、乘、除。
設想一下,在某一天,有個社會團體和工會團體參觀你們的公司,您的老闆為了樹立公司的光輝形象,它要求您把午餐和茶水的費用加到員工的工資裡並列印一張工資清單。於是您大概算了一下,其費用約合500元/月。之後您用例1-11的查詢得到了老闆索要的員工的工資清單。
例 1-11
SQL> SELECT empno,ename,sal,500+sal 2 FROM emp;
例 1-11結果
小提示:如果你發現你查詢的結果每10行分頁一次,你可以使用語句
SQL>SET PAGESIZE X--X表示顯示的行數,你可以設定一個大的值比如2000
當您把例1-11顯示的結果拿給老闆時,老闆認為應該用年薪並且不能列出原工資。因此您將例1-11的查詢語句做了一些修改併產生了例1-12的SQL語句。
例 1-12
SQL> SELECT empno,ename,500+sal*12 2 FROM emp;
例 1-12結果
看到例1-12顯示的結果會讓您大吃一驚。很顯然這並不是老闆索要的結果。其原因是運算子的優先順序在作怪。
運算子的優先順序是:
丶 先乘除後加減;
丶 在運算式中同一優先順序運算子計算次序是從左至右;
丶 如果使用了括弧,括弧中的運算優先;
丶 如果有多重括弧嵌套,內層括弧中的運算優先。
因此您不得不再次重新書寫例1-13的SQL語句如下。
例 1-13
SQL> SELECT empno,ename,(500+sal)*12 2 FROM emp;
例 1-13結果
毫無疑問,例1-13顯示的結果就是老闆所要的員工的工資清單。雖然你得到了正確的結果,但是顯示的列標確實令人費解,特別是對您的老闆和那些團體的頭頭們,因為他們對Oracle資料庫一竅不通。
1.6 怎樣在SQL語句中使用列的別名
為了讓老闆們明白,您不辭幸苦的再次修改了例1-13中的查詢語句,這次,您使用了列的別名,發出了例1-14的SQL語句
例 1-14
SQL> SELECT empno AS "Employee Number", 2 ename name,(500+sal)*12 "Annual Salary" 3 FROM emp;
例 1-14結果
上面例1-14顯示的結果正是您老闆想要的結果。
Oracle有許多Unix和C的影子,在為列命名時,大量使用縮寫方式,例如salary(工資)---sal。這些以縮寫方式表示列明的好出之一就是它減少了輸入量,但對非電腦專業的人來說,這些縮寫方式的列明如同天數一般。有沒有一種方法既能滿足Oracle專業人員習慣於使用縮寫的癖好,又使非電腦專業人員看到顯示的結果一目瞭然呢?為列起一個別名就解決了這一難題。
給一列起一個別名的方法很簡單。您只需要在列明和別名之間放上AS或者空格就可以了。雖然從語句的易讀性角度來說應該使用AS 關鍵字,但是使用這一關鍵字要多輸入兩個字元,所以您會發現許多的Oracle專業人員很少使用 AS 這一關鍵字。
別名對處理運算式表示的列非常有用。您可能已經注意到了,當別名沒有被雙引號括起來時,別名的顯示結果為大寫。如果別名中包含了特殊字元,或想別名原樣顯示,您舉要使用雙引號把別名括起來。
1.7 串連運算子
您的老闆對您為他做的員工的工資清單很滿意,但他iang顯示的結果是一個完整的英文句子,而且運算式的列標(就是表頭)為:Employee’s Salary。這樣,那些團體的頭頭們更容易理解。為此,您不得不再次修改查詢語句,寫下了例1-15的SQL語句:(可憐的程式員,就是不斷的該改改!)
例 1-15
SQL> SELECT ename||'annual salary is '||(500+sal)*12 "Employee's Salary" 2 FROM emp;
例 1-15結果
當您把這份報告呈交給老闆的時候,老闆燦爛的微笑告訴您,這正是他所期望的報告,如果您使用的是中文系統,您也可以使用例1-16的帶有中文的查詢語句。
例 1-16
SQL> SELECT ename||'年薪為'||(500+sal)*12 "員工的年薪" 2 FROM emp;
例 1-16 結果
在這一查詢語句中,我們使用了文本字串(liteal)和串連運算子。
文本字串是包含在SELECT子句中的字元、數字或運算式,而不是任何的列明或者列的別名。如文本字元是日起類型和字元型,您必須將他們用單引號括起來。每個字串在每行輸出結果中都輸出一次。
串連運算子由兩個豎線(||)表示,它把一個或多個列或字串串連在一起。
1.8 DISTINCT 運算子
設想您剛剛被公司聘為Oracle(DBA)管理員,您想知道您的公司究竟有多少個部門,您可能發出例1-17的查詢語句。
例 1-17
SQL> SELECT deptno 2 FROM emp;
例1-17 結果
Oracle顯示了全部的記錄,這是Oracle的預設顯示方式。如果您所在的公司是一家大型跨國公司,它擁有一百多萬名員工,您可以想象出這一查詢會造成什麼樣的後果。
您可以使用DISTINCT協助您去掉重複的行。請看例1-18語句的查詢。
例 1-18
SQL> SELECT DISTINCT deptno 2 FROM emp;
例1-18結果
很顯然,例1-18的結果要比例1-17的結果清楚多了。
注意:當查詢比較大的表時應儘可能的避免使用DISTINCT,因為Oracle系統是通過排序的方式來完成DISTINCT這一功能的,所以它會造成Oracle系統的效率降低。通常您可以使用不同的方式來完成同樣的工作,例如可以使用例1-19的查詢語句來得到所需的部門的資訊。
例 1-19
SQL> SELECT deptno 2 FROM dept;
例 1-19 結果
例1-19查詢與前面的插敘一樣得到了所有的部門號,但對Oracle系統沒有什麼衝擊,因為部門好(deptno)在dept表中本身就是唯一的。
DISTINCT可以作用於多列,此時顯示的結果為每一種列組合只顯示一行。例如1-20.
例 1-20
SQL> SELECT DISTINCT deptno,job 2 FROM emp;
例 1-20 結果
到此為止,我們已經討論了最基本的查詢語句。下面將給出基本查詢語句的格式。
1.9 基本查詢語句的格式
在這一章中omen只學習了一個基本的查詢語句。它只包含了兩個子句SELECT和FRO,其格式如下
SELECT *|{[DISTINCT ]列表,...}
FROM 表名:
其中
列表: 列名|運算式 [別名]
其中,SELECT * FROM 表名; 為從表名所指定的表中選擇所有的列;
SELECT DISTINCT 列表, ...
FROM 表名;
為從表名指定的表中挑選清單所規定的列,但不顯示重複的資料行(記錄)。
-----------------------------------↓↓↓下面是本章小結↓↓↓-----------------------------------------
1.10 應該掌握的內容
在學習下一章之前,請檢查您是否已經掌握了以下的內容:(貌似又忘得差不多了,汗!)
1、在查詢語句中哪兩個子句是必須的?
2、什麼是投影操作?
3、怎樣在查詢語句中選擇特定的列激烈的順序。
4、書寫查詢語句的約定。
5、什麼叫語句?
6、什麼叫子句?
7、欄位標題的預設顯示格式。
8、字元和日起理性的資料預設顯示格式。
9、數字類型資料的預設顯示格式。
10、SQL語句中的算術運算式及它們的優先順序。
11、SQL語句中列的別名及其使用。
12、怎樣使用文本字串(literal)和串連運算子(||)?
13、怎樣使用DISTINCT關鍵字以及使用它可能產生的問題。
oracle學習 第一章 簡單的查詢語句 ——04