1. 程式人生 > >資料過濾之WHERE

資料過濾之WHERE

1. 簡單的WHERE子句

MySQL在執行匹配時預設不區分大小寫
如:SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';
所以fuses與Fuses都匹配出來了

何時使用引號
單引號用來限定字串。
如果將值與串型別的列進行比較,則需要限定引號。用來與數值列進行比較的值不用引號。

where子句操作符

範圍檢查
在使用BETWEEN時,必須指定兩個值---所需範圍的低端值和高階值。這兩個值必須用AND關鍵字分隔。BETWEEN匹配範圍中所有的值,包括指定的開始值和結束值。

空值檢查


在建立表時,表設計人員可以指定其中的列是否可以不包含值。在一個列不包含值時,稱其為包含空值NULL。
NULL:無值(no value),它與欄位包含0、空字串或僅僅包含空格不同。
SELECT語句有一個特殊的WHERE子句,可以來檢查具有NULL值得列。這個WHERE子句就是IS NULL子句。
如:SELECT cust_id FROM customers WHERE cust_email IS NULL;

note:
NULL與不匹配,在通過過濾選擇出不具有特定值的行時,可能希望返回具有NULL值的行,但是,不行。因為未知具有特殊的含義,資料庫不知道他們是否匹配,所以在匹配過濾或不匹配過濾時不返回它們。因此,在過濾資料時,一定要驗證返回資料中確實給出了被過濾列具有NULL的行

2. where子句之NOT和IN操作符的使用

AND和OR操作符
計算次序:SQL(像多數語言一樣)在處理OR操作符前,優先處理AND操作符。
避免出錯:任何使用具有AND和OR操作符的WHERE子句,都應該使用圓括號明確地分組操作符。

IN操作符
WHERE子句中用來指定要匹配值的清單的關鍵字,功能與OR相當;
使用IN操作符的優點具體如下:
1. 在使用長的合法選項清單時,IN操作符的語法更清楚且更直觀。
2. 在使用IN時,計算的次序更容易管理(因為使用的操作符更少)。
3. IN操作符一般比OR操作符清單執行更快。
4. IN的最大優點是可以包含其他SELECT語句,使得能夠更動態地建立WHERE子句。

NOT操作符
WHERE子句中的NOT操作符有且只有一個功能,那就是否定它之後所跟的任何條件;
MySQL支援使用NOT對IN、BETWEEN和EXISTS子句取反,這與多數其他DBMS允許使用NOT對各種條件取反有很大的差別。

3. 萬用字元過濾之LIKE操作符

萬用字元:用來匹配值得一部分的特殊字元。
LIKE指示MySQL,後跟的搜尋模式利用萬用字元匹配而不是直接相等匹配進行比較。

百分號(%)萬用字元
在搜尋串中,%表示任何字元出現任意次數。
注意NULL,雖然似乎%萬用字元可以匹配任何東西,但有一個例外,即NULL。即使是WHERE prod_name LIKE '%'也不能匹配用值NULL作為產品的行。

下劃線(_)萬用字元
下劃線的用途與%一樣,但下劃線只匹配單個字元而不是多個字元。

MySQL的萬用字元很有用。
但這種功能是有代價的:萬用字元搜尋的處理一般要比前面討論的其他搜尋所花時間更長。
萬用字元的使用技巧:
(1). 不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使用其他操作符。
(2). 在確實需要使用萬用字元時,除非絕對有必要,否則不要把它們用在搜尋模式的開始處。把萬用字元置於搜尋模式的開始處,搜尋起來是最慢的。
(3). 仔細注意萬用字元的位置。如果放錯地方,可能不會返回。