本文介紹什麼是萬用字元,如何利用萬用字元進行資料庫資料過濾查詢。
萬用字元:用來匹配值得一部分的特殊字元。
搜尋模式:由字面值、萬用字元或者兩者組合構成的搜尋條件。
在mysql中使用萬用字元搜尋,必須使用關鍵字like,跟在like後面的值會進行統配匹配而不是精選匹配。
like不屬於操作符,而屬於謂詞,這裡只是做個概念輸出,其實我也不知道啥意思,以後遇到專業的不要不認識就ok
在開發中我們最常見到的萬用字元就是百分號萬用字元。百分號代表的含義是包含一切字元出現一切的次數。
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');
星空幻穎,嚴穎
個人主頁:segmentfault
mysql 必知必會 3
排序檢索資料 1.排序資料 order 排序 乙個列或多個列,進行排序輸出 select 列名 from 表名 order by 列名 多列排序 先列名1排序,再列名2排序 select 列名1,列名2 from 表名 order by 列名1,列名2 指定排序的方向。資料排序預設是公升序排序,降序...
mysql必知必會 mysql必知必會(四)
十四 理解子查詢 1 通過子查詢過濾 這本書在所有的章節都關連到了資料庫表,訂單資料是儲存在兩個表中,orders表儲存著 訂單號碼 顧客id和訂單日期。個人的訂單列表關連著orderitems表,訂單表沒有儲存顧客資訊,它只是儲存著顧客id,這實際的顧客資訊是儲存在customers表中。現在假設...
mysql的必知必會 mysql 必知必會 筆記
好久沒有寫了。1 show columns from table 等同於describe table顯示的是表的結構。而select from table 則顯示的是整個表中插入的資料。2 select distinct c1,c2 from table除非列不相同,否則所有行將被檢索出來,即不能對...