程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 7、使用WHERE子句查詢表中滿足條件的記錄

7、使用WHERE子句查詢表中滿足條件的記錄

編輯:MySQL綜合教程

在使用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'
SELECT 'mysql' = BINARY 'MySQL'
未命名1
日期時間的比較
在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}'
未命名2

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved