一、简单查询 G;CB%qXI
V.8pxD5s
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 &\_cU?0d
KW[Jft
表或视图、以及搜索条件等。 JL7"}^
Wz^M*=,
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 1sHaG
!KEnr`O2u
SELECT nickname,email H|K}m,g
]F]!>dKA
FROM testtable 1D pRm(
J|Xu]fg0
WHERE name='张三' KJf~9w9U
*k7vm%#ns
(一)选择列表 p7YfOUo
k
"Y7
]t:8
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 BW61WH?
:<}.3 Q?&
量和全局变量)等构成。 )^ky @V
\>>^eZ
1、选择所有列 3V"y|q
8O)!{gB
例如,下面语句显示testtable表中所有列的数据: #Ang8O@y
oiS>:de%tc
SELECT * N]k(8K
@YMQbjbr
FROM testtable M_4:~&N$
e0#/3$\aSV
2、选择部分列并指定它们的显示次序 g7|$JevR0
LD~s@}yH>
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 S4jt*]w5b
fnUR]5\tc
例如: LQnkpy3A
SseMTw:
SELECT nickname,email 4rh*&'
4l2xhx
FROM testtable CulU?-[i
.o2]ndT/J
3、更改列标题 B~/LAD_
n>w/T"
在选择列表中,可重新指定列标题。定义格式为: qXGAlCq@
G*;}6 bj|?
列标题=列名 $hkMJ),T~
e*Gm()Vu,
列名 列标题 -,;Iob56!
zKi5e+\
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 ,u^S(vxyz
_/W[=c
标题: &~u=vuX
uh~/ybR
SELECT 昵称=nickname,电子邮件=email +G!N@O
$>3/6(bW
FROM testtable 93Yo}6>
.oJs"=h:m
4、删除重复行 5pBQ~m3
JeR8Mb
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 Ufz& 2
LvJ')HG
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 *nB fF{y
Fr}e-a
5、限制返回的行数 6
1=?(Iw
1@nGD<,.
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 i>9/vwe
)
0x*>;"o
表示一百分数,指定返回的行数等于总行数的百分之几。 h^P>,dy0
JD^&d~n_
例如: 41<.e`{
"+REv_:
SELECT TOP 2 * T,72I
!af35WF
FROM testtable qAsZ,ik
4]N`pD5
SELECT TOP 20 PERCENT * Ve,_;<F]S
G
.~Psw#
FROM testtable }b+tD3+
rO%
|PRP
(二)FROM子句 BJ3st
V8>%$O
sw
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, p6(n\eg R
Q{Gi**<
它们之间用逗号分隔。 DT # 1*&-
A2z%zMlZc
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 DJeP]
Q)}sX6TB
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 pR8]HNY0
,jyNV<dI
使用下面语句格式加以限定: cO2
.gQo'
jxL5L[
SELECT username,citytable.cityid rUkiwqr~E
_pQ9q&i4
FROM usertable,citytable OGNjn9av
or/Y"\-!
WHERE usertable.cityid=citytable.cityid A%n
l@`s,
"k\W2,q[
在FROM子句中可用以下两种格式为表或视图指定别名: H~+D2A
EI2V<v
表名 as 别名 65RWaz;|
~130"WQ;
表名 别名 `gy]|gS#b
WO*YBH@
例如上面语句可用表的别名格式表示为: JoA^9AYhR
=^4 vz=2
SELECT username,b.cityid i\G@ kJNnF
>Vc_.dR)E
FROM usertable a,citytable b FsZF>vaV
Yt2_*K@rC
WHERE a.cityid=b.cityid NA[yT
Zb`}/%\7
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 0X#tt`;
a3
wUB
例如: l%lkDh!$"
b&p*IyJR
SELECT a.au_fname+a.au_lname k( 1rp|qf
nJ.pPzH2g
FROM authors a,titleauthor ta {Q^P<
:{%6<j
(SELECT title_id,title =0`"T!1
A\lnH5A
FROM titles .Xh ^L
gKcP\m
WHERE ytd_sales>10000 M[D`)7=b
#\iQ`Q<B
) AS t p+#J;.
<r.f ?chf
WHERE a.au_id=ta.au_id nX<!n\J T
/s
uz>o\
AND ta.title_id=t.title_id =&xamA)
;%odN
d
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 }8GCOY
%Vrl"4^}t
(三)使用WHERE子句设置查询条件 +w:[By"
f8_5.vlw
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: J6_Hlt
UL$^zR3%d
SELECT * S*?'y
R*/%+
FROM usertable ;$&&tEh)
5G'X\iR
WHERE age>20 [G+M94[A
zv||&Hi
WHERE子句可包括各种条件运算符: KR%p*Nh+C
GfD!Z3
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< ,;y5Mu8
UMpC2)5
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… M '$n".,p
LtJ$ZE^GB
NOT BETWEEN…AND… J1YP-:
xV}E3Yj2#
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) 5Lo{\7%
fMlxtj+5
NOT IN (项1,项2……) 7]@vPr;:
@ >%I\
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE ;iy]mPd
m!er"0
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL ~#h@.yW^JN
^j[>.D
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR y;keOI!
e!d&
#ofw|
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 A 7'dD$9
vo-n9Bj
2、列表运算符例:country IN ('Germany','China') 5O#CdN-S
|#^u%#'[2
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 ]QJLES
2shr&Mfp[
varchar、text、ntext、datetime和smalldatetime等类型查询。 n9<QSX&~<
dz5a! e
[
可使用以下通配字符: pR4{}=g,
) 2wof(
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 [( BA:x1
;-~Wfh+
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 Se9I1~mX
$u|p(E:*
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 sEt5!&