一、简单查询 KNd<8{'.
3oMHy5
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 Q
N#bd~
j]<K%lwp
表或视图、以及搜索条件等。 B 5|\<CF
}UB@FRPF
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 H(K
PU1lDw
PC<_1!M]
SELECT nickname,email ;-kDJi
/B~[,ES@1
FROM testtable J:glJ'4E
]4en|Aq
WHERE name='张三' n"6L\u
Z%B6J>;u M
(一)选择列表 X(*O$B{
R
YnU)f@b#
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 T!KwRxJ23
CCe>*tdf
量和全局变量)等构成。 |&rCXfC
][v]Nk
1、选择所有列 LrbD%2U$j5
)j>U4a
例如,下面语句显示testtable表中所有列的数据: ;VAyH('~
60u_,@rV
SELECT * 2*V[kmD/3
#xw*;hW<
FROM testtable !h7.xl OpN
iP"sw0V8
2、选择部分列并指定它们的显示次序 +|,4g_(j
XgHJ Oqt
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 X]D,kKasG
DI{*E
例如: 9"]#.A^Q*
ucx02^uA
SELECT nickname,email }}QR'
@|vH5Pi
FROM testtable }\?9Prsd
x'I!f? / &
3、更改列标题 </`\3t
+K`A2&F9
在选择列表中,可重新指定列标题。定义格式为: ~s'tr&+
4A!]kj5T
列标题=列名 jTcv&`fAz
X&?s:A
列名 列标题 n%7?G=_kj
lnyfAq}w
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 ()?83Xj[c
LsuOmB| ^
标题: J4"Fj, FS
fyb;*hgu
SELECT 昵称=nickname,电子邮件=email lt&(S)
SULFAf<
FROM testtable +wmG5!%$|
P8,Ps+
4、删除重复行 4>>=TJ!M
ezp%8IZ;
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 ^0OP&s;"
lbBWOx/|
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 }Ze*/p-
LD}~]
5、限制返回的行数 c_D(%Vf5
_b~{/[s
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 @I`^\oJ
hDW!pnj1
表示一百分数,指定返回的行数等于总行数的百分之几。 |j`73@6
nOGTeKjEJ
例如: jRS{7rx%MH
#;j:;LRU
SELECT TOP 2 * WI/tWj0
<Kv$3y
FROM testtable 7PX`kI
,
,{UGe3
SELECT TOP 20 PERCENT * 73D<wMgZF
Ic0Y
FROM testtable WQ.0} n}d
1*TbgxS~W
(二)FROM子句 F+V!p4G
L>h8>JvQ
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, nTEN&8Y>R
Gs,:$Im
它们之间用逗号分隔。 -SrZ^
F^75y?
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 0
Uropam
o3 fc -
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 3c=kYcj
00QJ596
使用下面语句格式加以限定: KkA)p/
@i1e0;\
SELECT username,citytable.cityid &Vz$0{d5
tNi>TkC}`
FROM usertable,citytable `x9Eo4(/
J, 9NVw$
WHERE usertable.cityid=citytable.cityid 9Ux(
MYWkEv7
在FROM子句中可用以下两种格式为表或视图指定别名: _{K mj,q
Cku"vVw,
表名 as 别名 -)`_w^Ox
5QMra5N k
表名 别名 J+u}uN@
XVYFyza;
例如上面语句可用表的别名格式表示为: @Nek;xJ
4N,mcV
SELECT username,b.cityid EO&Q
$oK&k}Q
FROM usertable a,citytable b *|fF;-#v
!qt2,V
WHERE a.cityid=b.cityid *j%x
mH'~pR>t
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 `<C<[JP:o
9{toPED
例如: 6Yj{%
G
lM6pYYEq=
SELECT a.au_fname+a.au_lname Gmz^vpQ]t
0@
Y#P|QF
FROM authors a,titleauthor ta l#'V
SFm&
to'7o8Z
(SELECT title_id,title #Vq9 =Q2
BNu >/zGpB
FROM titles 0ns\:2)cEB
a#YK1n[!
WHERE ytd_sales>10000 zfeT>S+
dZU#lg
) AS t iVXt@[
^,>w`8
WHERE a.au_id=ta.au_id o|kykxcq
P0m3IH)
AND ta.title_id=t.title_id xh;V4zK@`
)>iOj50n3
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 FZr/trP~
ZSC*{dD$E
(三)使用WHERE子句设置查询条件 :!%V Sem
Z[oF4 z
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: -K64J5|b7
m9 h '!X<
SELECT * >
N~8#C
f!9i6
FROM usertable b2m={q(s
Zse&{
WHERE age>20 /Nf{;G!kg
;w7 mr1
WHERE子句可包括各种条件运算符: i+Z)`
O$,Fga
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< 7*!7EBb
95l)s],
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… 1)ue-(o5
uE-(^u
NOT BETWEEN…AND… <RGH+4LF
sT M;l,
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) T6U/}&{O
S
/hx\TzC
NOT IN (项1,项2……) ;M:AcQZ|_
No^gKh24
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE `2mddx8
x< A-Ws{^V
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL -NBVUUAgN
p['RV
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR U'fP
s ^h@b!'7
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 ar3L|MN
"rv~I_zl
2、列表运算符例:country IN ('Germany','China') aZOn01v;!&
Pq;OShU_
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 SH%NYjj
Y{YbKKM
varchar、text、ntext、datetime和smalldatetime等类型查询。 2HE@!*z9H
Pe`(9&iT.
可使用以下通配字符: C8U3+ s
T+kV~ w{
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 fkA+:j~z_
mq`/nAmt
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 "4N&T#
1[%3kY-h
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 ?:(y
=8AT[.Hh
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 &@0~]\,D7
n5:uG'L\
例如: )l3Uf&v^f
>>U>'}@Q
限制以Publishing结尾,使用LIKE '%Publishing' LOh2eZ"n
'!HTE`Aj
限制以A开头:LIKE '[A]%' po| Ux`u
` 2lS@
限制以A开头外:LIKE '[^A]%' n6/Ous
(Ou%0
KW
4、空值判断符例WHERE age IS NULL ;Shu
l A ^1}
5、逻辑运算符:优先级为NOT、AND、OR _D '(R
l/.{F ;3F
(四)查询结果排序 EL 5+pt
u#0snw~)/
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: ]}2)U
acd[rjeT
ORDER BY {column_name [ASC|DESC]} [,…n] A;oHji#*
ci0A!wWD
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 Q]ersA8 V>
|Y9>kXM l
序。 F.9}jd{
hZ&KE78?
例如: @@65t'3S
+7_qg
i7:
SELECT * iC"iR\Qu
){^J8]b7#
FROM usertable WtT;y|W
8=8hbdy;
ORDER BY age desc,userid ASC &7L7|{18
@X==[gQ
另外,可以根据表达式进行排序。 Q:}]-lJg
MpV<E0CmE
0SQ!lr
~ao:9ynY
二、联合查询 !~ox;I}S
>3 o4 U2
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 p~D}Iyww1_
djd/QAfSC
合查询。UNION的语法格式为: PDNl]?
b1&