1樓:九道門聊資料
我們平時在MySQL中使用模糊匹配的時候是用萬用字元%來進行匹配的,但這只是冰山一角。
MySQL本身是提供標準的SQL模式匹配的,支援模糊匹配的方法有很多種,今天就帶大家深入了解一下模糊查詢,看看這冰山下還隱藏著什麼樣的驚喜。
萬用字元模糊查詢
一、萬用字元的分類:
1、"%"百分號萬用字元:可以表示任意字元,對出現的次數不限,也就是說可以匹配0次;
2、"_"下劃線萬用字元:用來匹配唯一字元,只能匹配乙個。當然也可以用「大______",對下劃線的數量不限的;
還有乙個是Like操作符:Like的意思是MySQL後面的匹配模式是使用萬用字元匹配而不是相等匹配,如果Like後面未出現萬用字元,則將Like預設為"="執行。
二、萬用字元的使用
1、%萬用字元
-- 模糊匹配含有「大」字的資料;
SELECT * FROM dim_customer WHERE name LIKE '%大%';
-- 模糊匹配「大」開頭的資料;
SELECT * FROM dim_customer WHERE name LIKE '大%';
-- 模糊匹配「大」結尾的資料;
SELECT * FROM dim_customer WHERE name LIKE '%大';
-- LIKE也可以被當作=精準匹配;
SELECT * FROM dim_customer WHERE name LIKE '大';
-- 等同於
SELECT * FROM dim_customer WHERE name = '大';
2、_萬用字元
如果查詢的時候對資料的長度做出限制可以使用_萬用字元。
-- 現在需要查詢」大「開頭的,長度為四個字的資料,比如」大智若愚「,
SELECT * FROM dim_customer WHERE name LIKE '大___';
注意事項:
1)在模糊查詢的時候,MySQL預設是不區分大小寫,也就是說在查詢涉及的英文本母的時候需要注意;如果需要區分的時候使用binary關鍵字設定區分。
2)在模糊匹配的時候注意字元兩端的空格,可能會影響匹配。
3)%萬用字元是匹配不到NULL值的,也就是說LIKE「%」以後並沒有NULL的記錄。
4)MySQL的萬用字元用處特別多,但是搜尋的處理速度是比較慢的,那麼非必要不要使用萬用字元,其次在搜尋的時候不要盡量不要放在開始,因為MySQL在WHERE後面的執行順序是從左往右的,萬用字元放在開始處就會查詢全表。
5)那還有一點,如果資料中含有「%」或者「_」字元了怎麼辦?這時候寫進會跟萬用字元產生衝突,那麼就需要用escape關鍵字進行轉義。
在使用的時候escape後面可以跟乙個字元,裡面寫什麼,MySQL就會把這個當作轉義字元,然後把這個字元加在需要轉移的字元之間就好了。
SELECT * FROM dim_customer WHERE name LIKE '大/___' ESCAPE '/';
看完大家會發現雖然萬用字元模糊查詢很好用,但是多多少少存在一些侷限性,該如何解決呢?
九道門聊資料:九道門丨資料庫實戰:MySQL模糊匹配查詢(一)
dynamodb和mysql使用疑惑?
吳亮 在實際開發的過程中,選取某種資料庫進行資料持久化是非常重要,也是非常複雜的乙個問題。在具體工作中混用各種資料庫或技術棧是非常正常的事情,至於不用DynamoDB替代MySQL的原因,個人猜測有以下幾點需要考慮 首先,必須分清這兩種資料庫的概念。DynamoDB是採用consistent has...
既然MySQL中InnoDB使用MVCC,為什麼REPEATABLE READ不能消除幻讀?
SHQHDMR mysql5.6官方文件原話,RR用next key locks防止幻讀 By default,InnoDBoperates inREPEATABLE READ transaction isolation level and with theinnodb locks unsafe f...
秒懂MySql之基礎使用
不期而遇 如果給你講道理,罵你能讓你找到幸福,我想你可能也不會發帖來求助的 人都是很脆弱的,我們內心的需求也會有多方面,有時候甚至自己也不能弄清楚,何況這些需求還需要依託於另外乙個人來寄予呢?對面的那個人又何嘗不是有各種需求,有各種考慮呢,弄清楚自己都很困難,何況還要去考慮著兩個人誰更適合你,誰更能...