查詢表中滿足條件的記錄-WHERE子句

查詢表中滿足條件的記錄-WHERE子句

 

在使用SQL語句進行查詢操作時,很多時候開發人員或者用戶並不是對數據表中的全部記錄感興趣,而隻是想得到實際需要的數據記錄,這時就需要對查詢結果進行限制。在SQL語句中可以使用WHERE子句過濾掉不符合條件的記錄。 

1.比較查詢 

在WHERE子句中可以使用比較運算符對數值、字符值等信息進行查詢。比較運算符這裡歸納為三類:算術比較運算符、BETWEEN…AND運算符和IN運算符。這一節將分別對對這三種比較運算符的查詢方法進行介紹。最後還將介紹WHERE子句中字符串和時間的比較方法。 

算術比較運算符 

SQL語句中的算術比較運算符主要包括=(等於)、>=(大於等於)、<=(小於等於)、>(大於)、<(小於)、!=(不等於)、 <>(不等於)、!>(不大於)、!<(不小於)。在SELECT語句的WHERE子句中可以使用算術比較運算符對指定列進行比較,其語法格式如下: 

字段1  比較運算符 值 

其中,字段1表示數據表中需要查詢的字段列名,字段1後面跟的是算術比較運算符,值表示的是指定列要比較的數值。使用比較運算符返回的結果是一個邏輯值。如果邏輯值為TRUE,則會返回查詢到的記錄,如果邏輯值為FALSE,則不會返回相應的查詢結果。 

註意:在WHERE子句中比較的是數值型數據時,可以不使用單引號;如果是其他類型的數據(例如,字符串、時間型等)則必須使用單引號將其引住。另外,WHERE子句中比較運算符的左側和右側的數據類型必須是兼容的。 

BETWEEN…AND運算符查詢指定條件范圍的記錄 

BETWEEN…AND運算符可以用來查詢指定條件范圍的記錄。使用BETWEEN…AND運算符查詢時在BETWEEN運算符和AND運算符後面都需要給定一個值。其語法格式如下: 

字段1 BETWEEN 值1  AND 值2 

其中,字段1表示數據表中需要查詢的字段;值1為給定數值中較小的值;值2為給定數值中較大的值。其最終查詢的結果也包括值1和值2本身的值。 

提示:SQL中,可以使用NOT BETWEEN AND運算符來排除一些記錄。例如要查詢教師信息表中年齡不在30~50之間的教師信息,就可以通過NOT BETWEEN AND來實現。 

IN運算符查詢與列表匹配的記錄 

IN運算符查詢用來查詢與列表匹配的記錄。使用IN運算符,可以將滿足列表中滿足指定表達式的任何一個值都查詢出來。IN運算符後的屬性值可以是一個,也可以有多個,多個屬性值之間需要要用逗號分隔。其語法格式如下: 

字段1 IN(屬性值1, 屬性值2, 屬性值3…) 

其中字段1表示數據表中需要查詢的字段;屬性值1, 屬性值2, 屬性值3分別表示需要查詢的值。屬性值既可以是數字類型的也可以是字符類型的值。如果屬性值是字符類型的值,則需要使用單引號將其引住。 

字符串比較 

在使用SQL語句進行比較查詢時,經常會遇到字符串比較問題。對字符串進行比較時,常用的資料庫都可以使用比較運算符對字符串進行比較,另外,在MySQL資料庫中還可以使用關鍵字BINARY對字符串進行二進制比較。 

使用比較運算符對字符串進行比較時,比較運算符的左右兩側字符值應該用單引號引住。 

SELECT 'mysql' = 'MySQL' 

 

 

 

如果希望比較的字符串區分大小寫,可以使用BINARY關鍵字對字符串進行二進制比較。使用BINARY關鍵字,會把一個字符串(數字)轉換成一個二進制對象。格式如下: 

SELECT string1 比較運算符 BINARY string2  或
SELECT BINARY string1 比較運算符 string2

SELECT 'mysql' = BINARY 'MySQL' 

 

 

 

日期時間的比較 

在WHERE子句中對日期值和時間進行比較時,要比較的日期和時間必須是資料庫伺服器可以接受的字符串格式。例如,在學生信息表(T_student)中,學生的出生日期被設置為DATETIME日期類型的變量。要想在WHERE子句中對學生的出生日期值進行比較,可以使用單引號將該日期值引住。 

2.邏輯查詢 

在SQL語句中邏輯運算符主要包括AND、OR和NOT三種。其中AND運算符用來查詢同時滿足多個條件的記錄,OR運算符用來查詢多個條件中滿足其中任一個條件的記錄,NOT運算符用來查詢滿足相反條件的記錄。 

使用AND運算符查詢同時滿足多個條件的記錄 

在SQL的執行操作中,很多情況下,WHERE子句並不是隻希望滿足一個條件,而是希望最終查詢的結果必須同時滿足多個條件(兩個或者兩個以上)。這個時候就需要使用AND運算符。其語法格式如下: 

條件1 AND 條件2 

其中條件1,條件2是在WHERE子句中進行查詢時需要滿足的條件。如果希望使用AND運算符在WHERE子句中連接多個條件。可以使用下面的語法格式。 

條件1 AND 條件2  AND條件3 … 

這裡使用兩個AND運算符來連接3個條件。多個AND運算符進行連接操作時,每一個AND運算符兩側的值必須都為TRUE,也就是說這些條件都同時被滿足的情況下,結果才會被顯示出來。 

說明:在Microsoft SQL Server資料庫中,使用“&”符號代替AND運算符表示邏輯與運算。 

使用OR運算符查詢滿足任一條件的記錄 

在使用SQL進行查詢操作時,有些時隻是希望查詢的結果中滿足多個條件中的任一條件即可。這個時候就需要使用OR運算符。使用OR運算符可以用來查詢滿足任一條件的記錄。其語法格式如下: 

條件1 OR條件2 

其中條件1,條件2是在WHERE子句中進行查詢時需要的條件。這兩個條件中,隻要符合其中任何一個條件,則符合該條件的記錄就會被檢索出來。如果希望使用OR運算符在WHERE子句中連接多個條件。可以使用下面的語法格式 

條件1 OR條件2  OR條件3 … 

這裡使用兩個OR運算符來連接3個條件。多個OR運算符進行連接操作時,兩側的條件中任何一個條件為TRUE,滿足該條件的記錄就會被顯示出來。 

說明:在Microsoft SQL Server資料庫中,使用“|”符號代替OR運算符表示邏輯與運算。 

使用NOT運算符對查詢條件的佈爾值求反 

有些時候,需要查詢不滿足指定條件的記錄,這個時候就需要使用NOT運算符。NOT運算符對查詢條件的佈爾值求反。 

說明:在Microsoft SQL Server資料庫中,使用“~”符號代替NOT運算符表示邏輯與運算。 

這3個邏輯運算符也可以放到一個SQL語句中混合使用。在這3個邏輯運算符中,NOT的優先級最高,AND的優先級要高於OR。為瞭便於理解,一般在混合使用這3個邏輯運算符時,可以使用括號將每一個部分括起來。 

3.空值查詢 

在使用SQL語句執行查詢操作時,還有一種是空值查詢。在數據表中,如果一個表的行屬性中不存在任何值的時候,也就是說該表的行屬性中沒有任何數據記錄。那麼就將其稱之為空值。在SQL的查詢中,NULL可以用來表示空值的含義。在SQL語句中,可以使用IS NULL或者IS NOT NULL關鍵字來判斷空值。 

4.使用LIKE操作符實現模糊查詢 

在使用SQL語句進行查詢時,經常會遇到這樣一種情況,就是不能完全確定所需要查詢信息的完整條件,但是這些信息又具有某些明顯的特征。例如,想學習SQL語言,希望到圖書館中找一些相關的資料,但是又不知道有關SQL語言的書都有哪些,這個時候一般都會在圖書管理系統中輸入關鍵字SQL,這樣與SQL有關的所有書籍就都會查到瞭。這就是模糊查詢。在SQL語言中就提供瞭用於模糊查詢的關鍵字LIKE,它需要和通配符“%”和“_”配合使用。 

在SQL語句中,通配符“_”表示匹配單個字符。即在查詢語句中,一個“_”隻能表示匹配一個字符。 

在SQL語句中,通配符“%”表示匹配0個或者多個字符。即一個“%”可以表示0個字符,也可以表示一個字符,也可以表示兩個或者更多的字符。 

在使用SQL執行模糊查詢時,有時數據表某個字段中的字符值本身就含有“%”或者是“_”這兩個字符。開發人員希望在查詢時,將字符值本身就含有“%”或者是“_”兩個字符作為該字符的一部分查詢出來,這個時間就需要使用ESCAPE關鍵字對其進行轉義操作。使用ESCAPE關鍵字進行轉義操作步驟如下: 

(1)在需要轉義的“%” 或者是“_”字符前加一個轉義符,該轉義符可以是一個任意字符。 

(2)在ESCAPE關鍵字後制定該轉義符的名稱。 

經過這兩個步驟之後,位於該轉義符之後的那個通配符(“%” 或者是“_”字符)就會被轉義為一個普通字符。 

5.使用REGEXP關鍵字進行模式匹配(regular expression) 

在MySQL資料庫中,還提供瞭一種更加靈活的模式匹配方法,就是使用REGEXP關鍵字對字符串進行模式匹配。使用REGEXP關鍵字對字符串進行模式匹配,隻要是在被匹配的字符串中含有與匹配模版中相匹配的子串,就被認為是模式匹配。其返回值就為TRUE。 

在MySQL資料庫中,使用REGEXP關鍵字對字符串進行模式匹配時,可以使用一些模式匹配修飾符對模式匹配進行測試。 

^:用來匹配字符串的開始。 

$:用來匹配字符串的結尾。 

[]:在方括號中的任何字符都可以匹配。例如[abc]表示匹配方括號中的字符a、字符b或者是字符c。 

-:連字符用來表示字符匹配的范圍。例如[a-z]表示匹配方括號中字符a到字符z中的任何一個字符。 

+:表示用於匹配的該字符在被匹配的字符串中出現至少一次或者多次。 

*:表示用於匹配的該字符在被匹配的字符串中出現零次或者多次。 

():在圓括號中的內容將被看做一個整體。例如(abc),表示匹配樣式(abc)的字符串是abc。 

{m}:其中整數m表示花括號前的字符串需要出現的次數。例如{abc}{2}表示匹配樣式{abc}{2}的字符串是abcabc。 

另外,REGEXP還可以對字符串進行模式匹配測試。 

SELECT 'agf' REGEXP '[a-d]+','banana' REGEXP '(ana){2}' 

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *