Hi-Fi優質I.T網:專題報告...
您尚未登入...
帳號:
密碼:

忘記密碼 
 
  訂閱電子報

取消   訂閱
 
2004/9/16-19:53:59
 踏入 Oracle 9i DBA 之三作者:站長│發表日期:2020/8/7│分數:6


第貳章 基本 SQL SELECT 語法

完成本章你將能理解:

  • 使用 SQL SELECT 語法顯示表格內資料
  • 學會如何執行 SELECT 敘述句
  • 區分 SQL 敘述句和 iSQL*Plus 指令

PS:藍色字串為 ORACLE 保留字或函數

  你需要使用 Stuctured Query Language (SQL) SELECT 敘述句從資料庫取得資料,並可以透過簡單的設定將顯示的資料欄與資料列客製化,學習本章時我們建議你也能跟著步驟實現這些動作。

  iSQL*Plus 為一個網頁模式的環境能讓你執行 SQL 敘述句,它是 Oracle 9i 的新產品當你安裝好資料庫時系統會自動順便幫你設定起來。

一、SQL SELECT 敘述句的功能

  在一個 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;

結果:
三天後日期
2004/1/1 

五、運算元的處理順序

  • 先乘除後加減的數學運算順序
  • 相同處理順序時則由左至右先處理
  • 可利用括弧方式使運算式先處理

範例、先乘除後加減:

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;

結果:
DEPARTMENT_ID
10
20
30

十一、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)

 

總結:

  在這章節裡介紹了兩個供你執行 SQL 的工具,古有云:「工欲善其事必先利其器」其實它們的環境設定還不少,你可以自己慢慢去發掘,如有機會本站會為各位整理並放於技術文件 → 資料庫系統

  來到這裡相信這些基本的操作各位都能輕鬆上手,如有誤刊或任何問題都歡迎先進們給予指教

 


請評分: -3 -2 -1 +1 +2 +3
 
 

Hi-Fi優質I.T網”站內所有文章、圖片除特別加註外均屬本站所有,如有任何問題請來信告知
請支持言論自由,討論區所發表之言論不代表本站立場
Hi-Fi優質I.T網”版權所有2004©
---最佳顯示效果1024*768---