一、简单查询 2 e&M/{
d/\ajQ1::
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 a&B@F]+
+(h{3Y|
表或视图、以及搜索条件等。 $rPQ%2eF4
9y j'->dL
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 wM!dz&
NBA`@K~4
SELECT nickname,email MaZS|Zei[
)oZ2,]us!
FROM testtable iK8jX?
Myh?=:1~(c
WHERE name='张三' f\H1$q\p\
4j<[3~:0
o
(一)选择列表 /?*ut&hwv
&a'LOq+r'
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 Twk<<
d1 lxz?r
量和全局变量)等构成。 e /L([
[ZS.6{vr
1、选择所有列 x::d}PP7
,?wxW
例如,下面语句显示testtable表中所有列的数据: 7nZ3u_~
Nwk^r75l q
SELECT * \Npvm49
>".@;
FROM testtable -cP1,>Ahv
877Kv);
2、选择部分列并指定它们的显示次序 pMoza8
&5QvUn
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 x|g2H.n
%I@vM s^
例如: P|TM4i]
nY,LQ0r
SELECT nickname,email |Gr@Mi5
o 80x@ &A:
FROM testtable {HjJ9ZGQ
`tl -] ^Y2
3、更改列标题 BqtN=
x\YVB',h
在选择列表中,可重新指定列标题。定义格式为: <Ik5S1<h$H
#It!D5A
列标题=列名 w4l]rH
4|DN^F~iut
列名 列标题 @?&
i
(t,mtdD#1
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 f,ql8q(|J
nI8zT0o
标题: *E-MJCv
=FfR?6 ~
SELECT 昵称=nickname,电子邮件=email mB%m<Zo\U
(
geV(zT
FROM testtable N]&hw&R{Q
/buj(/q^#
4、删除重复行 nPH\Lra
t<%+))b
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 !(y(6u#
)/Oldyp
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 gl!ht@;>ak
Q+Eqaz`
5、限制返回的行数 =nlj|S ~3
,_K:DSiB
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 Uh'W d_?
/Z]hX*QR
表示一百分数,指定返回的行数等于总行数的百分之几。 Fzz9BEw(i
/bmkt@$-0
例如: xM/WS':V
Y@+9Ukd/
SELECT TOP 2 * [YJ*zO
OXZx!h
FROM testtable !e('T@^u6u
&"Fz)}
SELECT TOP 20 PERCENT * IEWl
I
LN9.Q'@r?
FROM testtable KVoM\ttP
AOx8OiqE:
(二)FROM子句 TJuS)AZ
C
/mwDVP<z /
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, S5~(3I
)v
a~zh5==QD
它们之间用逗号分隔。 D3y4e8+Z'
GE\({V.W
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 %h
v-3L#V
~eUv.I/
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 ^c|0?EH
m~F ~9&
使用下面语句格式加以限定: |RDE/
c$_}
SELECT username,citytable.cityid 4thPR}DH}
J~ wu*x
FROM usertable,citytable jEK{47i v
id]}10
WHERE usertable.cityid=citytable.cityid ,/[1hhP@
Ld=6'C8ud
在FROM子句中可用以下两种格式为表或视图指定别名: Vc+~yh.)
;}k_
表名 as 别名 T;i+az{N:V
f|2QI~R
表名 别名 ~O
4@b/!4
3w! NTvp
例如上面语句可用表的别名格式表示为: z'0
=3
S(: |S(
SELECT username,b.cityid 2t7=GA+j
[ *
!0DW`
FROM usertable a,citytable b f?"909&
fLV@~T|
WHERE a.cityid=b.cityid NC|VZwQtm
y/+y |.Xg
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 uNpa2{S'
LtNspFoLb
例如: SA
[(1dy;
vb`:
SELECT a.au_fname+a.au_lname /}s#
'(8}
<(%
FROM authors a,titleauthor ta ryTtGx%a
:kXxxS
(SELECT title_id,title zF&_9VNk=c
q\Z9.T+Qo
FROM titles %@%~<U)W
;!EEzR.
WHERE ytd_sales>10000 oM,UQ!x<
p&HkR^.S
) AS t c32"$g
%}{.U
WHERE a.au_id=ta.au_id U)1hC^[!
=BzBM`-o
AND ta.title_id=t.title_id (dym*_J
^L'<%_#.
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 u#0EZ2>#
&pAmFe
(三)使用WHERE子句设置查询条件 S4{\5ulr7
f1t?<=3Ek<
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: !KHbsOT?9
;\iu*1>Z,&
SELECT * @! jpJ}
I2?g'tz
FROM usertable DhG{hQ[[
bWzUWLa
WHERE age>20 ) 3I|6iS
q&,uJo
WHERE子句可包括各种条件运算符: 7Ur'@wr
{tnhP^C3>
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< -i4hJC!3
pFEU^]V3*
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… U"K%ip:Wd
+b{tk=Q:
NOT BETWEEN…AND… &9xcP.3
[8[`V)b
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) fjS#
kFi=^#J{
NOT IN (项1,项2……) P2 +^7x?
'zuA3$SR
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE dV"Kx
&I/C^/F&
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL i.+#a2
AUR{O
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR 5ma~Pjt8}
hy@e(k|S]U
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 >
Cx;h=
S#|5&SR
2、列表运算符例:country IN ('Germany','China') KPa&P:R3
wr2F]1bh@
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 r
D|Bj(X8
+VHoYEW
varchar、text、ntext、datetime和smalldatetime等类型查询。 $PTl{
*w1R>
可使用以下通配字符: M532>+A]Za
Xyw;Nh!!d
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 )(`,!s,8)
#:nds,
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 !^w}Sp
}vQY+O
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 /x&52~X5-
wdEQB-dA
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 /^Zgv-n
0+_:^z
例如: yzz(<s:o/
PL*kjrLu7
限制以Publishing结尾,使用LIKE '%Publishing' vrXNa8,L
ffh3okyW0
限制以A开头:LIKE '[A]%' 2tdr1+U?g
;5=5HYx%
限制以A开头外:LIKE '[^A]%' `wLMJ,@f.
WOf*1C
4、空值判断符例WHERE age IS NULL ](^BQc
iR4!X()
5、逻辑运算符:优先级为NOT、AND、OR FdmoR;
)>WSuf
j
(四)查询结果排序 K$~Ja
=%d0MZD
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: W
sDFui
YXTd^M~@D
ORDER BY {column_name [ASC|DESC]} [,…n] W$u/tRF
3?yq*uE}
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 6s&%~6J,
{i:Ayhq~&
序。 |?<r
|dk9/xdX
例如: = k>ygD_
_6MNEoy?
SELECT * i>AKXJ+
\oAxmvt
FROM usertable Ec|5'Kz]
r`d.Wy Zj
ORDER BY age desc,userid ASC 8,&QY%8pX
Z~ {[YsG
另外,可以根据表达式进行排序。 qvN 5[rb
F$H^W@<w
j*@EJ"Gm>
/Wm3qlv
二、联合查询 -'::$
{
)Xd2qbi
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 H iDL:14
YBY!!qjPx
合查询。UNION的语法格式为: v/}hy$7
C-L[" O0[
select_statement F7qQrE5bl
kG]FB.@bG
UNION [ALL] selectstatement o`ijdg!5qG
G:?l;+P1
[UNION [ALL] selectstatement][…n] V?+Y[Q
Z)H9D(Za
其中selectstatement为待联合的SELECT查询语句。 Mj- B;r
tvvRHvL
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 1N\-Ku
9N{"ob
Z
行。 &io*pmUm6
-S*MQA4
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 >PK\bLEo
uOnyU+fZV
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 +#0,2wR#
ttC+`0+H
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 ~:lN("9OI
mRC6m
K>
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 \j3XT}
7Ys\=W1
型,系统将低精度的数据类型转换为高精度的数据类型。 eXZH#K7S#
A;#GU`
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: \l9S5%L9
CGN:=D<
查询1 UNION (查询2 UNION 查询3) Dh{sVRA
b0"R |d[i
?*)wQZt;
LzJNQd'
!)TO2?,^
,mW-O!$3W
三、连接查询 8t
Ef>
F
B7.b
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 &nEQ