sql查询语句like
① sql模糊查询Like语句中可以用变量吗
sql的模糊查询like字句是可以的使用变量的,具体操作步骤如下:
1、首先我们需要在数据库中准备演示数据。
② sql语句查询,多字段like模糊查询优化
1、多字段like模糊查询优化:
最常见的写法:
where a like '%xx%' or b like '%xx%' or c like '%xx%';
这种写法查询效率低,经过调查,下面的方法可以替代,并且效率高:
2、如果like的关键字相同:
where instr(nvl(a, '')||nvl(b,'')||nvl(c,''), 'xx') > 0
把要模糊查询的字段先拼接起来,拼接时需要把null转成‘’,否则只要有一个字段值是空,整个拼接的字符串都成空了, 然后用instr 函数去过滤;
3、如果like的关键字不同:
where instr(a, 'xx') > 0 or instr(b, 'yy') > 0 or instr(c, 'zz') > 0
经过测试,这两种方法都比like效率要高;
③ SQL查询语句中SELECT LIKE用法详解
在SQL结构化查询语言中,LIKE语句有着至关重要的作用。
LIKE语句的语法格式是:
select
*
from
表名
where
字段名
like
对应值(子串),
它主要是针对字符型字段的它的作用是在一个字符型字段列中检索包含对应子串的。
A:%
包含零个或多个字符的任意字符串:
1、LIKE'Mc%'
将搜索以字母
Mc
开头的所有字符串(如
McBadden)。
2、LIKE'%inger'
将搜索以字母
inger
结尾的所有字符串(如
Ringer、Stringer)。
3、LIKE'%en%'
将搜索在任何位置包含字母
en
的所有字符串(如
Bennet、Green、McBadden)。
B:_(下划线)
任何单个字符:
LIKE'_heryl'
将搜索以字母
heryl
结尾的所有六个字母的名称(如
Cheryl、Sheryl)。
C:
[
]
指定范围
([a-f])
或集合
([abcdef])
中的任何单个字符:
1,
LIKE'[CK]ars[eo]n'
将搜索下列字符串:
Carsen、Karsen、Carson
和
Karson(如
Carson)。
2、LIKE'[M-Z]inger'
将搜索以字符串
inger
结尾、以从
M
到
Z
的任何单个字母开头的所有名称(如
Ringer)。
D:
[^]
不属于指定范围
([a-f])
或集合
([abcdef])
的任何单个字符:
LIKE'M[^c]%'
将搜索以字母
M
开头,
并且第二个字母不是
c
的所有名称(如MacFeather)。
E:
*
它同于DOS命令中的通配符,
代表多个字符:
c*c代表cc,cBc,cbc,cabdfec等多个字符。
F:
?同于DOS命令中的?通配符,
代表单个字符
:b?b代表brb,bFb等
G:
#
大致同上,
不同的是代只能代表单个数字。
k#k代表k1k,k8k,k0k。
F:
[!]
排除
它只代表单个字符
下面我们来举例说明一下:
例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的like语句怎么用
LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符语法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
例子 1
现在,我们希望从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE 'N%'
提示:"%" 可用于定义通配符(模式中缺少的字母)。
⑤ sql 的like语句
like后面的匹配字符不加通配符 % 的话就跟 = 是一样的。
⑥ sql语句中like的用法详细解析
在SQL结构化查询语言中,LIKE语句有着至关重要的作用。
LIKE语句的语法格式是:select
*
from
表名
where
字段名
like
对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。
假设有一个数据库中有个表table1,在table1中有两个字段,分别是name和sex二者全是字符型数据。现在我们要在姓名字段中查询以“张”字开头的记录,语句如下:
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
sex
张小明
男
李明天
男
李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 Like的用法
1、%:表示零个或多个字符。
可以匹配任意 类型 和任意长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
比如:select * from flow_user where username like '%王%';
将会把flow_user这张表里面,列名username中还有“王”的记录全部查询出来。
另外,如果需要找到flow_user这张表里面, 字段 username中既有“唐”,又有“英”的记录,可以使用and条件,
select * from flow_user where username like '%英%' and username like '%唐%';
则可以查询出来所有包含“英”和“唐”的所有内容,“英”和“唐”所在的前后位置无所谓。
若是用select * from flow_user where username like '%英%唐%';
可以查出来包含“英唐”的内容,但是查不出来“唐英”的内容。
2、_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度:
select * from flow_user where username like ' 英 ';
只能找到“王英琨”这样username为三个字且中间一个字是“英”的内容。
再比如:select * from flow_user where username like '英__';
只能找到“英雄点”这样username为三个字且第一个字是“英”的内容。
3、[]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配的对象为他们中的任一个。
select * from flow_user where username LIKE'[王李张]飞';
将找出“王飞”“李飞”“张飞”(而不是“张王李飞”)。
如[]内有一系列字符(01234,abcde之类的)则可略写为“0-4”,“a-e”:
select * from flow_user where username like '老[0-9]';
将找出“老1”、“老2”、……、“老9”;
Oracle 10g以上的版本用法为:
select * from flow_user where regexp_like(username, '[张王李]飞');
4、[^]:表示不在括号所列之内的单个字符。其取之和[]相同,但它所要求匹配对象为指定字符以外的任一个字符。
select * from flow_user where username LIKE'[^王李张]飞';
将找出不是“王飞”“李飞”“张飞“的”赵飞“、”吴飞“等。
注:oracle like 不支持正则,你可以使用支持like的正则regexp_like
5、查询内容包含通配符时:
由于通配符的缘故,导致查询特殊字符“%”、“_”、“[”的语句无法正常实现,把特殊字符用“[]”括起来便可以正常查询。
function sqlencode(str)
str=replace(str,"[","[[]") '此句一定要在最前
str=replace(str," ","[ ]")
str=replace(str,"%","[%]")
sqlencode=str
end function
⑧ SQL中like的用法
LIKE是另一个在WHERE子句中会用到的指令。基本上,LIKE能让我们依据一个套(pattern) 来找出我们要的资料。相对来说,在运用IN的时候,我们完全地知道我们需要的条件;在运用BETWEEN的时候,我们则是列出一个范围。LIKE的语法如下:
⑨ 请问下sql全部查询的话 like ‘%’ 和like ‘%%’有啥区别呢为什么一般用后者呢
个人没研究过这个,毕竟不是空的,都是直接用is not null
不过 like %% 显示的是所有不为空(null)的字段(不知道全部是空格能不能显示)
那么 like % 可能就在null这里可能会有些区别
建立一张表a,两个字段,一个是编码,一个是测试字段
1 a
2 aa
3 aaa
4 (四个空格)
5 (null) 也就是空
6 null(字符串null)
然后分别执行 子二个字段 like '%%' 和 like ‘%’的操作,就应该可以根据前面出现的数字,确定二者的区别,如果二者真的显示的结果一样,那么也就没区别了。如果显示的结果不一样,那么才能知道二者的区别。