一、简单查询 :Sh>
cVzOW|NVx
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 9s5PJj "u
-3M6[`/
表或视图、以及搜索条件等。 x)X=sX.
eBD7 g-
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 oQrkd:
kEM5eY
SELECT nickname,email ,j4 ;:F
/Z:\=0`
FROM testtable G/F0)M
w$JG:y#
WHERE name='张三' BF*]l8p
0NY2Kw;
(一)选择列表 yDt3)fP#
k^|P8v+"D
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 it2@hZc5
I_Q*uH.Y 5
量和全局变量)等构成。 \O"EK~x}/
E7eOKNVC#
1、选择所有列 =YPvh]][
oGzZ.K3 A
例如,下面语句显示testtable表中所有列的数据: y;N[#hY#CD
S`LS/)
SELECT * @v1f)(N
}gE?ms4$
FROM testtable Ok-*xd
G22=8V
2、选择部分列并指定它们的显示次序 4v+4qyMyE
,0^:q)_
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 Td&w
J%?'Q{
例如: M<3P
XYbc1+C
SELECT nickname,email f
IUz%YFn
#,dE)
FROM testtable yNk9KK )
.Dw^'p>
3、更改列标题 :*wnO;eN
jk0Ja@8PK
在选择列表中,可重新指定列标题。定义格式为: 4\%0a,\^
P:z 5/??2S
列标题=列名 zwAkXj
fJ[(zjk
列名 列标题 kaxAIk8l
jgLCs)=5hV
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 \R>!HY
;cBFft}D
标题: Qt_LBJUWV
)'{:4MX
SELECT 昵称=nickname,电子邮件=email NX?J
U>^u!1X
FROM testtable N?d4Pu1m
sR`WV6!9
4、删除重复行 9aw- n*<
~]71(u2
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 o=`FGowF
W
s!N%%g
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 X<4h"W6
gi;#?gps
5、限制返回的行数 ~eH+*U|\|M
neGCMKtzlJ
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 %DAF26t
9}`A_KzFx
表示一百分数,指定返回的行数等于总行数的百分之几。 I|=$.i
t:m2[U_}
例如: LPgP;%ohO/
Lh~Ym<CeN
SELECT TOP 2 * ~
#Gu:
/? n 9c;w
FROM testtable @0`Q
)-FQ_K%
SELECT TOP 20 PERCENT * 2M>Y3Q2Yv
5b_[f(
FROM testtable vb{+yEa
_
i )Z8#
(二)FROM子句 {0fQ"))"
n/_cJD\
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, 0zg\thL
'|r('CIBN/
它们之间用逗号分隔。 28L3"c
PjEKZHHz
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 gIR{!'
Yt"&8N]
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 ~%9ofXy
#NM.g
使用下面语句格式加以限定: #`6A}/@.+
,*fvA?
SELECT username,citytable.cityid EQ&E C
<tZPS`c'_
FROM usertable,citytable 1MdVWFKXV
\*#9Ry^f
WHERE usertable.cityid=citytable.cityid QE7
r{
>= Hcw
在FROM子句中可用以下两种格式为表或视图指定别名: 36D-J)-Z
^a@Vn\V1
表名 as 别名 X*Mw0;+T
rJJI<{$
表名 别名 dB7E&"f
/IM5#M5~
例如上面语句可用表的别名格式表示为: sa8Sy& X"
]p~QdUR(
SELECT username,b.cityid t@-:e^ v
v~:$]a8
FROM usertable a,citytable b [o)P
J;Az0[qMR
WHERE a.cityid=b.cityid
&UG7
g
O?omL5
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 372ewh3'
jyPY]r
例如: \[&~.B
>a98H4
SELECT a.au_fname+a.au_lname SE+K"faKQ
:0Nd4hA
FROM authors a,titleauthor ta iulM8"P
TL(L[
(SELECT title_id,title KYY~ YP
v2 [
l$
FROM titles #;'1aT
_N~h#(
WHERE ytd_sales>10000 UO}Kk*
kStWsc$;+T
) AS t B[F,D
>\b=bT@iM
WHERE a.au_id=ta.au_id 2s,wC!',
(
q^umw
AND ta.title_id=t.title_id W`],
XA{tVh
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 hQrO8T?2
t#mW`rGE_
(三)使用WHERE子句设置查询条件 hqVx%4s*J
Zs!)w9y&V
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: WF<0QH
;pdW7
SELECT * emb~l{K $
2E/#fX9!4
FROM usertable fRJSo%
s% `o
WHERE age>20 KLlo^1.<
_$"qC[.
WHERE子句可包括各种条件运算符: 6Gjr8
NS"hdyA
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< 0V*L",9M
S~`&K
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… dI&2dcumS
+u*WUw!%
NOT BETWEEN…AND… BvpGP
ymybj
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) e-f_#!bW
=!r9;L,?
NOT IN (项1,项2……) $@q)IK%FDL
0mL#8\'"
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE E]6C1C&K
!G3O!]
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL 72} MspzUt
`bO+3Y'5
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR Ps0'WRJnx
^lB'7#7
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 %"@KuqV
#X7fs5$&
2、列表运算符例:country IN ('Germany','China') &ZFsK c#
2#5SI
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 <R}(UK
[|V<e+>T/
varchar、text、ntext、datetime和smalldatetime等类型查询。 Q~]#x![u0
mY2Ubn*
可使用以下通配字符: XbYW,a@w2
gPY2Bnw;l
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 YSk,kU
<T:u&Ic
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 OUn,URI
f;#hcRSH
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 y!fV+S,
F?e_$\M
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 <LQwH23@
R`Hyg4?
例如: T<~NB5&f
#)_4$<P*'
限制以Publishing结尾,使用LIKE '%Publishing' o6K\z+.{
HgE^#qD?
限制以A开头:LIKE '[A]%' LJYFz=p"
K~AQ) ]pJI
限制以A开头外:LIKE '[^A]%' CD%wi:C%|
+LV~%?W
4、空值判断符例WHERE age IS NULL ZeF PwW
draY/
5、逻辑运算符:优先级为NOT、AND、OR mYXe0E#6
Ll lyx20U
(四)查询结果排序 FVsVY1
RvvK`}/6
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: Q&^ti)vB
1Ah
ORDER BY {column_name [ASC|DESC]} [,…n] )#Ea~>v
G $:T!
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 ` :Am#"j]}
Dms6"x2
序。 Xm*gH, '
~c,HE] B
例如: Zz=+?L
v! uD]}
SELECT * Hb=4k)-/]
cD
Z]r@AQ
FROM usertable [F%INl-sy
n
!]_o
ORDER BY age desc,userid ASC X*1vIs;[@
G%-[vk#]
另外,可以根据表达式进行排序。 Af1mTbf=
Uaog_@2n,
5Y)*-JY1g
B.6gJ2c
二、联合查询 2ksX6M3kY
mu04TPj
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 ]wWN~G)2lV
`omZ'n)
合查询。UNION的语法格式为: *xA&t)z(i
xRq|W4ay
select_statement B<J}YN
ZJ'#XZpr
UNION [ALL] selectstatement !]7Z),s
i]a0
"
[UNION [ALL] selectstatement][…n] E(*RtOC<W
l_FttN
其中selectstatement为待联合的SELECT查询语句。 3i=+ [
fmY=SqQG-
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 m^@,0\F
c?"#x-<1s
行。 5;oWFl
BV"7Wp;
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 +DaPXZ5.
xrxORtJ<