《SQL必知必會(huì)》第 6 課 用通配符進(jìn)行過濾

目標(biāo):

1. LIKE 操作符

2.使用通配符的技巧

6.1 LIKE操作符

1. 通配符(wildcard)用來匹配值的一部分的特殊字符。

2. 搜索模式(search pattern)由字面值吻贿、通配符或兩者組合構(gòu)成的搜索條件朝群。

3. 為在搜索子句中使用通配符蒋得,必須使用 LIKE 操作符肆捕。LIKE指示 DBMS行冰,后跟的搜索模式利用通配符匹配而不是簡(jiǎn)單的相等匹配進(jìn)行比較。

4. 謂詞(predicate)操作符何時(shí)不是操作符奏属?答案是,它作為謂詞時(shí)潮峦。從技術(shù)上說囱皿,LIKE是謂詞而不是操作符勇婴。雖然最終的結(jié)果是相同的,但應(yīng)該對(duì)此術(shù)語有所了解嘱腥,以免在 SQL 文獻(xiàn)或手冊(cè)中遇到此術(shù)語時(shí)不知所云耕渴。

5. 通配符搜索只能用于文本字段(字符串),非文本數(shù)據(jù)類型字段不能使用通配符搜索齿兔。


6.1.1 百分號(hào)(%)通配符

最常使用的通配符是百分號(hào)(%)橱脸。在搜索串中,%表示任何字符出現(xiàn)任意次數(shù)分苇。例如添诉,為了找出所有以詞 Fish 起頭的產(chǎn)品,可寫以下的 SELECT 語句:


SELECT prod_name,prod_price

FROM products

WHERE prod_name LIKE 'fish%';

分析▼

?此例子使用了搜索模式'Fish%'医寿。在執(zhí)行這條子句時(shí)栏赴,將檢索任意以Fish 起頭的詞。%告訴 DBMS 接受 Fish 之后的任意字符靖秩,不管它有多 少字符须眷。

輸出:

%放后面

說明:區(qū)分大小寫,要看配置沟突。


SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '%bean bag%';

分析▼

搜索模式'%bean bag%'表示匹配任何位置上包含文本 bean bag 的值花颗,

不論它之前或之后出現(xiàn)什么字符。

輸出:

%放首尾

SELECT prod_name?

FROM Products?

WHERE prod_name LIKE 'F%y';

分析▼?找出以 F 起頭惠拭、以 y 結(jié)尾的所有產(chǎn)品:

輸出:

%放中間

提示:根據(jù)部分信息搜索電子郵件地址?

?有一種情況下把通配符放在搜索模式中間是很有用的扩劝,就是根據(jù)郵件地址的一部分來查找電子郵件,例如 WHERE email LIKE 'b%@forta.com'求橄。


需要特別注意今野,除了能匹配一個(gè)或多個(gè)字符外,%還能匹配 0 個(gè)字符罐农。%代表搜索模式中給定位置的 0 個(gè)条霜、1 個(gè)或多個(gè)字符。

6.1.2 下劃線(_)通配符

1. 另一個(gè)有用的通配符是下劃線(_)涵亏。下劃線的用途與%一樣宰睡,但它只匹配單個(gè)字符,而不是多個(gè)字符气筋。

2. 說明:DB2 通配符拆内,DB2 不支持通配符_。


SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '__ inch teddy bear';

分析▼

這個(gè) WHERE 子句中的搜索模式給出了后面跟有文本的兩個(gè)通配符宠默。結(jié)果只顯示匹配搜索模式的行:第一行中下劃線匹配 12麸恍,第二行中匹配18。8 inch teddy bear 產(chǎn)品沒有匹配,因?yàn)?b>搜索模式要求匹配兩個(gè)通配符而不是一個(gè)抹沪。

輸出:

對(duì)照一下刻肄,下面的 SELECT 語句使用%通配符,返回三行產(chǎn)品:

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '% inch teddy bear';

輸出:



6.1.3 方括號(hào)([])通配符(MySQL不支持)

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE '[JM]%'

ORDER BY cust_contact;

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE '[*JM]%'

ORDER BY cust_contact;

6.2 使用通配符的技巧

1. 不要過度使用通配符融欧。如果其他操作符能達(dá)到相同的目的敏弃,應(yīng)該使用其他操作符。

2. 在確實(shí)需要使用通配符時(shí)噪馏,也盡量不要把它們用在搜索模式的開始處麦到。把通配符置于開始處,搜索起來是最慢的欠肾。

3. 仔細(xì)注意通配符的位置瓶颠。如果放錯(cuò)地方,可能不會(huì)返回想要的數(shù)據(jù)董济。

總之步清,通配符是一種極其重要和有用的搜索工具,以后我們經(jīng)常會(huì)用到它虏肾。


6.3 小結(jié)

LIKE操作符后面使用”%“廓啊,”_“,"[]"。%可以用在開頭封豪,首尾和中間谴轮,_只能匹配單個(gè)字符,[]只能SQL server使用

-- ----------第6課 用通配符進(jìn)行過濾----------------------

-- ---------------------------------

-- 6.1 LIKE操作符

-- 6.1.1 百分號(hào)(%)通配符

SELECT prod_name,prod_price

FROM products

WHERE prod_name LIKE 'fish%';

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '%bean bag%';

SELECT prod_name

FROM Products

WHERE prod_name LIKE 'F%y';


-- 6.1.2 下劃線(_)通配符

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '__ inch teddy bear';

SELECT prod_id, prod_name

FROM Products

WHERE prod_name LIKE '% inch teddy bear';


-- 6.1.3 方括號(hào)([])通配符

/*SELECT cust_contact

FROM Customers;

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE '[JM]%'

ORDER BY cust_contact;

SELECT cust_contact

FROM Customers

WHERE cust_contact LIKE '[*JM]%'

ORDER BY cust_contact;*/

挑戰(zhàn)題:

1. 編寫 SQL 語句吹埠,從 Products 表中檢索產(chǎn)品名稱(prod_name)和描述(prod_desc)第步,僅返回描述中包含 toy 一詞的產(chǎn)品。

SELECT prod_name,prod_desc

FROM products

WHERE prod_desc LIKE '%toy%';

2. 反過來再來一次缘琅。編寫 SQL 語句粘都,從 Products 表中檢索產(chǎn)品名稱(prod_name)和描述(prod_desc),僅返回描述中未出現(xiàn) toy 一詞的產(chǎn)品刷袍。這次翩隧,按產(chǎn)品名稱對(duì)結(jié)果進(jìn)行排序。

SELECT prod_name,prod_desc

FROM products

WHERE NOT prod_desc LIKE '%toy%'

ORDER BY prod_name;

3. 編寫 SQL 語句呻纹,從 Products 表中檢索產(chǎn)品名稱(prod_name)和描述(prod_desc)堆生,僅返回描述中同時(shí)出現(xiàn) toy 和 carrots 的產(chǎn)品。有好幾種方法可以執(zhí)行此操作雷酪,但對(duì)于這個(gè)挑戰(zhàn)題淑仆,請(qǐng)使用 AND 和兩個(gè) LIKE 比較。

SELECT prod_name,prod_desc

FROM products

WHERE prod_desc LIKE '%toy%' AND prod_desc LIKE '%carrots%';

4. 來個(gè)比較棘手的哥力。我沒有特別向你展示這個(gè)語法蔗怠,而是想看看你根據(jù)目前已學(xué)的知識(shí)是否可以找到答案。編寫 SQL 語句,從 Products 表中檢索產(chǎn)品名稱(prod_name)和描述(prod_desc)寞射,僅返回在描述中以先后順序同時(shí)出現(xiàn) toy 和 carrots 的產(chǎn)品最住。提示:只需要用帶有三個(gè) % 符號(hào)的 LIKE 即可。

SELECT prod_name,prod_desc

FROM products

WHERE prod_desc LIKE '%toy%carrots%';

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怠惶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子轧粟,更是在濱河造成了極大的恐慌策治,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兰吟,死亡現(xiàn)場(chǎng)離奇詭異通惫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)混蔼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門履腋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惭嚣,你說我怎么就攤上這事遵湖。” “怎么了晚吞?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵延旧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我槽地,道長(zhǎng)迁沫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任捌蚊,我火速辦了婚禮集畅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缅糟。我一直安慰自己挺智,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布溺拱。 她就那樣靜靜地躺著逃贝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迫摔。 梳的紋絲不亂的頭發(fā)上沐扳,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音句占,去河邊找鬼沪摄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杨拐。 我是一名探鬼主播祈餐,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼哄陶!你這毒婦竟也來了帆阳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤屋吨,失蹤者是張志新(化名)和其女友劉穎蜒谤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體至扰,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳍徽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敢课。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阶祭。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖直秆,靈堂內(nèi)的尸體忽然破棺而出濒募,到底是詐尸還是另有隱情,我是刑警寧澤圾结,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布萨咳,位于F島的核電站,受9級(jí)特大地震影響疫稿,放射性物質(zhì)發(fā)生泄漏培他。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一遗座、第九天 我趴在偏房一處隱蔽的房頂上張望舀凛。 院中可真熱鬧,春花似錦途蒋、人聲如沸猛遍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懊烤。三九已至,卻和暖如春宽堆,著一層夾襖步出監(jiān)牢的瞬間腌紧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工畜隶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壁肋,地道東北人号胚。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浸遗,于是被迫代替她去往敵國(guó)和親猫胁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 通配符(wildcard) 用來匹配值的一部分的特殊字符跛锌。 搜索模式(search pattern) 由字面值弃秆、通...
    ATHAS閱讀 832評(píng)論 0 49
  • 注:這一系列的文章是《SQL必知必會(huì)》第四版的讀書筆記。 1.了解SQL 1.1 數(shù)據(jù)庫基礎(chǔ) 數(shù)據(jù)庫:保存有組織的...
    zuyuxia閱讀 572評(píng)論 0 0
  • 表 存儲(chǔ)在表中的數(shù)據(jù)是同一種類型的數(shù)據(jù)或清單髓帽。 數(shù)據(jù)庫中的表有為一個(gè)名字來標(biāo)識(shí)自己驾茴。 表具有一些特性,這些特性定義...
    蛐蛐囍閱讀 1,307評(píng)論 0 7
  • 1.表中的任何列都可以作為主鍵氢卡, 只要它滿足以下條件:任意兩行都不具有相同的主鍵值;每一行都必須具有一個(gè)主鍵值( ...
    Cherryjs閱讀 650評(píng)論 0 0
  • mac MySQL 下載最新的MySQL社區(qū)版[https://dev.mysql.com/downloads/m...
    西電大俠閱讀 475評(píng)論 0 0