一、简单查询 WRbj01v
$y &E(J
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 '~<m~UXvD#
W]1)zO
表或视图、以及搜索条件等。 X1|njJGO1
DB|Y
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 m+R[#GE8#
|Nn)m
SELECT nickname,email K~{$oD7!
)h4f\0
FROM testtable M61xPq8y5
^7U
G$A
WHERE name='张三' _\G"9,)u'
)3}9K
^jS
(一)选择列表 YMcD|Kb p
Nq[uoaT
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 , , OW
u@UMP@"#
量和全局变量)等构成。 ?
7n`A >T
xp)sBM7A
1、选择所有列 jyUjlYAAv`
@[<><uTH
例如,下面语句显示testtable表中所有列的数据: `l
^9/_g'6
jh%Eq+#S
SELECT * z6=Z\P+
.m,_N@,
FROM testtable O7m(o:t x3
<4si/=
2、选择部分列并指定它们的显示次序 %KhI>O<
v5#jZ$<F
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 x7&B$.>3
H9`)BbR
例如: EzM
?Nft
ZF9z~9
SELECT nickname,email Z,
Yb&b
rNWw?_H-H(
FROM testtable pYZmz
DFB@O|JL
3、更改列标题 '4+
ur`
@sW24J1q+
在选择列表中,可重新指定列标题。定义格式为: @]%IK(|
.\ULbN3Z
列标题=列名 kX7C3qdmt
%+W{iu[|
列名 列标题 UT~4x|b:O
JxdDC^> 0
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 {tuYs:
_ @NL;w:!
标题: dk#k bG;
a
od-3"7[
SELECT 昵称=nickname,电子邮件=email 6
6EV$*dRL
u"cV%(#
FROM testtable C\Wmq
[
EPI4!3]
4、删除重复行 *SbMqASv4G
,GbR!j@6
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 `!;_ho
]b:Lo
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 }3WxZv]I}
Xne1gms
5、限制返回的行数 6[AL|d
DK
[AJJSd/:
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 4Ftu
]7c=PC
表示一百分数,指定返回的行数等于总行数的百分之几。 -M#Wt`6A
~6md !o%i
例如: &_8947
Pr
C{'XDlU
SELECT TOP 2 * v4 E}D
7tCw*t$
FROM testtable vtJJ#8a]
%
|L=l{g
SELECT TOP 20 PERCENT * %E;'ln4h&,
#~=RyH
FROM testtable S$-7SEkO+
E' uZA
(二)FROM子句 sV*H`N')S
#,'kXj
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, )D%~`,#pQ
[()koU#w.
它们之间用逗号分隔。 u:
;-Aa|aT!
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 j B{8u&kz)
tfWS)y7
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 + LJ73
!
ZWm6eD
使用下面语句格式加以限定: ]hV*r@d
4Wp=y
SELECT username,citytable.cityid G^@5H/)
1k^oS$UT
FROM usertable,citytable "$vRMpW:
b\,+f n
WHERE usertable.cityid=citytable.cityid )Q JUUn#
]eV8b*d6
在FROM子句中可用以下两种格式为表或视图指定别名: ?gXp*>Kg[
N6TH}~62}
表名 as 别名 2B`JGFcdcB
iU:cW=W|M\
表名 别名 $<OD31T
b~cZS[S
例如上面语句可用表的别名格式表示为: o}{5iTg=
1B\WA8
SELECT username,b.cityid u$`a7Lp,n
/zox$p$?h
FROM usertable a,citytable b 5`_SN74o
-I%5$`z
WHERE a.cityid=b.cityid J9 I:Q<;
u]G\H!WkQ
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 *OQ2ucC8j
'0,^6'VWOV
例如: O&hTNIfi
onV>.7sG
SELECT a.au_fname+a.au_lname Y|/ 8up
fd9k?,zM
FROM authors a,titleauthor ta ;O#>Y
oD@7
SF
(SELECT title_id,title IUct
yF/j Fn
FROM titles -%4,@
x`
a09<!0Rp
WHERE ytd_sales>10000 V^~:F
L2i_X@/
) AS t R=2FNP
B7E:{9l~s{
WHERE a.au_id=ta.au_id wc^tgE
T;a}#56{^
AND ta.title_id=t.title_id XnMvKPerv'
.2Elr(&*h
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 [uN?
~lp\%
ZdWm:(nkU
(三)使用WHERE子句设置查询条件 w4{<n/"
a:OQGhc=
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: }?_?V&K|
By",rD- r
SELECT * K+K#+RBK
k1Y ?
FROM usertable #:U%mHT(_
bSi%2Onj
WHERE age>20 ' ;FnIZ
'9Xu
p
WHERE子句可包括各种条件运算符: tOd&!HYL
~#[yJNYQ
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< jTtu0Q|
b;W3j
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… Ru!iR#s)!
g-</ua(j
NOT BETWEEN…AND… 5o'FS{6U
o!Ieb
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) Sc1 8dC0
{
Vf XsI
NOT IN (项1,项2……) bL+_j}{:N
FF(#]vz '
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE 0oZ=
yh
)D5"ap]fX
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL SpLzm A
=9boya,>
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR .B]MpmpK
2Aazy'/
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 c"n\cNP<
+\c5]`
2、列表运算符例:country IN ('Germany','China') r6MMCJ|G
7{)G_?Q&
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 .
y-D16V
rb2S7k0{
varchar、text、ntext、datetime和smalldatetime等类型查询。 UXc-k
6xe*E[#k\
可使用以下通配字符: dGYn4i2k?
.9 on@S
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 X<`
0neoE
E
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 |mdVdD~go
HZzD VCU
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 xd q?/^E
DnMwUykF>0
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 fo*2:?K&
\=?a/
例如: @Q
]=\N:
c)TPM/>(p
限制以Publishing结尾,使用LIKE '%Publishing' ^pAAzr"hv
KQaxvU)L
限制以A开头:LIKE '[A]%' |"X*@s\'
]_mb7X>
限制以A开头外:LIKE '[^A]%' W7R<