使用 WHERE 子句
資料庫表一般包含大量的資料,很少需要檢索表中所有行,通常只
會根據特定操作或報告的需要提取表資料的子集,只檢索所需資料需要
指定搜索條件(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 子句運算子
我們在關于相等的測驗時看到了第一個 WHERE 子句,它確定一個列是
否包含特定的值,MySQL支持表6-1列出的所有條件運算子

不匹配檢查
以下例子列出不是由供應商 1003 制造的所有產品

何時使用引號單引號用來限定字串,如果將值與串型別的
列進行比較,則需要限定引號,用來與數值列進行比較的值不
用引號,
下面是相同的例子,其中使用 != 而不是 <> 運算子:

范圍值檢查
為了檢查某個范圍的值,可使用 BETWEEN 運算子,其語法與其他 WHERE
子句的運算子稍有不同,因為它需要兩個值,即范圍的開始值和結束值,
例如, BETWEEN 運算子可用來檢索價格在5美元和10美元之間或日期在指
定的開始日期和結束日期之間的所有產品
下面的例子說明如何使用 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 值等進行測
試,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/86045.html
標籤:MySQL
