天天看點

學習筆記 | Ch 04-06 過濾資料

第4課 過濾資料

  • 這一課将講授如何使用

    SELECT

    語句的

    WHERE

    子句指定搜尋條件。我們學習了如何檢驗相等、不相等、大于、小于、值的範圍以及

    NULL

    值等。
學習筆記 | Ch 04-06 過濾資料
學習筆記 | Ch 04-06 過濾資料
學習筆記 | Ch 04-06 過濾資料

4.1 使用WHERE子句

隻檢索所需資料需要指定

搜尋條件

(

search criteria

),搜尋條件也稱為

過濾條件

(

filter condition

)。

SELECT

語句中,資料根據

WHERE

子句中指定的搜尋條件進行過濾。

WHERE

子句在表中(

FROM

子句)之後給出。

注意:

WHERE

子句的位置

在同時使用

ORDER BY

WHERE

子句時,應該讓

ORDER BY

位于

WHERE

之後,否則将會産生錯誤。

4.2

WHERE

子句操作符

學習筆記 | Ch 04-06 過濾資料
  • 并非所有

    DBMS

    都支援這些操作符。

4.2.1 檢查單個值

4.2.2 不比對檢查

注意:是 != 還是 <> ?

!= 和 <>通常可以互換。但是,并非所有DBMS都支援這兩種不等于操作符。

4.2.3 範圍值檢查

要檢查某個範圍的值,可以使用

BETWEEN

操作符。

在使用

BETWEEN

時,必須指定兩個值——所需範圍的低端值和高端值。這兩個值必須用

AND

關鍵字分割。

BETWEEN

比對範圍中所有的值,包括指定的開始值和結束值。

4.2.4 空值檢查

表設計人員可以指定其中的列能否不包含值。

在一個列不包含值時,稱其包含空值

NULL

NULL

無值

no value

,它與字段包含0,空字元或僅僅包含空格不同。

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

OR

操作符的WHERE子句,都應該使用圓括号明确地分組操作符。

5.2 IN操作符

IN操作符用來指定條件範圍,範圍中的每一個條件都可以進行比對。

IN

取一組由逗号分割、括在圓括号中的合法值。

IN

操作符完成了與

OR

相同的功能。

為什麼要使用

IN

操作符呢?

  • 在有很多合法選項時,

    IN

    操作符的文法更清楚,更直覺。
  • 在與其他

    AND

    OR

    操作符組合使用IN時,求值順序更容易管理。
  • IN操作符一般比一組

    OR

    操作符執行得更快(在上面這個合法選項很少的例子中,你看不出性能差異)。
  • IN的最大優點是可以包含其他

    SELECT

    語句,能夠更動态地建立

    WHERE

    子句。

5.3

NOT

操作符

WHERE

子句中的

NOT

操作符有且隻有一個功能,那就是否定其後所跟的任何條件。

NOT

關鍵字可以用在要過濾的列前,而不僅是在其後。

說明:

MariaDB

中的

NOT

MariaDB

支援使用

NOT

否定

IN

BETWEEN

EXIST

子句。大多數

DBMS

允許使用

NOT

否定任何條件。

第6課 用通配符進行過濾

這一課介紹什麼是通配符、如何在

WHERE

子句中使用通配符以及怎樣使用

LIKE

操作符進行通配搜尋,以便對資料進行複雜過濾。還說明了通配符應該細心使用,不要使用過度。

學習筆記 | Ch 04-06 過濾資料

6.1

LIKE

操作符

利用通配符,可以建立比較特定資料的搜尋模式。

通配符

wildcard

用來比對值的一部分的特殊字元。

搜尋模式

search pattern

由字面值、通配符或兩者組合構成的搜尋條件。

通配符本身實際上是

SQL

WHERE

子句中有特殊含義的字元,

SQL

支援幾種通配符。為在搜尋子句中使用通配符,必須使用

LIKE

操作符。

LIKE

訓示

DBMS

,後跟的搜尋模式利用通配符比對而不是簡單的相等比對進行比較。

謂詞predicate

操作符何時不是操作符?答案是,它作為謂詞時。從技術上說,

LIKE

謂詞

而不是操作符。

通配符搜尋隻能用于文本字段(字元串),非文本資料類型字段不能使用通配符搜尋。

6.1.1 百分号

%

通配符

在搜尋串中,

%

表示任何字元出現任意次數。

說明:區分大小寫

根據

DBMS

的不同及其配置,搜尋可以是區分大小寫的。例如,

‘%fish%’

。比對不到’daFishdad’。
  • 通配符可在搜尋模式中的任意位置使用,并且可以使用多個通配符。

說明:請注意後面所跟的空格

包括

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課