MySQL必知必會六:過濾數據

6.1 使用WHERE子句

只檢索所需數據需要指定搜索條件( search criteria) ,搜索條件也稱爲過濾條件( filter condition)。

SELECT語句中,數據根據WHERE子句中指定的搜索條件進行過濾。WHERE子句在表名(FROM子句)之後給出,如下所示:

mysql> SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50;
+---------------+------------+
| prod_name     | prod_price |
+---------------+------------+
| Carrots       |       2.50 |
| TNT (1 stick) |       2.50 |
+---------------+------------+
  • 分析:這條語句從products表中檢索兩個列,但不返回所有行,只返回prod_price值爲2.50的行

WHERE子句的位置:在同時使用ORDER BY和WHERE子句時,應該讓ORDER BY位於WHERE之後, 否則將會產生錯誤

6.2 WHERE子句操作符

操作符 說明
= 等於
<> 不等於
!= 不等於
< 小於
<= 小於等於
> 大於
>= 大於等於
BETWEEN 在指定的兩個值之間

6.2.1 檢查單個值

mysql> SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';
+-----------+------------+
| prod_name | prod_price |
+-----------+------------+
| Fuses     |       3.42 |
+-----------+------------+
  • 分析:檢查WHERE prod_name=‘fuses’語句,它返回prod_name的值爲Fuses的一行。 MySQL在執行匹配時默認不區分大小寫,所以fusesFuses匹配。

現在來看幾個使用其他操作符的例子。第一個例子是列出價格小於10美元的所有產品:

mysql> SELECT prod_name, prod_price FROM products WHERE prod_price < 10;
+---------------+------------+
| prod_name     | prod_price |
+---------------+------------+
| .5 ton anvil  |       5.99 |
| 1 ton anvil   |       9.99 |
| Carrots       |       2.50 |
| Fuses         |       3.42 |
| Oil can       |       8.99 |
| Sling         |       4.49 |
| TNT (1 stick) |       2.50 |
+---------------+------------+

下一條語句檢索價格小於等於10美元的所有產品(輸出的結果比第一個例子輸出的結果多兩種產品):

mysql> SELECT prod_name, prod_price FROM products WHERE prod_price <= 10;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| .5 ton anvil   |       5.99 |
| 1 ton anvil    |       9.99 |
| Bird seed      |      10.00 |
| Carrots        |       2.50 |
| Fuses          |       3.42 |
| Oil can        |       8.99 |
| Sling          |       4.49 |
| TNT (1 stick)  |       2.50 |
| TNT (5 sticks) |      10.00 |
+----------------+------------+

6.2.2 不匹配檢查

以下例子列出不是由供應商1003製造的所有產品:

mysql> SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003;
+---------+--------------+
| vend_id | prod_name    |
+---------+--------------+
|    1001 | .5 ton anvil |
|    1001 | 1 ton anvil  |
|    1001 | 2 ton anvil  |
|    1002 | Fuses        |
|    1002 | Oil can      |
|    1005 | JetPack 1000 |
|    1005 | JetPack 2000 |
+---------+--------------+

何時使用引號:如果仔細觀察上述WHERE子句中使用的條件,會看到有的值括在單引號內(如前面使用的’fuses’),而有的值未括起來。單引號用來限定字符串。如果將值與字符串類型的列進行比較,則需要限定引號。用來與數值列進行比較的值不用引號。

下面是相同的例子,其中使用!=而不是<>操作符:

mysql> SELECT vend_id, prod_name FROM products WHERE vend_id != 1003;

6.2.3 範圍值檢查

BETWEEN操作符需要兩個值,即範圍的開始值和結束值。
下面的例子說明如何使用BETWEEN操作符,它檢索價格在5美元和10美元之間的所有產品:

mysql> SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| .5 ton anvil   |       5.99 |
| 1 ton anvil    |       9.99 |
| Bird seed      |      10.00 |
| Oil can        |       8.99 |
| TNT (5 sticks) |      10.00 |
+----------------+------------+
  • 分析:從這個例子中可以看到,在使用BETWEEN時,必須指定兩個值——所需範圍的低端值和高端值。這兩個值必須用AND關鍵字分隔。 BETWEEN匹配範圍中所有的值,包括指定的開始值和結束值。

6.2.4 空值檢查

NULL 無值(no value),它與字段包含0、空字符串或僅僅包含空格不同。

SELECT語句有一個特殊的WHERE子句,可用來檢查具有NULL值的列。這個WHERE子句就是IS NULL子句。其語法如下:

mysql> SELECT cust_id FROM customers WHERE cust_email IS NULL;
+---------+
| cust_id |
+---------+
|   10002 |
|   10005 |
+---------+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章