產品操作MySQL第7篇 – 運算子 - LIKE

MYSQL
本資料為產品崗位作為日常工作參考,語言口語化
At 2019/4/27 By David.Yang
介紹什麼是LIKE運算子
有時候我們在資料過濾時,並沒有非常精準的過濾條件,
而是受限與一些比較模糊的查詢,
比如天龍八部裡面兒姓段的到哪兒都不受待見。
怎麼查名欄位開頭的呢?
ϒ LIKE作為過濾條件通常配合在WHERE子句當中使用
ϒ MYSQL提供兩種方式來實現模糊匹配,用來與LIKE配合使用:百分號(%)、下劃線(_)
百分號(%):萬用字元允許匹配任意字串的[0]個或[多個]
下劃線(_):萬用字元允許匹配任何[單個字串]
LIKE使用(%)實現匹配
為了實現模糊匹配,我們將學生表進行一些修改,
補充姓、名兩個欄位

並完成資料的補充

語法
WHERE
column LIKE X%
ϒ column 需要匹配的欄位值
ϒ LIKE 模糊關鍵字
ϒ X 匹配表示式
ϒ % 表示目標匹配符
以X開頭的匹配
來了來了,我們可以開始玩兒了。
我們搜尋學生名字,並且以[y]字母開頭,可以使用%,
表示式
x%
SQL
SELECT * FROM students WHERE firstname LIKE "y%";
來來來,瞅瞅都拿到些啥

以X結尾的匹配
我還要找名裡邊兒v結尾的學生有哪些
表示式
% x
SQL
SELECT * FROM students WHERE firstname LIKE "%v";
yoyoyo,看看找到誰了

包含X的匹配
我還要找名裡邊兒只要帶ng的學生
表示式
% x%
SQL
SELECT * FROM students WHERE firstname LIKE "%ng%";
找到的學生們是

LIKE使用(_)實現匹配
來來來,我們來看看這3條有意思的資料,

他們都是s*i的規律,即s開頭,i結尾,
我們使用_匹配看看有什麼結果
表示式
x_y
SQL
SELECT * FROM students WHERE firstname LIKE "s_i";

是返回了這麼一條資料,為什麼呢?
忘了我們上文定義語法時講的麼?
x_y表示式匹配時,萬用字元允許匹配任何[單個字串]
ϒ 左匹配

表示式
x_
SQL
SELECT * FROM students WHERE firstname LIKE "s_";

ϒ 右匹配
表示式
_x
SQL
SELECT * FROM students WHERE firstname LIKE "_i";

NOT特性的LIKE運算子的使用
NOT關鍵子可以和LIKE組合使用,以用來查詢不匹配特定表示式的資料。
語法
WHERE
column NOT LIKE X%
舉個栗子
:chestnut:
要找到所有不以s字元開頭的學生,用NOT LIKE操作
SQL
SELECT * FROM students WHERE firstname NOT LIKE "%s" LIMIT 10;
瞅一瞅

LIKE與ESCAPE子句的使用
有時候吧,我們的資料當中本來就包含特殊符號,
還整好有%和_,
你說巧不巧?
那這時候使用LIKE查詢會不會出問題呢?
該怎麼辦呢?
能辦!
用轉義,通過轉義符號將其特殊內容轉化成普通的文字字元,
就能夠無障礙繼續使用LIKE匹配了。
舉個例子
:chestnut:

構建了兩人名字,有%字元
我們找出包含dun%的那個誰出來
SQL
SELECT * FROM students WHERE firstname LIKE "dun\%%";
他來了

再比如

這人我賊討厭,要找他也一樣操作
SQL
SELECT * FROM students WHERE firstname LIKE "%\_jing";
臭小子給揪出來了

怎麼找出來的呢?
原來是這個是他“\”,英文的反斜槓,
在資料庫和很多程式語言當中都是用“\”來表示轉義,
即將特殊字元轉化成普通字元。
自定義轉義符號
如果我不想用“\”呢?
沒問題啊,滿足你。
使用ESCAPE,世界就是你的,
你可以自己指定符號作為你的轉義符,
比如我就喜歡錢,
us doller,我用$
SQL
SELECT * FROM students WHERE firstname LIKE "%$_jing" ESCAPE "$";
趙志敬,你逃不掉的

以上通過ESCAPE “你的符號”來實現自定義轉義符
ϒ LIKE運算子的使用是否正確對資料庫的效能影響很大,LIKE運算子強制MYSQL掃描整個資料表以找到滿足匹配條件的資料行,他不允許資料庫引擎使用索引進行快速搜尋,因此在數量較大時使用LIKE查詢會造成資料庫效能大幅度下降。
ϒ LIKE運算子不區分大小寫,x% 和 X%效果相同
本文講解了LIKE的模糊匹配怎麼使用,
are you 會了麼?