數據庫表通常包含大量的數據,不多須要檢索表中全部行。一般只
會根據特定操做或報告的須要提取表數據的子集。只檢索所需數據須要
指定搜索條件(search criteria),搜索條件也稱爲過濾條件(filter
condition)。
在 SELECT 語句中,數據根據 WHERE 子句中指定的搜索條件進行過濾。
WHERE 子句在表名( FROM 子句)以後給出,
這條語句從 products 表中檢索兩個列,但不返回全部行,只返
回 prod_price 值爲 2.50 的行數據庫
這個例子採用了簡單的相等測試:它檢查一個列是否具備指定的值,
據此進行過濾。可是SQL容許作的事情不只僅是相等測試服務器
SQL過濾與應用過濾 數據也能夠在應用層過濾。爲此目
的,SQL的 SELECT 語句爲客戶機應用檢索出超過實際所需的
數據,而後客戶機代碼對返回數據進行循環,以提取出須要
的行。網絡
一般,這種實現並不使人滿意。所以,對數據庫進行了優化,
以便快速有效地對數據進行過濾。讓客戶機應用(或開發語言)
處理數據庫的工做將會極大地影響應用的性能,而且使所建立
的應用徹底不具有可伸縮性。此外,若是在客戶機上過濾數據,
服務器不得不經過網絡發送多餘的數據,這將致使網絡帶寬的
浪費。性能
WHERE 子句的位置 在同時使用 ORDER BY 和 WHERE 子句時,應
該讓 ORDER BY 位於 WHERE 以後,不然將會產生錯誤測試
咱們在關於相等的測試時看到了第一個 WHERE 子句,它肯定一個列是
否包含特定的值。MySQL支持表6-1列出的全部條件操做符
優化
如下例子列出不是由供應商 1003 製造的全部產品
什麼時候使用引號單引號用來限定字符串。若是將值與串類型的
列進行比較,則須要限定引號。用來與數值列進行比較的值不
用引號。設計
下面是相同的例子,其中使用 != 而不是 <> 操做符:
3d
爲了檢查某個範圍的值,可以使用 BETWEEN 操做符。其語法與其餘 WHERE
子句的操做符稍有不一樣,由於它須要兩個值,即範圍的開始值和結束值。
例如, BETWEEN 操做符可用來檢索價格在5美圓和10美圓之間或日期在指
定的開始日期和結束日期之間的全部產品blog
下面的例子說明如何使用 BETWEEN 操做符,它檢索價格在5美圓和10
美圓之間的全部產品
開發
從這個例子中能夠看到,在使用 BETWEEN 時,必須指定兩個值
——所需範圍的低端值和高端值。這兩個值必須用 AND 關鍵字
分隔。 BETWEEN 匹配範圍中全部的值,包括指定的開始值和結束值
在建立表時,表設計人員能夠指定其中的列是否能夠不包含值。在
一個列不包含值時,稱其爲包含空值 NULL
NULL 無值(no value),它與字段包含 0 、空字符串或僅僅包含
空格不一樣
SELECT 語句有一個特殊的 WHERE 子句,可用來檢查具備 NULL 值的列。
這個 WHERE 子句就是 IS NULL 子句。其語法以下:
這條語句返回沒有價格(空 prod_price 字段,不是價格爲 0 )的全部
產品,因爲表中沒有這樣的行,因此沒有返回數據
NULL 與不匹配 在經過過濾選擇出不具備特定值的行時,你
可能但願返回具備 NULL 值的行。可是,不行。由於未知具備
特殊的含義,數據庫不知道它們是否匹配,因此在匹配過濾
或不匹配過濾時不返回它們。
所以,在過濾數據時,必定要驗證返回數據中確實給出了被
過濾列具備 NULL 的行。
本章介紹瞭如何用 SELECT 語句的 WHERE 子句過濾返回的數據。咱們學 習瞭如何對相等、不相等、大於、小於、值的範圍以及 NULL 值等進行測 試。