MySQL 教材:where 子句

更一般性地解釋查詢語法,可以理解做以下句型

select 輸出欄位 from 表格 where 子句;
前一節中,我們已經看到兩種 where 子句: 現在要說說 where 子句有哪些基本句型?

首先,要提醒讀者,當欄位的型態是字元類或數值類的時候, 都可以用 = 和 !=。但是數值類的「值」不需要用引號括起來。例如

select * from ZIP where zip = 100;

對於數值類的欄位,除了 = 和 != 之外,還可以用 > < >= <= 作為欄位篩選的條件。例如

select * from ZIP where zip <= 100;
或者
select * from ZIP where zip > 980;

對於字元類的欄位,可以做部分比對。其語法是 like 或 not like, 而在比對字串中,用百分號 % 代表類似 UNIX 中 * 號的 萬用字串 角色: 一個 % 代表零個、一個或任意多個任意字元。例如

select * from ZIP where zone like '嘉義%';
則列出「嘉義市」或「嘉義縣」的資料。而
select * from ZIP where area like '中%';
得到
+-----+------+--------+--------+
| id  | zip  | zone   | area   |
+-----+------+--------+--------+
|   1 |  100 | 臺北市 | 中正區 |
|   3 |  104 | 臺北市 | 中山區 |
|  15 |  202 | 基隆市 | 中正區 |
|  16 |  203 | 基隆市 | 中山區 |
|  34 |  235 | 臺北縣 | 中和   |
|  75 |  320 | 桃園縣 | 中壢   |
| 106 |  400 | 臺中市 | 中區   |
| 174 |  606 | 嘉義縣 | 中埔   |
| 208 |  700 | 臺南市 | 中區   |
+-----+------+--------+--------+
萬用字串可以放在字串前面,例如
select * from ZIP where area like '%和';
得到
+----+------+--------+------+
| id | zip  | zone   | area |
+----+------+--------+------+
| 33 |  234 | 臺北縣 | 永和 |
| 34 |  235 | 臺北縣 | 中和 |
+----+------+--------+------+
萬用字串其實可以放在字串前面和後面,例如
select * from ZIP where area like '%和%';
得到
+-----+------+--------+------+
| id  | zip  | zone   | area |
+-----+------+--------+------+
|  33 |  234 | 臺北縣 | 永和 |
|  34 |  235 | 臺北縣 | 中和 |
| 122 |  424 | 臺中縣 | 和平 |
| 142 |  508 | 彰化縣 | 和美 |
+-----+------+--------+------+
但是萬用字串不能放在兩個字串的中間,例如
select * from ZIP where area like '臺%市';
查不到結果。

反之,not like 配合萬用字串就可以做排除性的查詢,例如

select * from ZIP where area not like '臺北%';
就是查詢除了臺北縣和臺北市以外的資料。

前述的 = != > < >= <= like 和 not like 都是基本比對語句, 這些語句可以用 and 或 or 來組成更複雜的 where 子句。例如

select zip,zone,area from ZIP where zone like '臺中%' and area = '東勢';
就特定查到臺中縣的東勢地區。而
select zip,zone,area from ZIP where zip >= 350 and zip <= 359;
就查到郵遞區號介於 350 和 359 之間的資料。還有
select * from ZIP where zone like '%海%' or area like '%海%';
則把行政區域或者地名中含有「海」字的資料都印出來了,也就是
+-----+------+----------+------+
| id  | zip  | zone     | area |
+-----+------+----------+------+
| 330 |  957 | 台東縣   | 海端 |
| 362 |  817 | 南海諸島 | 東沙 |
| 363 |  819 | 南海諸島 | 南沙 |
+-----+------+----------+------+

這一節所說的 where 子句,完全可以應用在 刪除/修改資料 裡面所提的 DELETE 和 UPDATE 兩個指令。

習題

  1. 郵遞區域中,有多少地名是以「五」開頭的?多少是以「六」開頭的?
  2. 郵遞區域中,有多少地名是以「山」結尾的?多少是以「水」結尾的?
[BCC16-A]
單維彰 (01/05/31) ---
[Prev] [Next] [Up]