在一個 SELECT 敘述句裡我們可以獲得從資料庫裡的表格資料資訊:
- 設計:當你需要查詢某表格的某幾個欄位時,可經由指定的欄
位名稱來顯示資料欄位。
- 篩選:我們可透過條件式的篩選查詢符合的資料列。
- 連結:由連結指令對兩個關聯性或非關聯性的資料表格進行資
料查詢動作進而篩選出我們想要的資料。
Note:上述的功能我們將在後面章節說明。
基本的 SELECT 敘述句
SELECT * | {[DISTINCT] column_name | expression [alias],...} FROM table_name;
- SELECT 選擇哪些欄位名稱
- FROM 指定資料表格
- 使用 "," 區隔欲顯示的欄位名稱
範例:
SELECT employee_id AS emp_id, last_name AS name FROM employees WHERE ROWNUM <= 3;
EMP_ID |
NAME |
149 |
Zlotkey |
150 |
Tucker |
151 |
Bernstein |
在這裡我指定欄位名稱並給予別名再由 ORACLE 的ROWNUM 進行資料列前三筆的清單列出,你也可以使用 " * "
來取代欄位名稱只是表格的欄位將會全部被顯示出來。
二、撰寫 SQL Statements
- SQL 的保留字沒有區分大小寫
- SQL 可以編寫一行或多行
- 保留字不允許簡寫或被分割
- 子句通常放至於不同行數
- 縮排是為了提高 SQL 的可讀性
三、欄位名稱預設位置
- iSQL*Plus:
- 預設的欄位名稱位置:置中
- 預設的欄位名稱字型:大寫
- SQL*Plus:
- 字串與日期的欄位名稱位置:靠左邊
- 數值欄位名稱位置:靠右邊
- 預設的欄位名稱字型:大寫
iSQL*Plus:範例
LAST_NAME |
HIRE_DATE |
SALARY |
Zlotkey |
29-1月 -00 |
10500 |
Tucker |
30-1月 -97 |
10000 |
Bernstein |
24-3月 -97 |
9500 |
四、算數運算式

數值與日期時間可經由運算式來運算。
範例、每位員工薪資加300:
SELECT last_name, salary, salary + 300 FROM employees;
結果:
LAST_NAME |
SALARY |
SALARY+300 |
Zlotkey |
10500 |
10800 |
Tucker |
10000 |
10300 |
Bernstein |
9500 |
9800 |
Hall |
9000 |
9300 |
Olsen |
8000 |
8300 |
範例、目前日期加3天:
SELECT SYSDATE + 3 AS 三天後日期 FROM DUAL;
結果:
五、運算元的處理順序
- 先乘除後加減的數學運算順序
- 相同處理順序時則由左至右先處理
- 可利用括弧方式使運算式先處理
範例、先乘除後加減:
SELECT last_name, salary, 12*salary + 100 FROM employees;
結果:
LAST_NAME |
SALARY |
12*SALARY+100 |
Zlotkey |
10500 |
126100 |
Tucker |
10000 |
120100 |
Bernstein |
9500 |
114100 |
範例、括弧運算式先處理:
SELECT last_name, salary, 12*(salary+100) FROM employees;
結果:
LAST_NAME |
SALARY |
12*(SALARY+100) |
Zlotkey |
10500 |
127200 |
Tucker |
10000 |
121200 |
Bernstein |
9500 |
115200 |
六、Null 的定義
- Null 這個值是不能被使用的、不能被分配的
- Null 與 0 或 一個空白鍵是不同的
當資料列中的 Null 它不代表是空白,因為空白是一個字元亦不代表 0 。
當某個欄位中未被寫入任何值時,所查詢出來的欄位將是什麼也不是,當然也就不能夠被拿來使用,但是你可以透過查詢方式找出到底有哪些資料列中含有 Null。
Null 值如果用於運算式時,則結果仍然是 Null。
範例、Null 的運算式結果:
SELECT last_name, job_id, salary, commission_pct * 100 FROM employees;
結果:
LAST_NAME |
JOB_ID |
SALARY |
COMMISSION_PCT*100 |
Taylor |
SH_CLERK |
3200 |
|
Fleaur |
SH_CLERK |
3100 |
|
Sullivan |
SH_CLERK |
2500 |
|
七、定義欄位名稱別名
- 重新定義欄位名稱
- 經過計算的欄位可用有意義的文字顯示
- 透過 AS 或於欄位名稱空一格之後來定義欄位別名
- 別名中需要區分大小寫或包含空格時可用 "xX xX" 來指定
範例、定義欄位別名:
SELECT last_name "姓 名", salary*12 "年 薪 資" FROM employees;
結果:
姓 名 |
年 薪 資 |
Zlotkey |
126000 |
Tucker |
120000 |
Bernstein |
114000 |
八、字串合併符號
- 合併欄位中的值組合成為另一個欄位名稱
- 利用 " || " 合併欄位值
- 產生的結果是一字串
範例、前後姓、名欄位合併:
SELECT first_name || last_name AS "員工姓名" FROM employees;
結果:
員工姓名 |
EleniZlotkey |
PeterTucker |
DavidBernstein |
九、合併其他字串
- 合併其他字串讓顯示的內容更清楚
- 必須使用單引號('X x X')作區隔
- 設定的字串將套用於每一資料列
範例、顯示員工職責:
SELECT last_name || ' 工作職責是 ' || job_id AS "員工的職責" FROM employees;
結果:
員工的職責 |
Zlotkey 工作職責是 SA_MAN |
Tucker 工作職責是 SA_REP |
Bernstein 工作職責是 SA_REP |
十、重複的資料列
使用 DISTINCT 可以排除重複的資料列。
範例、排除重複顯示的部門 ID :
SELECT DISTINCT department_id FROM employees;
結果:
十一、SQL 與 iSQL*Plus 的連結

SQL 是任何一個工具或應用程式的指令語言用來與資料庫系統做溝通,在 ORACLE Server 裡還擴充了最多的功能,本站後面將陸續為各位獻上。
SQL 的特性
- 使用於用戶端的工具
- 是一個非程序性語言
- 能夠減少系統開發或維護時的所需時間
- 以英文撰寫的語言
- 可載入 SQL Script 檔
iSQL*Plus 的特性
- 透過瀏覽器操作
- 同樣可使用一般的 SQL 敘述句
- 可即時編輯 SQL 敘述句
- 格式化方式輸出查詢結果
- 可存取本地端或遠端的資料庫
- 可載入 SQL Script 檔
ORACLE 提供的 SQL 工具畫面:

ORACLE 提供的 iSQL*Plus 畫面:

十二、顯示表格結構
DESCRIBE TABLE_NAME
DESCRIBE 為 ORACLE 提供的一個顯示表格結構的命令,ORACLE 並允許你使用縮寫的方式下此命令:
範例:
DESC employees
結果:
名稱 |
空值? |
類型 |
EMPLOYEE_ID |
NOT NULL |
NUMBER(6) |
FIRST_NAME |
|
VARCHAR2(20) |
LAST_NAME |
NOT NULL |
VARCHAR2(25) |