一、简单查询 'W. Vr4
`m~syKz4A
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 vq'c@yw;
e_3CSx8Cc
表或视图、以及搜索条件等。 xl4=++pu)
QP I+y8N=
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 ctmQWrk|B
u62 )QJE
SELECT nickname,email }odV_WT
,Fqz e/
FROM testtable pb;")Q'
yl]FP@N(
WHERE name='张三' 2YwVU.*>
D vkxI<Xa
(一)选择列表 /i|z.nNO
d4^`}6@
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 Tp%(I"H'_;
QGnxQ{ko
量和全局变量)等构成。 3eIr{xs
'md0] R|
1、选择所有列 1qdZc_x
f>Td)s1
M
例如,下面语句显示testtable表中所有列的数据: uYO|5a<f~
rjA@U<o
SELECT * e,1u
@)YY\l#
FROM testtable /!FWuRe^
*=F(KZ
2、选择部分列并指定它们的显示次序 B33$ u3d
AD5)
.}[F
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 WPuz]Ty
/)|X.D
例如: v@
C,RP9
l3i,K^YL
SELECT nickname,email US&B!Q:v
%uESrc-;
FROM testtable *e.*=$
;]D(33)(
3、更改列标题 CX/(o]
D}mL7d1
在选择列表中,可重新指定列标题。定义格式为:
&wH:aD
QOFvsJ<s
列标题=列名 XH 4d<?qu
&&8'0.M{
列名 列标题 M7}Q=q\9
|!z2oO
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 KpZ:Nh$
mS=r(3#
标题: FVWfDQ$&v
l)8&Ip
SELECT 昵称=nickname,电子邮件=email <+`(\
ReB7vpd
FROM testtable "l~Ci7& !a
|cbd6e{!
4、删除重复行 ]TpU"JD
HZJL/=;
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 (yrh=6=z
hXL|22>w<
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 dz9Y}\2tf
gvavs+H%
5、限制返回的行数 ".2K9j7$
f_mhD dq
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 .QWhK|(.!
L^Wz vv]
表示一百分数,指定返回的行数等于总行数的百分之几。 &V=7D# L
6DF
例如: Nud,\mXrY[
mO rWJ~=
SELECT TOP 2 * 7_jE[10
mX# "+X|
FROM testtable 6Z:YT&,f
Y>6.t"?Q^
SELECT TOP 20 PERCENT * $n=lsDnhQ
{ShgJ;! Q
FROM testtable mB 55PYA
Un=a
fX?j
(二)FROM子句 +Ghi}v
Q
s(Bnb;
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, y=N"=Z
#*$p-I=
它们之间用逗号分隔。 'Z!Ga.I
iw]k5<qKj
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 ?bX
}6m?d!m
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 m\0cE1fir
59 2;W-y
使用下面语句格式加以限定: V^fV7hw<
C".1+Um
SELECT username,citytable.cityid NlPS#
*:"^[Ckc
FROM usertable,citytable w<nv!e?
rzLd"`
WHERE usertable.cityid=citytable.cityid gSi5u#}J
XX; 6 P
在FROM子句中可用以下两种格式为表或视图指定别名: J1F{v)T'?
NP
t(MFK\
表名 as 别名 dSK0h(8
H[&@}v,L
表名 别名 >IvBUM[Rt
i.a _C'<$
例如上面语句可用表的别名格式表示为: 7nE"F!d+0
`u'dh{,gE
SELECT username,b.cityid D_D,t8_Y
e<+<lj"
FROM usertable a,citytable b C3 ;[e0.1b
UZxmhsv
WHERE a.cityid=b.cityid GrI&?=S^
ocA]M=3~k
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 wT_^'i*@I
o#hI5
例如: 5~VosUpe7
C7"HQQ
SELECT a.au_fname+a.au_lname ?-~I<f]_
D guB
FROM authors a,titleauthor ta !q/5yEJ>h
M[P^]J@
(SELECT title_id,title POd/+e9d
M}FWBs'*|
FROM titles 05e>\}{0
Wr%7~y*K
WHERE ytd_sales>10000 I48VNX
,@CfVQz
) AS t &r_uQbx
sg?@qc=g
WHERE a.au_id=ta.au_id [#b2%G1
v <h;Di@
AND ta.title_id=t.title_id "dCzWFet
L]bVN)JU
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 <0j{ $.
Ol+Kp!ocY
(三)使用WHERE子句设置查询条件 pM$ @m]
@p!Q1-] =
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: x mo&![P
ZwJciT!_~
SELECT * sBW3{uK
;;#nV$
FROM usertable y:so
L:(F
;sQbn|=e"
WHERE age>20 @EZ>f5IO+
C3"&sdLb$
WHERE子句可包括各种条件运算符: $G";2(-k
gA:TL{X0
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< h7W}OF_=y
3E|;r
_;
8
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… Wc4vCVw
wq\G|/%
NOT BETWEEN…AND… \r-N(;m
U ":"geU
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) ~[18q+,
IC~ljy]y_
NOT IN (项1,项2……) &YX6"S_B
zixEMi[8
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE L#j/0IHD
i\x~iP&F$
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL Alu5$6X
$WaZ_kt
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR i^g~~h
F
zO.6WJ
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 Rc9<^g`
mK\aI
2、列表运算符例:country IN ('Germany','China') ;'1Apy
/H&aMk}J@y
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 myvh@@N
uBeNXOre
varchar、text、ntext、datetime和smalldatetime等类型查询。 ntH T
" i`8l.Lc
可使用以下通配字符: ^ KOzCLC
9q|7<raS
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 dU+0dZdKO
~ x`7)3
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 vInFo.e[4
g!^J ,e=
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 <