本文介紹什麼是通配符,如何利用通配符進行數據庫數據過濾查詢。sql
本文使用的數據表在本文最後附錄數據庫
以前幾篇文章的全部例子查詢的條件都是肯定的值,好比大於20,或者用戶ID爲1.可是,有些時候咱們須要查詢一些不太肯定的值。好比用戶在輸入框輸入關鍵字查詢相關文章,這個時候就須要模糊查詢。也就是使用通配符進行過濾。segmentfault
通配符:用來匹配值得一部分的特殊字符。工具
搜索模式:由字面值、通配符或者二者組合構成的搜索條件。spa
在Mysql中使用通配符搜索,必須使用關鍵字LIKE,跟在LIKE後面的值會進行統配匹配而不是精選匹配。3d
LIKE不屬於操做符,而屬於謂詞,這裏只是作個概念輸出,其實我也不知道啥意思,之後遇到專業的不要不認識就OKcode
在開發中咱們最多見到的通配符就是百分號通配符。百分號表明的含義是包含一切字符出現一切的次數。blog
SELECT * FROM my_user WHERE `name` LIKE '小%';
上面的SQL中咱們使用了LIKE '小%'
,這裏的%在小
字的後面,因此他會匹配以小
字開頭的全部名字。圖片
若是咱們把百分號放在前面資源
SELECT * FROM my_user WHERE `name` LIKE '%穎';
該語句表示查詢全部以穎
結尾的名字。
通配符還可使用多個
SELECT * FROM my_user WHERE `name` LIKE '%空%';
這樣咱們就能夠查詢包含空
字的全部名字,不管在開頭仍是結尾仍是中間。
還有一種狀況,比較少見,可是也能夠查詢,就是通配符在字符中間,那麼就表示已X開頭Y結尾的字符。
SELECT * FROM my_user WHERE `name` LIKE '星%穎';
因此,上面的SQL意思爲,查詢已星
開頭的,而且以穎
結尾的名字。
提醒:
Mysql默認的配置中,模糊查詢不區分大小寫。可是修改設置,區分大小寫,則小寫字母不能匹配大寫,反之亦然。
若是在一個字符最後有一個空格,好比小穎 後面有個空格,那麼%穎
沒法匹配小穎。解決辦法就是在最後加個%,變成%穎%
%能夠匹配不少東西,可是不能夠匹配NULL,即便使用LIKE '%'
也不能匹配NULL
LIKE後面匹配的內容須要使用單引號括起來,好比LIKE '%小%'
下劃線通配符(_)與(%)通配符有點兒類似,可是也不一樣。%能夠匹配任意多個字符,而(_)只能匹配一個字符。
SELECT * FROM my_user WHERE `name` LIKE '_穎';
該例子與上面一個很類似,可是上面的例子匹配到了小穎
和星空幻穎
兩個用戶。這是因爲(_)只能匹配一個字符,因此星空幻穎的穎字前面有3個字符,因此沒法被匹配。而小穎正好符合。
其餘狀況也是同樣,當(_)放在後面,表示只能匹配後面一個字符。
經驗:
%通配符能夠匹配任意多個,包括0個字符。而(_)只能匹配一個,一個也不能多,一個也不能少。
因爲通配符查詢時間會比其餘搜索時間長,因此不要過分使用。儘可能優選其餘解決方案。
通配符放在開始處,搜索速度最慢,能不放在最前面就不要放在最前面。
通配符擺放位置必定要注意,不然會返回不想要的結果。
通配符在開發中仍是很是經常使用的。若是隻是作簡單的搜索,是個不錯的選擇。若是數據量太大,則須要考慮其餘解決方案。後面的文章中咱們會說起各類大量數據搜索狀況。
建立my_user表的語句:
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for my_user -- ---------------------------- DROP TABLE IF EXISTS `my_user`; CREATE TABLE `my_user` ( `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `age` tinyint(2) NOT NULL DEFAULT '0', `password` varchar(40) NOT NULL, `code` varchar(10) DEFAULT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of my_user -- ---------------------------- INSERT INTO `my_user` VALUES ('1', '小紅', '20', '7c4a8d09ca3762af61e59520943dc26494f8941b', '2arfs5dr6m'); INSERT INTO `my_user` VALUES ('2', '小明', '19', '7c4a8d09ca3762af61e59520943dc26494f8941b', 'd59tg6dr5h'); INSERT INTO `my_user` VALUES ('3', '小黃', '25', '7c4a8d09ca3762af61e59520943dc26494f8941b', 'w56tg9hjn3'); INSERT INTO `my_user` VALUES ('4', '小穎', '25', '7c4a8d09ca3762af61e59520943dc26494f8941b', 'a5d23e9yh5'); INSERT INTO `my_user` VALUES ('5', '星空幻穎', '22', '7c4a8d09ca3762af61e59520943dc26494f8941b', '86d2sadft9');
圖片所示的軟件工具是navicat,更多的 數據庫管理軟件,也能夠百度:筆點資源,更多開發乾貨資源集合
星空幻穎,嚴穎
我的主頁:segmentfault