WHERE 短句及檢索條件

前頁 目錄 下頁

有時候,我們只想拿取符合某個條件的記錄。要達到這個目的,我們可以在 SELECT 語句中使用 WHERE 短句。

在 SELECT 語句中使用 WHERE 短句的語法如下︰

SELECT <字段列表> FROM <表的名稱> WHERE <檢索條件>

只有符合 <檢索條件> 的記錄才會被拿取。

SQL 提供了一系列運算符和關鍵字去表達 <檢索條件>。在這�塈畯怜Q論以下各項︰

比較運算符  

SQL 提供的比較運算符和 Pascal 的一樣︰

運算符 = > < >= <= <>
意義 相等 大於 小於 大於或相等 小於或相等 不等於

WHERE 短句使用比較運算符的方法如下︰

WHERE <算式> <比較運算符> <算式>

一個 <算式> 可以是一個常數、一個字段名稱或由算術運算符(例如 +、-、*、 /)及括號連接成以上各樣的任何組合。

例如︰

列出所有在中國語文及文化科及格(>= 50)的同學的班號、姓名及中國語文及文化科的分數。
SELECT class_num, name, clc FROM s6a WHERE clc >= 50
輸出︰
class_num name clc
1 Chan Wai Man, Raymond 64
2 Chow Chi Ling 70
3 Fung Ching Man, Mandy 72
4 Hung Wai Ming 52
6 Poon Kwok Fai 59
7 Sung Hing Wah, Patrick 70
8 Tang Wing Chi 80
10 Yeung Chun 69
11 Lai Fung Chun 78
13 Man Fook Wing 55
14 Chung Kwok Fai, Fred 72
15 Lee Lai May 67
 
列出所有平均分不及格(< 50)的同學的班號及姓名。
SELECT class_num, name FROM s6a WHERE (clc + ue + pm + phy + cs) / 5 < 50
輸出︰
class_num name
5 Leung King
9 Wong Ka Tak, Kent

如 Pascal 一樣,我們可以使用比較運算符去比較字符算式。字符是跟據英文字母順序排列;不過,大小楷有沒有分別和使用的系統有關。對於 Microsoft Visual FoxPro 及 Microsoft Access 來說,大小楷是沒有分別的。

例如︰

列出所有學生編號是「93」或以上開頭的記錄︰
SELECT * FROM s6a WHERE stud_id >= '93'
輸出︰
class_num stud_id name email clc ue phy pm cs
3 94302 Fung Ching Man, Mandy mandyfung@example.com 72 50 42 59 60
8 97602 Tang Wing Chi s97602@sample.edu.hk 80 79 70 72 69
10 93211 Yeung Chun cyeung@testing.com.hk 69 80 77 60 52
11 96374 Lai Fung Chun s96374@sample.edu.hk 78 75 69 65 61
12 94412 Chan Lai Yin cly@testing.com.hk 43 59 53 61 60
13 98832 Man Fook Wing fwman@testing.com.hk 55 77 34 40 51
14 95343 Chung Kwok Fai, Fred fredchung@example.com 72 62 53 47 50
15 97233 Lee Lai May maylee@testing.com.hk 67 71 56 60 55

條件的組合(AND、OR)  

運算符 AND 及 OR 的使用方法和其他的程序語言所見的一樣︰

列出所有中國語言及文化和英語運用兩科都及格的同學的班號、姓名及中國語文及文化科及運用英語的分數︰
SELECT class_num, name, clc, ue FROM s6a WHERE clc >= 50 AND ue >= 50
輸出︰
class_num name clc ue
1 Chan Wai Man, Raymond 64 55
2

Chow Chi Ling

70 62
3 Fung Ching Man, Mandy 72 50
6 Poon Kwok Fai 59 60
7 Sung Hing Wah, Patrick 70 72
8 Tang Wing Chi 80 79
10 Yeung Chun 69 80
11 Lai Fung Chun 78 75
13 Man Fook Wing 55 77
14 Chung Kwok Fai, Fred 72 62
15 Lee Lai May 67 71
 
列出所有在中國語文及文化科或英語運用不及格(其中一科或兩科都不及格均可)的同學的班號、姓名及中國語文及文化科及英語運用科的分數︰
SELECT class_num, name, clc, ue FROM s6a WHERE clc < 50 OR ue < 50
輸出︰
class_num name clc ue
4 Hung Wai Ming 52 48
5 Leung King 40 50
9 Wong Ka Tak, Kent 35 40
12 Chan Lai Yin 43 59

範圍(BETWEEN … AND)  

WHERE 短句中可以這樣使用 BETWEEN … AND︰

WHERE <算式> BETWEEN <值1> AND <值2>

這 WHERE 短句表示檢索條件是 <算式> 在 <值1> 和 <值2> 之間(包括首尾二項)。因此,這 WHERE 短句和以下的相同︰

WHERE <算式> >= <值1> AND <算式> <= <值2>

例如︰

列出所有在電腦科獲得 50 至 59 分(包括首尾二值)的同學的班號、姓名及電腦科的分數。
SELECT class_num, name, cs FROM s6a WHERE cs BETWEEN 50 AND 59
輸出︰
class_num name cs
1 Chan Wai Man, Raymond 59
4 Hung Wai Ming 59
10 Yeung Chun 52
13 Man Fook Wing 51
14 Chung Kwok Fai, Fred 50
15 Lee Lai May 55

注意︰如果檢索條件要求的範圍不包括首尾二項,我們一定要使用運算符 > 及 <。

列表(IN)  

關鍵字 IN 讓使用者選擇一個列表的值中任何一個。例如︰

列出所有在電腦科獲得 50、60、70、80 或 90 分的同學的班號、姓名及電腦科的分數。
SELECT class_num, name, cs FROM s6a WHERE cs IN (50, 60, 70, 80, 90)
輸出︰
class_num name cs
2

Chow Chi Ling

70
3 Fung Ching Man, Mandy 60
5 Leung King 60
7 Sung Hing Wah, Patrick 70
12 Chan Lai Yin 60
14 Chung Kwok Fai, Fred 50

以上的 SQL 語句和以下等同︰

SELECT class_num, name, cs FROM s6a
  WHERE cs = 50 OR cs = 60 OR cs = 70 OR cs = 80 OR cs = 90)