一、简单查询 zv8aV2?D
7qCJ]%)b6
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 !#}v:~[A
AsTMY02|
表或视图、以及搜索条件等。 Fr1;)WV
9:bh3@r/
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 nF|#@O`1
#j(q/
T{x
SELECT nickname,email \]tq7
<1;,B%_^
FROM testtable MzBfHt'Rk
23(B43zy
WHERE name='张三' ,-w-su=J_
`I]1l MJ)o
(一)选择列表 hY\Eh.
[Q2S3szbt6
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 7j9D;_(.^$
<~IH`
量和全局变量)等构成。 0X] ekq
?^+#pcX]t|
1、选择所有列 /\IAr,w[
x!Z:K5%O
例如,下面语句显示testtable表中所有列的数据: X
,V= od>
GC5#1+fQ
SELECT * U89]?^|bb
L%c]%3A
FROM testtable 8:3oH!n
9,Crmbw8
2、选择部分列并指定它们的显示次序 DTX/3EN
"1gk-
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 2?#y
|/
y9l#;<b
例如: ~frPV8^DP
`dG.L
SELECT nickname,email @p9e:[
o$[a4I
FROM testtable k1QpX@
/xX,
3、更改列标题 i_oro"%yL
;-Y]X(z>
在选择列表中,可重新指定列标题。定义格式为: lOowMlf@2
W TXD4}
列标题=列名 w@gl
`? 9]'
列名 列标题 f)u*Q!BDD
%x cM_|AyR
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 <3],C)Zwc
=F^->e0N
标题: }iiG$?|.
Cu)%s
SELECT 昵称=nickname,电子邮件=email z[0LU]b<
YW4bm
FROM testtable _{2Fx[m%
3isXgp8
4、删除重复行 wB1-|=K1
Pq[0vZ_}dN
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 NIWI6qCw
,J`lr
U0
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
Rsa\V6N>
-N-4l
5、限制返回的行数 %>I?'y^
c'TiWZP~
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 ei|*s+OZu
8;+Hou
表示一百分数,指定返回的行数等于总行数的百分之几。 kMJQeo79
T}b(
M*E
例如: :?&WKW
IgHs&=
SELECT TOP 2 * QYf/tQg$
&4[#_(pk
FROM testtable $Z(g=nS>
)\I? EU8
SELECT TOP 20 PERCENT * r0hta)xa
Je4.9?Ch
FROM testtable b.%B;qB
@kCD.
(二)FROM子句 .JD4gF2N
mER8>
<
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, VFO&)E/-
_($-dJ{
它们之间用逗号分隔。 yuy+}]uB@
j-C42Pfr
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 -!bLMLIg
b*6c.o
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 0Z1H6qn
^NnU gj
使用下面语句格式加以限定: yG4LQE
C9z~)aL}7
SELECT username,citytable.cityid #0YzPMV
Ck/_UY|
FROM usertable,citytable &)"7am(S`
nM (=bEX
WHERE usertable.cityid=citytable.cityid Hq"<vp
_A~~L6C
在FROM子句中可用以下两种格式为表或视图指定别名: "[".3V
}G,SqpcG
表名 as 别名 ~\@<8@N2a6
:}3qZX
表名 别名 ^*?B)D =,
wE8a4.
例如上面语句可用表的别名格式表示为: n|4D#Bd1w
3<UDVt@0
SELECT username,b.cityid \$~oH3m&
D?*sdm9r`
FROM usertable a,citytable b `
HE:D2b
b0z{"
WHERE a.cityid=b.cityid $jm>tW&;
u{{xnyl?
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 =Zb"T5E
qqom$H<
例如: "ZJ1`R=Mj
J:mu%N`
SELECT a.au_fname+a.au_lname hiK[!9r
G(|(y=ck
FROM authors a,titleauthor ta EkB6- nz
xn x1`|1u
(SELECT title_id,title ]\9B?W(#
Cf1wM:K|8
FROM titles SFk11
1UA~J|&gi^
WHERE ytd_sales>10000 /nD0hb
Oz9Mqcx
) AS t Y4~wNs6
?C>VB+X}y
WHERE a.au_id=ta.au_id m^oi4mV
jO3u]5}.6
AND ta.title_id=t.title_id T>uWf#&pjs
l"pz
)$eE
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 (h@yA8>n
>s 8:1l
(三)使用WHERE子句设置查询条件 j2{,1h j
T.m)c%]^/
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: I;11j
D -+)M8bt
SELECT * O"s`-OM;n
^* /v,+01f
FROM usertable ZNH*[[Pf
GT\s!D;<
WHERE age>20 3RH#e1Y
eS@!\Hx
WHERE子句可包括各种条件运算符: '*LN)E>d
7s fuju(
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< 9bcyPN
cmGj0YUQ1
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… ga1gd~a
%_@5_S
NOT BETWEEN…AND… DneSzqO"o
SeJFZ0p
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) k4AE`[UE
I }W-5%
NOT IN (项1,项2……) KutgW#+40
':R3._tw\
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE k\thEEVP0*
7Ae,|k
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL g$-D?~(Z
3f2Hjk7,d
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR }vxH)U6$q
;R|#ae@
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 ~:b:_ 5"
5bznM[%xO
2、列表运算符例:country IN ('Germany','China') ?VN]0{JSp
(#l_YI
-
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 T#_n-b>
ESf7b `tS
varchar、text、ntext、datetime和smalldatetime等类型查询。 $E_vCB_
kcz#8K]~
可使用以下通配字符: at(p,+ %
Jx
;"a\KD
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 ):\{n8~
H{A| ~V)
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 Ho._&az9cT
hy&Hl
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 z9kX`M+
<%#y^_
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 uj1E*
98m
e}4^N1'd/
例如: 2=,Sz1`t
[oN> :
限制以Publishing结尾,使用LIKE '%Publishing'
2:5gMt
\^( vlcy
限制以A开头:LIKE '[A]%' S{)n0/_
>]Yha}6h
限制以A开头外:LIKE '[^A]%' ZO0]+Ko
}:D~yEP
4、空值判断符例WHERE age IS NULL Z
a1|fB
56
kgL;$h
5、逻辑运算符:优先级为NOT、AND、OR FR6I+@ oX~
<C96]}/ ?
(四)查询结果排序 k42ur)pb
sv6U%qV
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: ?*mbce[
+G[HZ,FL
ORDER BY {column_name [ASC|DESC]} [,…n] |{LaZXU &
XM@i|AK
M0
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 898wZ{ 9
9-iB?a7{.
序。 j}.J$RtW1f
`8.32@rUB.
例如: 4Hpu EV8Q
utl=O
SELECT * _,0!ZP-
=
hX-jP
FROM usertable od's1'cR
x)wt.T?eL
ORDER BY age desc,userid ASC Aag)c~D
2hC$"Dfp
另外,可以根据表达式进行排序。 'U{:
zBh
3jeV4|
m"7 R
4O
Y6%OV?}v!
二、联合查询 Yg,lJ!q
n@,eZ!
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 s]8J+8
<uO
+U)|&1oa
合查询。UNION的语法格式为: bnY8.Lpf|
-qP[$Q
select_statement fQ_8{=<-&X
7`<? fO
UNION [ALL] selectstatement X6*y/KGN
+siNU#!
[UNION [ALL] selectstatement][…n] uvv-lAbjw
[%,=0P}
其中selectstatement为待联合的SELECT查询语句。 St&H