2. SQL 語法基礎介紹-2

空值的定義
如果資料列中的特定資料欄裡缺乏資料值,此值即稱為空值 (null),或稱此值含有一個空值。空值是無法使用、無法加以指定、不明或不適用的值。空值與零或空格不同。零是數字,而空格則是字元。各種資料類型的資料欄都可能包含空值。不過,部份限制條件 (NOT NULL 與 PRIMARY KEY) 能避免在資料欄中出現空值。

SELECT last_name, job_id, salary, commission_pct 
FROM employees;















運算表示式中的空值
若在運算表示式中,有任一資料欄的值為空值,則結果也會是空值。舉例來說,若您嘗試將數字除以零,則會出現錯誤。不過,要是您將一個數字除以空值,則結果會是空值或為不明的值。
SELECT last_name, 12*salary*commission_pct 
FROM employees;









範例中的員工 King 並未收取任何佣金。而因為算術表示式中的 COMMISSION_PCT 資 料欄是空值,所以結果也會是空值。


定義欄位別名
欄別名重點如下:
  • 重新命名資料欄的標題
  • 在運算時很有用
  • 後面立即接上資料欄名稱 (在資料欄名稱與別名之間, 也可以選擇是否要接 AS 關字。)
  • 如果其中有空格、特殊字元,或為區分大小寫,則需要加上雙引號
SELECT last_name AS name, commission_pct comm 
FROM employees;










第一個範例顯示所有員工的姓名與佣金比例。請注意,在資料欄別名之前使用了選擇的 AS 關鍵字。不論是否使用 AS 關鍵字,查詢的結果都會一致。另外也請注意,該 SQL敘述句的兩 個資料欄別名 name 與 comm 是以小寫顯示,但查詢結果則會以大寫來顯資料欄標題。正如 在上一張投影片中所提及的,資料欄標題預設會以大寫顯示。


SELECT last_name “Name”, salary*12 “Annual Salary” FROM employees;







第二個範例顯示所有員工的姓氏與年薪。因為 Annual Salary 含有一個空格,所以用雙引號 括住。請注意,輸出結果中的資料欄標題與資料欄別名完全相同。

連接運算符號
您可以利用連接運算符號 (||) 將資料欄與其他資料欄、運算表示式或常數值連結,以建立一個字 元表示式,運算子兩邊的資料欄會結合成一個輸出資料欄。

SELECT last_name || job_id AS "Employees" 
FROM employees;









以上範例將 LAST_NAME 與 JOB_ID 做連接,而且別名是 Employees。請注意,這裡的員工姓氏與工作代碼,會結合一個輸出資料欄。
別名前的 AS 關鍵字能讓 SELECT 敘述句更易於判讀。 空值與連接運算子如果您將空值與字元字串連接,結果會是一個字元字串。例如,LAST_NAME || NULL 的結 果是LAST_NAME。


文字字元字串
所謂文字,是指 SELECT 清單中包含的字元、數字或日期,而不是指資料欄名稱或資料欄別名。 每傳回一個資料列,就會輸出文字字元字串。查詢結果中可包含自由格式文字的文字字串,而 且同樣會被視為 SELECT 清單中的一個資料欄。日期與字元文字必須加上單引號 (‘ ’);數字文字則不需要。
SELECT last_name||' is a '||job_id AS "Employee Details" FROM  employees;















範例顯示所有員工的姓氏與工作代碼。此資料欄的標題是員工詳細資訊。請注意SELECT 敘述句單引號之間的空格,這些空格能讓輸出更易判讀。在下面的範例中,各個員工的姓氏與薪資被一個字串所連接,使傳回的資料列更具意義:

SELECT last_name ||': 1 Month salary = '||salary Monthly
FROM employees;























替代用的引號 (q) 運算式
許多 SQL 敘述句會在表示式或條件中使用字元文字。如果文字本身有一個單引號,可使用引號 (q) 運算式,並選擇您自己的引號分界字元。可選擇各種傳統的分界字元,不論是單位元組或多位元組。您也可以從下列字元對中選擇:[ ]、{ }、( )、< >。


SELECT department_name ||q'[, it's assigned Manager Id: ]' ||  
      Manager_id  AS "Department and Manager"
FROM departments;













範例中,字串裡有一個單引號,其通常被解譯為字元字串的分界字元。不過,藉由使 用 q 運算子,方括號 [] 會被當成引號分界字元使用。方括號分界字元之間的字串,則被解譯為 一個文字字元字串。



重複的資料列
以下範例顯示 EMPLOYEES 表格中的所有部門編號。請注意,其中有重複的部門編號。若要刪除結果中重複的資料列,請在 SELECT 子句的 SELECT 關鍵字後面加上DISTINCT 關 鍵字。

SELECT department_id FROM employees;








第二個範例中,EMPLOYEES 表格實際上有 20 個資料列,但其中只有七個唯 一的部門編號。可以在 DISTINCT 限定字元後面指定多個資料欄。

SELECT distinct department_id 
FROM employees;









可以在 DISTINCT 限定字元後面指定多個資料欄。DISTINCT 限定字元會影響所有選取的 資料欄,而結果會是各個資料欄的組合都是獨一無二的。

SELECT distinct department_id, job_id 
FROM employees;






沒有留言:

張貼留言