《
Sqlserver
之新大陆》
Sql
的嵌套查询一直没有怎么重视,最近开发一个新项目,发现这样的
sql
语句。
select
qid
,
ssName=(select ssname from second_sort where ssid=question.ssid),
qtitle
,
qatime
from
question
where
ssid
=(
select
ssid
from
question
where
qid
=
@qid
)
and
qreply
=
1
and
qid
<>
@qid
order
by
qatime
desc
然后我就测试一下另外和这个详细的
sql
语句:
select
qid
,
ssName=(select ssname from second_sort where ssid=question.ssid)
,
qtitle
,
qatime
from
question
where
qreply
=
1
and
qtitle
like
'%
天津
%'
order
by
qatime
desc
红色部分不是很理解,然后就在网上找一下资料,发现嵌套语句可以同时出现在查询列表(如上例),
where
,
from
子句中,然后
sqlserver
调试器里里面测试一下,如下图所示:
但去掉上面的句子后,出现的结果为,
然后把模糊查询别人的一点资料分享一下,转载自园子里的
八一精神
执行
数据库查询时,有完整查询和模糊查询之分。
一般模糊语句如下:
SELECT
字段
FROM
表
WHERE
某字段
Like
条件
其中关于条件,
SQL
提供了四种匹配模式:
1
,
%
:表示任意
0
个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(
%%
)表示。
比如
SELECT * FROM [user] WHERE u_name LIKE '%
三
%'
将会把
u_name
为
“
张三
”
,
“
张猫三
”
、
“
三脚猫
”
,
“
唐三藏
”
等等有
“
三
”
的记录全找出来。
另外,如果须要找出
u_name
中既有
“
三
”
又有
“
猫
”
的记录,请运用
and
条件
SELECT * FROM [user] WHERE u_name LIKE '%
三
%' AND u_name LIKE '%
猫
%'
若运用
SELECT * FROM [user] WHERE u_name LIKE '%
三
%
猫
%'
虽然能搜索出
“
三脚猫
”
,但不能搜索出符合条件的
“
张猫三
”
。
2
,
_
:
表示任意单个字符。匹配单个任意字符,它常用来限定表达式的字符长度语句:
比如
SELECT * FROM [user] WHERE u_name LIKE '_
三
_'
只找出
“
唐三藏
”
这样
u_name
为三个字且中间一个字是
“
三
”
的;
再比如
SELECT * FROM [user] WHERE u_name LIKE '
三
__';
只找出
“
三脚猫
”
这样
name
为三个字且第一个字是
“
三
”
的;
3
,
[ ]
:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
比如
SELECT * FROM [user] WHERE u_name LIKE '[
张李王
]
三
'
将找出
“
张三
”
、
“
李三
”
、
“
王三
”
(而不是
“
张李王三
”
);
如
[ ]
内有一系列字符(
01234
、
abcde
之类的)则可略写为
“0-4”
、
“a-e”
SELECT * FROM [user] WHERE u_name LIKE '
老
[1-9]'
将找出
“
老
1”
、
“
老
2”
、
……
、
“
老
9”
;
4
,
[^ ]
:表示不在括号所列之内的单个字符。其取值和
[]
相同,但它要求所匹配对象为指定字符以外的任一个字符。
比如
SELECT * FROM [user] WHERE u_name LIKE '[^
张李王
]
三
'
将找出不姓
“
张
”
、
“
李
”
、
“
王
”
的
“
赵三
”
、
“
孙三
”
等;
SELECT * FROM [user] WHERE u_name LIKE '
老
[^1-4]';
将排除
“
老
1”
到
“
老
4”
,寻找
“
老
5”
、
“
老
6”
、
……
5
,查询内容包含通配符时
由于通配符的缘故,导致我们查询特殊字符
“%”
、
“_”
、
“[”
的语句不能正常实现,而把特殊字符用
“[ ]”
括起便可正常查询。据此我们写出以下函数:
function sqlencode(str)
str=replace(str,"[","[[]") '
此句一定要在最前
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function
在查询前将待查字符串先经该函数处理即可。