Mysql必知必會(3) 模糊查詢(LIKE)

2021-09-17 06:34:36 字數 3437 閱讀 2001

本文介紹什麼是萬用字元,如何利用萬用字元進行資料庫資料過濾查詢。

萬用字元:用來匹配值得一部分的特殊字元。

搜尋模式:由字面值、萬用字元或者兩者組合構成的搜尋條件。

在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除非列不相同,否則所有行將被檢索出來,即不能對...