一、简单查询 vKX6@eg"
Xs,[Z2_iq
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 3Ryae/Nk
S,I|8
YE
表或视图、以及搜索条件等。 w+^z{3>
8-f2$
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 M1>2Q[h7
Mg7nv\6
SELECT nickname,email d9@Pze">e
=_\+6\_
FROM testtable {pzu1*
rM|] }M=_V
WHERE name='张三' N:4oVi@Je
,McwPHEMB
(一)选择列表 .}xF2'~E/
3#d?
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 XIS.0]~
+{eZ@
量和全局变量)等构成。 l(o;O.dLt
I;=HXL
1、选择所有列 gwm}19JC
e9F\U
例如,下面语句显示testtable表中所有列的数据: -GqMis}c
:o2^?k8k
SELECT * @c>a
2D?V0>/
FROM testtable o%~PWA*Qp
1vy*u
2、选择部分列并指定它们的显示次序 Q')0 T>F-
|=\w b^l+
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 #]g9O ?0$
Boi?Bt
例如: =Wgz\uGJ
\!]Zq#*kH
SELECT nickname,email AV t(e6H
Za5bx,^
FROM testtable `1 tD&te0
=7*k>]o
3、更改列标题 !BQ:R(w
u lqh}Uv'
在选择列表中,可重新指定列标题。定义格式为: Msk^H7
{I]X-+D|_
列标题=列名 hYj!*P)uV
PX5K-|R
列名 列标题 n)~9
8/tvS8I#y
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 EYLqg`2A
\nX5$[
标题: >f !
Z*M]AvO+#
SELECT 昵称=nickname,电子邮件=email 1=9M@r~ ^
nc0!ag
FROM testtable gGtl*9a=
@Yl&Jg2l'
4、删除重复行 t+2!"Jr
Z^fkv
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 9q4%s?)j
Z2%ySO
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 )S,Rx
j9bn|p$DA
5、限制返回的行数 YhZmyYamE
IpRdGT02
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 Z0(}doh
C5W}
o:jE
表示一百分数,指定返回的行数等于总行数的百分之几。 $;1TP|
d/m.VnW
例如: G(;C~kHX
'5*8'.4Sy
SELECT TOP 2 * 8ph*S&H
)PU_'n=>
FROM testtable 5*n3*rbU:
ly8IrgtKy
SELECT TOP 20 PERCENT * pc=f,
qZcRK9l]F1
FROM testtable 7a0kat'\
$?e_l
(二)FROM子句 k4AF
.U`I
{cW%i:
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, {]F};_
^1b/Y8&8A
它们之间用逗号分隔。 T+0Z2H
Hl3%+f
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 pI>[^7
a@ub%laL
Z
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 BwpSw\\?@
>7[o=!^:4
使用下面语句格式加以限定: :O~*}7G
B F,8[|%#
SELECT username,citytable.cityid V/8"@C
?KKu1~a_
FROM usertable,citytable '&OJ hLE
9S y |:J0
WHERE usertable.cityid=citytable.cityid /3!c
;(
J'=iEI
在FROM子句中可用以下两种格式为表或视图指定别名: 3 cb$g
W{1"
表名 as 别名 3Aqw)B'"_
X>$s>})Y
表名 别名 EJz?GM
0[O ."9
例如上面语句可用表的别名格式表示为: BKfkB[*F
qpCNvhi
SELECT username,b.cityid 3rUuRsXn
W{v{sQg
FROM usertable a,citytable b gpe/ dfyJ9
]c=nkS
WHERE a.cityid=b.cityid }=fVO<Rv
)v+R+3<
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 ?c;T4@mB
\mIm}+!H
例如: G""L1?
h,(f3Ik0O
SELECT a.au_fname+a.au_lname "~|;XoMU
,2R7AHk
FROM authors a,titleauthor ta W~QH"Sq
'PBuf:9lN
(SELECT title_id,title ayR;|S
u |EECjJn
FROM titles 8=Z]?D=
[l7 G9T}/[
WHERE ytd_sales>10000 F70_N($i
_x&fK$Y)B
) AS t 0Gr ^#`
M#?^uu'
WHERE a.au_id=ta.au_id
H({Y
)}[:.Zg,3/
AND ta.title_id=t.title_id #@v$`Df<
@'ln)RT,
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 ~dm/U7B:
S
Y7'S#
(三)使用WHERE子句设置查询条件 d${RZ}/
M#U #I:z%
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: $X;wj5oj
=ll{M{0Q]!
SELECT * O*:8gu'Y2
:-.K.Ch|:
FROM usertable jb5nL`(j$
EK
JPeeRY
WHERE age>20 )=:gO`"D
t]QGyW A]
WHERE子句可包括各种条件运算符: 5IsRIz[`TK
YcQ3:i
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< CQ(
_$
VZRM=;V
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… "92Z"I~1
-eA3o2'
NOT BETWEEN…AND… 2o\GU
=64%eF
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) `"#0\Wh
"\:ZH[j
NOT IN (项1,项2……) 1,/L&_=_A
Bv)4YU
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE 7ql&UIeQ
[HV9KAoA
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL :q+D`s
?d?
cD
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR R\+O.vX
u40k9vh
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
"?yu^
7LB#\2
2、列表运算符例:country IN ('Germany','China') G3.MS7J
@6~OQN
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 n5yPUJK2L6
)t/[z3rn
varchar、text、ntext、datetime和smalldatetime等类型查询。 5X'com?T
#f 4"
可使用以下通配字符: =h"*1`
1aAYBV<3
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 1 ^k#g,
DJF-J#
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 09RJc3XE9
:<`hsKy&
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 #Moju
)I`6XG
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
igV4nL
KL4Z||n
例如: "ct_EPr`
k($N_XlE
限制以Publishing结尾,使用LIKE '%Publishing' Ve4!MM@ti
'WUevPmt
限制以A开头:LIKE '[A]%' pGy]t
.&53WL[D|
限制以A开头外:LIKE '[^A]%' %rz.>4i)(
wec|~Rc-
4、空值判断符例WHERE age IS NULL |7jUf$Q\p
. <|7BHL
5、逻辑运算符:优先级为NOT、AND、OR C?Sy90f
!/w<F{cl
(四)查询结果排序 <tEN1i
/CtR|~w L
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: +yq Z\$ii
PZQb.QAn
ORDER BY {column_name [ASC|DESC]} [,…n] ;b[% L&
a9ab>2G?FR
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 Q<y&*o3YF|
8"a[W3b
序。 r lalr+Rf
^n|u$gIF8
例如: #^- U|~,
e+z_Rj%Y;I
SELECT * bP`.teO\
CL*i,9:NR
FROM usertable Xi'y-cV
^
!\a'GO[
ORDER BY age desc,userid ASC R4<