4. SQL 語法邏輯條件

一個邏輯條件會結合兩個元件條件的結果,根據這些條件產生單一結果,或反向改變單一條件的結果。所有條件的最後結果必須為真,才會傳回資料列。也就是說運用邏輯條件可以使用 AND 與 OR 運算式,在一個 WHERE 子句中使用多個條件。SQL 語法中有三個邏輯運算式如下表:
運算式說明
AND如果兩個元件條件均為真,則傳回 TRUE
OR如果其中一個元件條件為真,則傳回 TRUE
NOT如果下列條件為偽,則傳回 TRUE


AND 運算式
在範例中,兩個條件都必須為真,才會選取記錄。所以,只會選取職稱中有 ‘MAN’ 字串,而且薪資高於 $10,000 以上的員工。
SELECT employee_id, last_name, job_id, salary FROM   employees
WHERE  salary >=10000
AND  job_id LIKE '%MAN%' ;




所有字元搜尋都會區分大小寫。如果 ‘MAN’ 不是大寫,就不會傳回資料列。字元字串可以用引號括起來。下表顯示以 AND 來結合兩個表示式的結果:
ANDTRUEFALSENULL
TRUETRUEFALSENULL
FALSEFALSEFALSEFALSE
NULLNULLFALSENULL



OR 運算式
在範例中,兩個條件之一必須為真,才會選取記錄。所以,會選取工作 ID 中包含 ‘MAN’ 字串或薪資大於等於 $10,000 的員工。
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000 OR job_id LIKE '%MAN%' ;









下列表格顯示以 OR 來結合兩個表示式的結果:
ORTRUEFALSENULL
TRUETRUETRUETRUE
FALSETRUEFALSENULL
NULLTRUENULLNULL


NOT 運算式
範例顯示工作 ID 不是 IT_PROG、ST_CLERK 或 SA_REP 的所有員工,其姓氏與工作 ID。

SELECT last_name, job_id FROM employees 
WHERE  job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ;










下列表格顯示將 NOT 運算式套用到條件的結果:
NOTTRUEFALSENULL
FALSETRUENULL

注意:NOT 運算子也可以與其他 SQL 運算子一起使用,例如 BETWEEN、LIKE、NULL。

... WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP')
... WHERE salary NOT BETWEEN 10000 AND 15000
... WHERE last_name NOT LIKE '%A%'
... WHERE commission_pct IS NOT NULL


優先順序的規則
優先順序的規則決定評估和計算表示式的順序。此表格列出優先順序的預設順序。您可以在希望先計算的表示式外加上括弧,以更改預設的順序。
運算式意義
1數學運算表示式
2串接表示式
3比較條件
4IS [NOT] NULL, LIKE, [NOT] IN
5[NOT] BETWEEN
6不等於
7NOT 邏輯條件
8AND 邏輯條件
9OR 邏輯條件


AND 運算子優先順序的範例
SELECT last_name, job_id, salary FROM   employees
WHERE  job_id = 'SA_REP'
OR     job_id = 'AD_PRES'
AND    salary > 15000;









在以上範例中有兩個條件:
  • 第一個條件是工作 ID 為 AD_PRES 且薪資高於 $15,000。
  • 第二個條件是工作 ID 為 SA_REP。
所以,SELECT 敘述句應解讀如下:“如果員工是總裁且薪資大於 $15,000,或此名員工是業務代表,則選擇資料。”

使用括弧的範例

SELECT last_name, job_id, salary FROM  employees
WHERE  (job_id = 'SA_REP'
OR     job_id = 'AD_PRES')
AND    salary > 15000;




在以上範例中有兩個條件:
第一個條件是工作 ID 為 AD_PRES 或 SA_REP。
第二個條件是薪資大於 $15,000。
所以,SELECT 敘述句應解讀如下: “如果員工是總裁或業務代表,且此名員工薪資大於 $15,000,則選擇資料列。”

沒有留言:

張貼留言