在sql結構化查詢語言中,like語句有著至關關鍵的資料。
like語句的語法格式是:select * from 表名 where 欄位名 like 相應值(子串),它主要是針對字元型字段的,它的作用是在乙個字元型字段列中檢索包括相應子串的。
如果有乙個資料庫中有個表table1,在table1中有兩個字段,各自是name和***二者全是字元型資料。如今我們要在姓名欄位中查詢以「張」字開頭的記錄,語句例如以下:
select * from table1 where name like "張*"
如果要查詢以「張」結尾的記錄,則語句例如以下:
select * from table1 where name like "*張"
這裡用到了萬用字元「*」,能夠說,like語句是和萬用字元分不開的。以下我們就具體介紹一下萬用字元。
匹配型別
模式舉例 及 代表值
說明多個字元
*c*c代表cc,cbc,cbc,cabdfec等
它同於dos命令中的萬用字元,代表多個字元。
多個字元
%%c%代表agdcagd等
這樣的方法在非常多程式中要用到,主要是查詢包括子串的。
特殊字元
[*]a[*]a代表a*a
取代*單字元
?b?b代表brb,bfb等
同於dos命令中的?萬用字元,代表單個字元
單數字#
k#k代表k1k,k8k,k0k
大致同上,不同的是代僅僅能代表單個數字。
字元範圍
- [a-z]代表a到z的26個字母中隨意乙個 指定乙個範圍中隨意乙個
續上排除 [!字元] [!a-z]代表9,0,%,*等 它僅僅代表單個字元
數字排除 [!數字] [!0-9]代表a,b,c,d等 同上
組合型別 字元[範圍型別]字元 cc[!a-d]#代表ccf#等 能夠和其他幾種方式組合使用
如果表table1中有下面記錄:
name ***
張小明 男
李明天 男
李a天 女
王5五 男
王清五 男
以下我們來舉例說明一下:
例1,查詢name欄位中包括有「明」字的。
select * from table1 where name like '%明%'
例2,查詢name欄位中以「李」字開頭。
select * from table1 where name like '李*'
例3,查詢name欄位中含有數字的。
select * from table1 where name like '%[0-9]%'
例4,查詢name欄位中含有小寫字母的。
select * from table1 where name like '%[a-z]%'
例5,查詢name欄位中不含有數字的。
select * from table1 where name like '%[!0-9]%'
以上樣例能列出什麼值來顯而易見。但在這裡,我們著重要說明的是萬用字元「*」與「%」的差別。
非常多朋友會問,為什麼我在以上查詢時有個別的表示全部字元的時候用"%"而不用「*」?先看看以下的樣例能分別出現什麼結果:
select * from table1 where name like *明*
select * from table1 where name like %明%
大家會看到,前一條語句列出來的是全部的記錄,而後一條記錄列出來的是name欄位中含有「明」的記錄,
所以說,當我們作字元型字段包括乙個子串的查詢時最好採用「%」而不用「*」,用「*」的時候僅僅在開頭或者僅僅在結尾時,而不能兩端全由「*」取代隨意字元的情況下。
基本SQL語句使用方法
結構 增 create database 庫名 charset 字符集 create table 表名稱 欄位名 型別 約束 欄位名 型別 約束 not null 非空 primary key 主鍵 唯一且非空 unque 唯一約束 唯一可為空 foreign key 外來鍵約束 可為空,非空值與主...
sql語句中關於like的使用
今天在專案中有個新的需求 當我傳引數的時候,傳入的引數為空的時候,查詢所有資料。當傳入引數不為空的時候,按照輸入的引數查詢條件進行查詢。這個時候自己本來想著decode函式,後來經歷教使用like用法,模糊查詢 select b.select count 1 from options a where...
python 使用like的sql語句預編譯查詢
我們知道,使用預編譯技術可以防止sql注入,在python中,也可以使用預編譯技術來防止sql注入,至於python中如何使用預編譯技術,這裡不做過多闡述,我主要講講python中使用預編譯的乙個坑。那就是 使用like來進行模糊查詢。剛開始我檢視其它部落格,使用如下語句 select id,par...