第4課 過濾資料
- 這一課将講授如何使用
語句的SELECT
子句指定搜尋條件。我們學習了如何檢驗相等、不相等、大于、小于、值的範圍以及WHERE
值等。NULL
4.1 使用WHERE子句
隻檢索所需資料需要指定
搜尋條件
(
search criteria
),搜尋條件也稱為
過濾條件
(
filter condition
)。
在
SELECT
語句中,資料根據
WHERE
子句中指定的搜尋條件進行過濾。
WHERE
子句在表中(
FROM
子句)之後給出。
注意:
WHERE
子句的位置
在同時使用
和
ORDER BY
子句時,應該讓
WHERE
位于
ORDER BY
之後,否則将會産生錯誤。
WHERE
4.2 WHERE
子句操作符
WHERE
- 并非所有
都支援這些操作符。DBMS
4.2.1 檢查單個值
4.2.2 不比對檢查
注意:是 != 還是 <> ?
!= 和 <>通常可以互換。但是,并非所有DBMS都支援這兩種不等于操作符。
4.2.3 範圍值檢查
要檢查某個範圍的值,可以使用
BETWEEN
操作符。
在使用
BETWEEN
時,必須指定兩個值——所需範圍的低端值和高端值。這兩個值必須用
AND
關鍵字分割。
BETWEEN
比對範圍中所有的值,包括指定的開始值和結束值。
4.2.4 空值檢查
表設計人員可以指定其中的列能否不包含值。
在一個列不包含值時,稱其包含空值
NULL
。
無值
NULL
,它與字段包含0,空字元或僅僅包含空格不同。
no value
SELECT
語句有一個特殊的
WHERE
子句,可用來檢查具有
NULL
值的列。這個
WHERE
子句就是
IS NULL
子句。
注意:
NULL
和非比對
過濾資料時,一定要驗證被過濾列中含
的行确實出現在傳回的資料中。
NULL
4.3 小結
第5課 進階過濾資料
講授如何組合
WHERE
子句以建立功能更強、更進階的搜尋條件。
講授了如何使用
AND
和
OR
操作度組合成
WHERE
子句。
講授了如何明确地管理求值順序,如何使用
NOT
和
IN
操作符。
5.1 組合WHERE子句
SQL
允許給出多個
WHERE
子句。這些子句有兩種使用方式,即以
AND
子句或
OR
子句的方式使用。
操作符
operator
:
用來聯結或改變
子句中的子句的關鍵字,也稱為邏輯操作符
WHERE
。
logical operator
5.1.1 AND操作符
要通過不止一個列進行過濾,可以使用
AND
操作符給
WHERE
子句附加條件。
AND
訓示
DBMS
隻傳回滿足所有給定條件的行。
- 可以增加多個過濾條件,每個條件間都要使用
關鍵字。AND
5.1.2 OR操作符
許多
DBMS
在
OR WHERE
子句的第一個條件得到滿足的情況下,就不再計算第二個條件了。
OR
操作符告訴
DBMS
比對任一條件而不是同時比對兩個條件。
5.1.3 求值順序
WHERE
子句可以包含任意數目的
AND
和
OR
操作符。允許兩者結合以進行複雜、進階的過濾。
提示:在
WHERE
子句中使用圓括号
任何時候使用具有
和
AND
操作符的WHERE子句,都應該使用圓括号明确地分組操作符。
OR
5.2 IN操作符
IN操作符用來指定條件範圍,範圍中的每一個條件都可以進行比對。
IN
取一組由逗号分割、括在圓括号中的合法值。
IN
操作符完成了與
OR
相同的功能。
為什麼要使用
IN
操作符呢?
- 在有很多合法選項時,
操作符的文法更清楚,更直覺。IN
- 在與其他
和AND
操作符組合使用IN時,求值順序更容易管理。OR
- IN操作符一般比一組
操作符執行得更快(在上面這個合法選項很少的例子中,你看不出性能差異)。OR
- IN的最大優點是可以包含其他
語句,能夠更動态地建立SELECT
子句。WHERE
5.3 NOT
操作符
NOT
WHERE
子句中的
NOT
操作符有且隻有一個功能,那就是否定其後所跟的任何條件。
NOT
關鍵字可以用在要過濾的列前,而不僅是在其後。
說明:中的
MariaDB
NOT
支援使用
MariaDB
否定
NOT
、
IN
和
BETWEEN
子句。大多數
EXIST
允許使用
DBMS
否定任何條件。
NOT
第6課 用通配符進行過濾
這一課介紹什麼是通配符、如何在
WHERE
子句中使用通配符以及怎樣使用
LIKE
操作符進行通配搜尋,以便對資料進行複雜過濾。還說明了通配符應該細心使用,不要使用過度。
6.1 LIKE
操作符
LIKE
利用通配符,可以建立比較特定資料的搜尋模式。
通配符
wildcard
用來比對值的一部分的特殊字元。
搜尋模式
由字面值、通配符或兩者組合構成的搜尋條件。
search pattern
通配符本身實際上是
SQL
的
WHERE
子句中有特殊含義的字元,
SQL
支援幾種通配符。為在搜尋子句中使用通配符,必須使用
LIKE
操作符。
LIKE
訓示
DBMS
,後跟的搜尋模式利用通配符比對而不是簡單的相等比對進行比較。
操作符何時不是操作符?答案是,它作為謂詞時。從技術上說,
謂詞predicate
是
LIKE
而不是操作符。
謂詞
通配符搜尋隻能用于文本字段(字元串),非文本資料類型字段不能使用通配符搜尋。
6.1.1 百分号
%
通配符
在搜尋串中,
%
表示任何字元出現任意次數。
說明:區分大小寫
根據
的不同及其配置,搜尋可以是區分大小寫的。例如,
DBMS
。比對不到’daFishdad’。
‘%fish%’
- 通配符可在搜尋模式中的任意位置使用,并且可以使用多個通配符。
說明:請注意後面所跟的空格
包括
在内的許多
Access
都用空格來填補字段的内容。簡單的解決方案是給搜尋模式再增加一個
DBMS
号:
%
還比對
'F%y%'
y
後面的空格。更好的解決辦法是用函數去掉空格。
注意:請注意
通配符%看起來像是可以比對任何東西,但有個例外,這就是
NULL
。子句
NULL
不會比對産品名稱為
WHERE prod_name LIKE '%'
的行。
NULL
6.1.2 下劃線_通配符
下劃線的用途與
%
一樣,但它隻比對單個字元,而不是多個字元。
說明:
DB2
通配符
DB2不支援通配符_。
說明:
Access
通配符
如果使用的是
,需要使用
Microsoft Access
而不是
?
。
_
6.1.3 方括号
[]
通配符
方括号通配符用來制定一個字元集。它必須比對指定位置的一個字元。
說明:并不總是支援集合
與前面描述的通配符不一樣,并不是所有
都支援用來建立集合的
DBMS
。隻有微軟的
[]
和
Access
支援集合。為确定你使用的
SQL Server
是否支援集合,請參閱相應的文檔。
DBMS
-
比對方括号中任意一個字元,它也隻能比對單個字元。[JM]
- 此通配符可以用字首字元
脫字号來否定。^
說明:
Access
中的否定集合
如果使用的是
,需要用
Microsoft Access
而不是
!
來否定一個集合,是以,使用的是
^
而不是
[!JM]
。
[^JM]
- 可以使用
操作符得出類似的結果。NOT
的唯一優點是在使用多個^
子句時可以簡化文法。WHERE
6.2 使用通配符的技巧
- 不要過度使用通配符。如果其他操作符能達到相同的目的,應該使用其他操作符。
- 在确實需要使用通配符時,也盡量不要把它們用在搜尋模式的開始處。把通配符置于開始處,搜尋起來是最慢的。
- 仔細注意通配符的位置。如果放錯地方,可能不會傳回想要的資料。
參考資料
- 《SQL必知必會》第4課 — 第6課