MySQL 搜索語句--過濾數(shù)據(jù)

MySQL使用SELECT語句的WHERE子句指定搜索條件。

使用WHERE子句

數(shù)據(jù)庫表一般包含大量的數(shù)據(jù)砸烦,有時我們可能只需要檢索表中的一部分數(shù)據(jù)弃鸦,只檢索所需數(shù)據(jù)需要指定搜索條件(search criteria),搜索條件也稱為過濾條件(filter condition)幢痘。

WHERE 子句在表名(FROM子句)之后給出唬格。

SELECT name, price
FROM products
WHERE price = 2.50;

這條語句從products表中檢索兩個列,但是是不返回所有行颜说,只返回price值為2.50的行购岗。如下所示:

+---------+-----------+
|  name   |    price  |
+---------+-----------+
| Carrots |    2.50   |
| TNT     |    2.50   |
+---------+-----------+

$在同時使用ORDER BY和WHERE 子句時,應該讓ORDER BY位于WHERE 之后门粪,否則會產生錯誤$

WHERE子句操作符

--------------------------------------------
    操作符                說明
--------------------------------------------
      =                   等于
      <>                  不等于
      !=                  不等于
      <                   小于
      <=                  小于等于
      >                   大于
      >=                  大于等于
      BETWEEN             在指定的兩個值之間
----------------------------------------------

檢查單個值

SELECT name, price 
FROM products
WHERE name='fuses';

輸出如下:

+---------+-----------+
|  name   |    price  |
+---------+-----------+
| Fuses   |    3.42   |
+---------+-----------+

檢查WHERE name='fuses'語句喊积,它返回name的值為Fuses的一行,MySQL在執(zhí)行匹配時不區(qū)分大小寫玄妈,所以fuses與Fuses匹配

不匹配檢查

以下例子列出不是由供應商1003制造的所有產品

SELECT id, name 
FROM products
WHERE id <> 1003;

輸出如下:

+---------+-----------+
|  id     |    name   |
+---------+-----------+
| 1001    |    Fuses1 |
| 1002    |    Fuses2 |
| 1004    |    Fuses4 |
| 1005    |    Fuses5 |
+---------+-----------+

PS:在使用WHERE子句時乾吻,單引號用來限定字符串髓梅。如果將值與串類型的列進行比較,則需要限定引號溶弟;如果與數(shù)值列進行比較的值不用引號
以下語句和上面的例子相同

SELECT id, name 
FROM products
WHERE id != 1003;

范圍值檢查

為了檢查某個范圍的值女淑,可以使用BETWEEN操作符。
下面的例子說明如何使用BETWEEN操作符辜御,它檢索價格在5美元和10美元之間的所有產品鸭你。

SELECT name, price 
FROM products
WHERE price BETWEEN 5 AND 10;

結果如下所示:

+---------+-----------+
|  name   |    price  |
+---------+-----------+
| Fuses1  |    5.42   |
| Fuses4  |    6.12   |
| Fuses3  |    7.92   |
| Fuses2  |    9.42   |
+---------+-----------+

PS:在使用BETWEEN時,必須指定兩個值擒权,這兩個值必須用AND關鍵字分隔袱巨。

空值檢查

NULL 無值(no value),他與字段包含0碳抄,空字符串或僅僅包含空格不同愉老。
SELECT語句有一個特殊的WHERE子句 IS NULL,它用來檢查具有NULL值得列

SELECT name
FROM products
WHERE price IS NULL;

這條語句返回沒有價格(空price字段剖效,不是價格為0)的所有產品嫉入,由于表中沒有這樣的行所以沒有返回行

NULL 與不匹配 在通過過濾選擇出不具有特定值得行時,你可能希望返回具有NULL值的行璧尸。但是咒林,不行。因為位置具有特殊的含義爷光,數(shù)據(jù)庫不知道他們是否匹配所以在匹配過濾或不匹配過濾時不返回它們垫竞;
因此,過濾數(shù)據(jù)時蛀序,一定要驗證返回數(shù)據(jù)中確實給出了被過濾列具有NULL的行欢瞪。

數(shù)據(jù)過濾

組合WHERE子句

AND
為了進行更強的過濾控制,MySQL允許給出多個WHERE子句徐裸,這些子句可以兩種方式使用:以AND子句的方式或OR子句的方式使用遣鼓。

SELECT id, price, name
FROM products 
WHERE id=1003 AND price<=10;

此SQL語句檢索由供應商1003制造且價格小于等于10美元的所有產品的名稱和價格
ADN 用在WHERE子句中的關鍵字,用來指示檢索滿足所有給定條件的行重贺。

OR

SELECT id, price, name
FROM products 
WHERE id=1003 OR id=1002;

次SQL語句檢索由任一指定供應商創(chuàng)造的所有產品的產品的名字和價格譬正。
OR WHERE 子句中使用的關鍵字,用來表示檢索匹配任一給定條件的行檬姥。

計算次序

WHERE 可以包含任意數(shù)目的AND和OR操作符。允許兩者結合以進行復雜和高級的過濾粉怕。
但是由于AND和OR的優(yōu)先級不同健民,AND的優(yōu)先級要高于OR的優(yōu)先級,所以在同時使用AND和OR時贫贝,要給OR加括號
例如:

SELECT id, price, name
FROM products 
WHERE (id=1003 OR id=1002) AND price >= 10;

IN 操作符

圓括號在WHERE子句中還有另一種用法秉犹。IN操作符用來指定條件范圍蛉谜,范圍內的每個條件都可以進行匹配。IN取合法值的由逗號分隔的清單崇堵,全部都在圓括號中。

SELECT id, price, name
FROM products 
WHERE id IN (1002, 1003)
ORDER BY name;

次語句檢索供應商1002和1003創(chuàng)造的所有產品鸳劳。
IN操作符后跟由逗號分隔的合法值清單狰贯,整個清單必須括在圓括號中。
IN 操作符的優(yōu)點:

  • 在使用長的合法選項清單時,IN操作符的語法更清楚且直觀摸柄。
  • 在使用IN時跃脊,計算的次序更容易管理(因為使用的操作符更少)
  • IN操作符一般比OR操作符清單執(zhí)行更快
  • IN的最大優(yōu)點是可以包含其他SELECT語句匾乓,使得能夠更動態(tài)的建立WHERE子句拼缝。
    IN WHERE子句中用來指定要匹配的清單的關鍵字任斋,功能與OR相當墨辛。

NOT 操作符

NOT WHERE 子句中用來否定后跟條件的關鍵字凿渊。
下面的例子敛纲,列出除了1002和1003之外的所有供應商制造的產品淤翔。

SELECT id, price, name
FROM products 
WHERE id NOT IN (1002, 1003)
ORDER BY name;

LIKE 操作符

百分號(%)通配符

最常使用的通配符是百分號(%),在搜索串中佩谷,%表示任何字符出現(xiàn)任意次數(shù)旁壮。例如,為了找出所有以詞jet起頭的產品谐檀,可以使用SELECT語句:

SELECT id, name
FROM products
WHERE name LIKE 'jet%';

通配符可以在搜索模式中任一位置使用抡谐,并且可以使用多個通配符。

SELECT id, name
FROM products
WHERE name LIKE '%anvil%';

搜索模式‘%anvil%’表示匹配任何位置包含文本anvil的值桐猬,而不論它之前或者之后出現(xiàn)什么字符

重要的是要注意到麦撵,除了一個或多個字符外,%還能匹配0個字符溃肪。%代表搜索模式中給定位置的0個免胃,1個,或者多個字符惫撰。
注意尾空格 尾空格可能會干擾通配符羔沙。例如,在保存詞anvil時厨钻,如果它后面有一個或多個空格扼雏,則子句WHERE name LIKE '%anvil'將不會匹配他們,因為在最后的l后面有多余的字符夯膀。解決這個問題的一個簡單辦法是在搜索模式最后附加一個%或者使用函數(shù)
%不能匹配NULL

下劃線(_)通配符

下劃線的用途與%一樣诗充,但是下劃線只匹配單個字符而不是多個字符。

SELECT id, name
FROM products
WHERE name LIKE '_ ton anvil';

顯示效果如下:

+---------+-----------------+
|  id     |    name         |
+---------+-----------------+
| 1001    |    .5 ton anvil |
| 1002    |     1 ton anvil |
| 1004    |     2 ton anvil |
+---------+-----------------+

與%能匹配0個字符不一樣诱建,_總是匹配一個字符其障,不能多也不能少

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涂佃,隨后出現(xiàn)的幾起案子励翼,更是在濱河造成了極大的恐慌,老刑警劉巖辜荠,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汽抚,死亡現(xiàn)場離奇詭異,居然都是意外死亡伯病,警方通過查閱死者的電腦和手機造烁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來午笛,“玉大人惭蟋,你說我怎么就攤上這事∫┗牵” “怎么了告组?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長癌佩。 經(jīng)常有香客問我木缝,道長,這世上最難降的妖魔是什么围辙? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任我碟,我火速辦了婚禮,結果婚禮上姚建,老公的妹妹穿的比我還像新娘矫俺。我一直安慰自己,他們只是感情好掸冤,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布厘托。 她就那樣靜靜地躺著,像睡著了一般贩虾。 火紅的嫁衣襯著肌膚如雪催烘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天缎罢,我揣著相機與錄音伊群,去河邊找鬼。 笑死策精,一個胖子當著我的面吹牛舰始,可吹牛的內容都是我干的。 我是一名探鬼主播咽袜,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼丸卷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了询刹?” 一聲冷哼從身側響起谜嫉,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萎坷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沐兰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哆档,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年住闯,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓜浸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡比原,死狀恐怖插佛,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情量窘,我是刑警寧澤雇寇,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站绑改,受9級特大地震影響谢床,放射性物質發(fā)生泄漏。R本人自食惡果不足惜厘线,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一识腿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧造壮,春花似錦渡讼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旨枯,卻和暖如春蹬昌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背攀隔。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工皂贩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昆汹。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓明刷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親满粗。 傳聞我的和親對象是個殘疾皇子辈末,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • SQL與MySQL簡介 數(shù)據(jù)庫基礎 從SQL的角度來看,數(shù)據(jù)庫就是一個以某種有組織的方式存儲的數(shù)據(jù)集合。我們可以采...
    heming閱讀 3,085評論 1 8
  • 1. SQL 簡介 SQL 的目標 理想情況下挤聘,數(shù)據(jù)庫語言應允許用戶: 建立數(shù)據(jù)庫和關系結構 完成基本數(shù)據(jù)管理任務...
    板藍根plank閱讀 2,347評論 0 11
  • 數(shù)據(jù)庫入門 數(shù)據(jù)庫: 保存有組織的數(shù)據(jù)的容器(通常是一個文件或一組文件).數(shù)據(jù)庫軟件應該稱為 DBMS(DataB...
    Mjericho閱讀 499評論 0 0
  • 最近我自己一直在質問自己為什么要創(chuàng)業(yè)轰枝,是出于自己內心的不安分,還是受身邊人們的影響组去?
    棋棋203閱讀 287評論 0 1
  • 開啟內心喜悅的引擎狸膏,安駐身心,輕松愉快地回憶我今天種下的好種子添怔。 我的人生使命:...
    愛笑的榆鑫閱讀 184評論 0 1