以上為模糊查詢的流程圖。
為了方便演示,需要建立乙個簡單地資料庫表。
key 『username』(『username』) 是索引,非常重要。
索引的好處:如果按照某個條件去檢索資料,如果這個條件字段沒有建立索引,查詢的時候會遍歷整張表,如果你建立了索引,查詢的時候就會根據索引來查詢,進而提高查詢效能。
精確查詢
返回結果有且僅有一條sql
查詢應用場景:使用者註冊 登陸
模糊查詢
返回結果不確定
應用場景:站點搜尋
注意:以上2
種查詢返回的結果可能為空。
模糊查詢技術語法知識
支援2種匹配格式
1.sql匹配模式(開發中應用最多的一種)
2.正規表示式匹配模式(不推薦)
sql
匹配模式
1.使用sql
匹配模式,不能使用操作符
= 或
!=,而是使用操作符
like
或not like;
2.使用sql
匹配模式,
mysql
提供了2
種萬用字元。
%表示任意數量的任意字元(其中包括0個)
_表示的任意單個字元;
3.使用sql
匹配模式,如果匹配格式中不包含以上
2種萬用字元中的任意乙個。其查詢的效果等同於=或
!=;4.使用
sql匹配模式,預設情況下是不區分大小寫的。
五種查詢場景
① #查詢使用者名稱以某個字元開頭的使用者
#查詢使用者名稱以字元』l』開頭的使用者
② #查詢使用者名稱以某個字元結尾的使用者
#查詢使用者名稱以某個字元』e』結尾的使用者
③#查詢使用者名稱包含某個字元的使用者
#查詢使用者名稱包含字元』o』的使用者
# %o%
select * from user where username like 『%o%』; (常用)
④#查詢使用者名稱長度為
3的使用者
⑤#兩種萬用字元的結合使用
#查詢使用者名稱第二個字元為
o的使用者
正規表示式匹配模式(不建議使用)
萬用字元
. 匹配任意單個字元
* 匹配
0個或多個在它前面的字元
x* 表示匹配任何數量的x字元
[..] 匹配中括號的任意字元
[abc]匹配字元
a b或
c[a-z]匹配的是任何字母
[0-9]匹配任何數字
[0-9]*匹配任何數量的任何數字
[a-z]* 匹配任何數量的字母
^ 表示以某個字元或字串開始
^a表示以字母a開頭
$ 表示以某個字元或字串結尾
s$表示以字母s結尾
使用正規表示式匹配模式使用的操作符
regexp 或
not regexp(rlike
或not rlike)
如果使用乙個正規表示式來匹配,其模式有別於sql
模式解釋:如以下例子
#查詢使用者名稱以字元
l 開頭的使用者
sql匹配模式
l%正規表示式 ^l
#查詢使用者名稱正好是
3個字元的使用者
sql匹配模式
___正規表示式 ...?
是這樣嗎
為什麼把所有的使用者都查詢出來了?
因為正規表示式匹配模式,其正規表示式出現在匹配欄位的任何位置,其模式就算匹配了。 所以 ...
匹配的是 包含三個字母或以上的使用者名稱,而表中的所有使用者名稱都匹配,所以所有使用者都被查詢出來了。
注意:
如果僅用萬用字元 .
來匹配,有
n個萬用字元
. 那麼其匹配模式表示,大於等於
n個字元。
若想表示精確字元數,其格式如下:
^...$
select * from user where username regexp 『^...$』;
php 陣列模糊查詢
乙個陣列中有多個值,現在需要輸入某個字串,要模糊查詢出所有帶有這個字串的陣列中的值,該如何實現呢?看例子 keywords dd arrays array 0 db aabbccddee 1 aabbccdd 2 aaa 3 aabb 4 aabbcc 5 aabbccddeeff arr arra...
php 模糊匹配 PHP模糊查詢的實現方法 推薦
模式查詢 1.sql匹配模式 2.正規表示式匹配模式 一般不推薦使用 sql匹配模式 1.使用sql匹配模式,不能使用操作符 或!而是使用操作符like或not like 2.使用sql匹配模式,mysql提供了2種萬用字元。表示任意數量的任意字元 其中包括0個 表示任意單個字元 3.使用sql匹配...
揭秘PHP模糊查詢技術
使用者表 user create table user uid int 10 auto increment primary key comment 使用者id username varchar 30 not null default comment 使用者名稱 password varchar 6 ...