一、简单查询 c{[q>@y
pK
Fq9Q+RNMZL
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 zD3mX<sw
UX]L;kI
表或视图、以及搜索条件等。 F#|:`$t
,t)x{I;C)
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 U35AX9/
\;rYo.+
SELECT nickname,email 3=W!4
9o>8o
FROM testtable 5wUUx#
?8W("W
WHERE name='张三' g#]wLm#
@y31NH(
(一)选择列表 waKT{5k
$ "Bh]-
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 pHoEa7:
4nAa`(62
量和全局变量)等构成。 7} jWBK
!ZU2{
1、选择所有列 c$wsH25KH8
~^+0
例如,下面语句显示testtable表中所有列的数据: W
d0NT@
\P1=5rP
SELECT * WoxwEi1~0
0j C3fT!n
FROM testtable M`6y@<
h5yzwj:C?
2、选择部分列并指定它们的显示次序 :UJ a&$)
wCk~CkC?
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 y*MF&mQ[
f@co<iA
例如: %p
X6QRt?
gNG r!3*)w
SELECT nickname,email g R
nOd
t#!yrQ..'G
FROM testtable sZ?mP;Q
@,XSs
3、更改列标题 2 1PFR:lP7
![f ![l
在选择列表中,可重新指定列标题。定义格式为: /t-fjB{=G
vd6l7"0/
列标题=列名 H~ u[3LQz
6=N`wi
列名 列标题 :rP#I#,7w
.CSS}4
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 Ngg?@pG0y
KR"M/#
标题: ~ H6r.:]
_4 cvX
SELECT 昵称=nickname,电子邮件=email <_(/X,kBK
c)0amM
FROM testtable \
u_ui
z#F.xVg'
4、删除重复行 DS|KkTy3
S>.F_Jl
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 2Hum!p:1
ly WwGR
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 ~zHg[X*
>c-fI$]
5、限制返回的行数 E\; ikX&1
+/D>|loRC
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 (RtueEb.~E
rWh6RYd<T
表示一百分数,指定返回的行数等于总行数的百分之几。 Q?AmOo-a
N$[$;Fm:
例如: lgpW@g
_bD/D!|
SELECT TOP 2 * ~afg)[(
ddVa.0Z!<
FROM testtable G^"Vo x4
KN"S?i]X
SELECT TOP 20 PERCENT * nL:SG{7
!`bio cA
FROM testtable ,7XtH>2s
SR*wvQnOx
(二)FROM子句 ?|e'Gbb_
(Z5##dS3
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, @E.k/G!~Nb
1
y}2+Kk
它们之间用逗号分隔。 ! Q<>3xZ
"7>>I D
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 f&D]anf33
8}w6z7e|{
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 q.2(OP>(
kF7V.m/~o
使用下面语句格式加以限定: mJB2)^33a
fI\9\x
SELECT username,citytable.cityid ^`f*'Z
4 g.
bR
FROM usertable,citytable 1009ES7*
'Pvm8t
WHERE usertable.cityid=citytable.cityid - y9>;6
n}xhW'3hU=
在FROM子句中可用以下两种格式为表或视图指定别名: ?OdJqw0,G
>u%]6_[
表名 as 别名 PCn Q_A-Q
PM":Vd/
表名 别名 a{Esw`
;IK[Y{W/
例如上面语句可用表的别名格式表示为: Jx#k,Z4
v+"rZ
SELECT username,b.cityid '&;yT[
!6&W,0<
FROM usertable a,citytable b `MP|Ovns:H
fA48(0p
WHERE a.cityid=b.cityid fri0XxF
mW%?>Z1=>d
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。
htY=w}>
C6_@\&OA
例如:
_if|TFw;h
{2`=qt2
SELECT a.au_fname+a.au_lname }6 5s'JB
NrDi
FROM authors a,titleauthor ta @5)
8L/[l
xyr+_k-x&q
(SELECT title_id,title (wmBjQ]B<
wiX ~D
FROM titles 9{j66
,%bhyww<
WHERE ytd_sales>10000 U=sh[W
i~J;G#b
) AS t YGc^h(d
^% Q|s#w.
WHERE a.au_id=ta.au_id h;lirvO|
*b}>cn)<v
AND ta.title_id=t.title_id (yo;NKq,@
<ktzT&A
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 )x#5Il
H
]<DNo&fw
(三)使用WHERE子句设置查询条件 9]$8MY
,D6v4<jh
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: m\/(w_/?
R6 XuA(5
SELECT * =rPrPb
Kt>X[o3m,
FROM usertable "x'),
h x6;YV
WHERE age>20 !S%6Uzsj
&p<(_|Af
WHERE子句可包括各种条件运算符: BcA31%
+5v}q.:+
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< #$vRJ#S}U
&@"]+33
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… hM@\RPsY
G)>W'yxQ
NOT BETWEEN…AND… }2)DPP:ic
5sde
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) KRsAv^']
I>h<b_y
NOT IN (项1,项2……) y?[snrK G
nD"~?*Lt
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE V@=V5bZLs
%,b X/!
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL #y]3LC#)^G
yj@tV2
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR M4Z@O3OIE
5H,G-
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 (B>Zaro#
0@1:M
2、列表运算符例:country IN ('Germany','China') ZA#y)z8!E
wN37zPnV~
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 DJhb
!a1i Un9
varchar、text、ntext、datetime和smalldatetime等类型查询。 /7$mxtB5%L
tqOi
x/
可使用以下通配字符: e1
*__'
&A!KJ.
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 F>|9 52
guN4-gGDr<
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 KiLvI,9y
yeD_j/
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 p}]q d4j
}\v^+scD
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 7x.%hRk
dhRJg"vrQ
例如: 0rMqWP
G2mNm'0
限制以Publishing结尾,使用LIKE '%Publishing' <z#BsnjW{
>L2*CV3p
限制以A开头:LIKE '[A]%' <Mgf]v.QS
||TtNH
限制以A开头外:LIKE '[^A]%' 4 9w=kzo
3
%(Y$8U
4、空值判断符例WHERE age IS NULL rb_Z5T
+h[e0J|v{
5、逻辑运算符:优先级为NOT、AND、OR 5S/>l_od$2
G_oX5:J*
(四)查询结果排序 MUof=EJg>u
ZW ye>]
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: XK 3]AYH
e&J3N
ORDER BY {column_name [ASC|DESC]} [,…n] {Qtq7q.
&zN@5m$k;
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 < tQc_
%<U{K;
序。 .Vx|'-u
GEE
]Kr
例如: dXP6"V@iI
9={N4}<
SELECT * u7k|7e=xk
Jirct,k
FROM usertable 4]6 Qr
&G{2s J5{
ORDER BY age desc,userid ASC {;RF
^tE_LL+ji|
另外,可以根据表达式进行排序。 Z H-5Qy_
*caLN,G
M'u=H
,RK3eQ
二、联合查询 g3rRhS
ltEF:{mLe#
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 {'IFWD. 5
{% F`%_{"
合查询。UNION的语法格式为: npj/7nZj
##~!M(c
select_statement fNxw&ke8&
yisLypM*
UNION [ALL] selectstatement w`#fH
nYov>x]
[UNION [ALL] selectstatement][…n] [_%,6e+
rbh[j@s@
其中selectstatement为待联合的SELECT查询语句。 zUQe0Gc.b^
]C)|+`XE@
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 t-lv|%+8
:Y.e[@!1x
行。 vXubY@k2
1l]C5P}E
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 4Iq5+Q
4$i} Xk#3
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 6F ;Or
LVmY=d>
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 N *1
*tG11gR,&