一、简单查询 E"5
zT1d
&^e%gU8!\
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 3jPua)=p
OaU-4
~n;
表或视图、以及搜索条件等。 >TUs~
<A&mc,kj
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 I_@\O!<y}
<}-[9fW
SELECT nickname,email ~vnG^y>%
h)BRSs?v_D
FROM testtable _ngyai1
N+x0"~T}I
WHERE name='张三' yfeX=h
9^h\vR|]S
(一)选择列表 ~H/|J^ J
Z^,C><Yt
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 ^'i(@{{o\
tLe!_p)
量和全局变量)等构成。 `O(ec
ZzLmsTtzIu
1、选择所有列 -}0S%|#m
!s#25}9zX5
例如,下面语句显示testtable表中所有列的数据: d_=@1JM>
cVJ"^wgBt
SELECT * <jF]SN
%o9@[o
.]
FROM testtable xc[@lr
:#58m0YLA:
2、选择部分列并指定它们的显示次序 8
$0 D-z
`,d*>
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 xy$73K6
gO%#'Eb2
例如: ,<F =\G_f
$,q~ q^0
SELECT nickname,email 9{|JmgO!
BJ!b LQ
FROM testtable J]/TxUE
S-{[3$
3、更改列标题 `rsPIOu
>f #P(
在选择列表中,可重新指定列标题。定义格式为: mZ
39 s
*LpEH,J
列标题=列名 r=P)iE:
CI"7* z_
列名 列标题 =; Gw=m(
Ig75bZz
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 \Km!#:
sS;6QkI"y
标题: `<!Nk^2ap
zY~
SELECT 昵称=nickname,电子邮件=email t-Rfy`I3
|niYN7 17
FROM testtable OJiW@Z_\
k`JP
4、删除重复行 k8H@0p
H"czF
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 w>Iw&US
i'9aQi"G
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 D ]Q,~Y&'
51j5AbFQ"
5、限制返回的行数 q/U(j&8W{
HA&7
ybl
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 +\g/KbV7
rx2?y3pv
表示一百分数,指定返回的行数等于总行数的百分之几。 #\s*>Z
Klfg:q:j+b
例如: c'cK+32
0$)s? \
SELECT TOP 2 * |/<,71Ae
"1O!Ck_n
FROM testtable zQ3m@x
!>QS746S@
SELECT TOP 20 PERCENT * S:)Aj6>6
>qj.!npQD
FROM testtable !v/5G_pr
uQh dg4
(二)FROM子句 e??tp]PLn
fy+fJ )4sj
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, <T]%Gg8
Xi$( U8J_
它们之间用逗号分隔。 e RY2.!
$ N`V%<W
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 |dIP &9
rEz-\jLD~
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 y/=:F=H@w
PdiP5S }/
使用下面语句格式加以限定: Ku;|Dz/=o
+B(x:hzY9
SELECT username,citytable.cityid "Tw4'AY'P
aAM!;3j]B`
FROM usertable,citytable \H(r }D$u<
1ocd$)B|}
WHERE usertable.cityid=citytable.cityid _Z~cJIEU
)Z6bMAb0'N
在FROM子句中可用以下两种格式为表或视图指定别名: |OW/-&)
<Z{pjJ/
表名 as 别名 m$N`Xj
k3[rO}>s
表名 别名 u#(&
R"6
kk|7{83O
例如上面语句可用表的别名格式表示为: OAigq6[,
b#ga
SELECT username,b.cityid ]vj.s/F~
n(X {|?
FROM usertable a,citytable b =^liong0
W,sU5sjA
WHERE a.cityid=b.cityid s
P=$>@3
2n]UNC
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 nc<wDE6
w+A:]SU
例如: 7D'-^#S5
[3$L}m
SELECT a.au_fname+a.au_lname {
'A`ram
;8F|Q<`pV
FROM authors a,titleauthor ta .o27uB.
j{U#g8
(SELECT title_id,title :,<G6"i
AZj`o
FROM titles J|O=w(
MD"a%H#p
WHERE ytd_sales>10000 3`Ug]<m
gs xT
) AS t }\iH ~T6
D.!ay>o0#
WHERE a.au_id=ta.au_id s8r|48I#;
4R c_C0O
AND ta.title_id=t.title_id ?g~w6|U(r
RJYB=y8l
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 Hm>7|!
o@6hlLr
(三)使用WHERE子句设置查询条件 Mk3~%`
k;7R3O@
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: ;0Vyim)S]
~BUzyc%
SELECT * /k$H"'`j4
3d1$w
FROM usertable )=k8W9i8b
)335X wA+
WHERE age>20 #Epx'$9
~ z< &vQ=
WHERE子句可包括各种条件运算符: p{V_}:|=Q
eU*0;#
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< "X[sW%# F
!1X^lFf;~
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… ,mHQ
x5X;^.1Fr
NOT BETWEEN…AND…
Y ,
_EusY3q
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) FFG/v`NM
[|vE*&:uO
NOT IN (项1,项2……) `U.VfQR:
]Qu.-F#g
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE >u-6,[(5X*
7\T~KYb?
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL Uo~-^w}
yF _@^V
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR ZCcKY6b
+Cf
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 qH8d3?1XO
Ir,3' G
2、列表运算符例:country IN ('Germany','China') TV['"'D&i
cu@i;Hb@
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 4/Mi-ls_
IAlX^6s*
varchar、text、ntext、datetime和smalldatetime等类型查询。 1KI,/ H"SY
~{xm(p
可使用以下通配字符: Dp8`O4YC
O'WBO"
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 y8!#G-d5
lQq&tz,
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 Eq\PSa=gz
.boBo$f
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 6^Q/D7U;s
rgK:ujzW!
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 `"-ln'nw
oPbxe
例如: [bK5q;#U4
hi.`O+;
限制以Publishing结尾,使用LIKE '%Publishing' fDzG5}i
^W*T~V*8
限制以A开头:LIKE '[A]%' !EuqJjh
8NUVHcB6
限制以A开头外:LIKE '[^A]%' d41DcgG'j(
m4r!Ck|
4、空值判断符例WHERE age IS NULL qb[UA5S\`
: g+5cs
5、逻辑运算符:优先级为NOT、AND、OR sN_c4"\q
bzC|aUGM
(四)查询结果排序 'LyEdlC]
tx9;8K3
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: X9S`#N
2d:5~fEJp
ORDER BY {column_name [ASC|DESC]} [,…n] cU[^[;4J<
X%sMna)
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 6!;eJYj,
*URBx"5XZ
序。 `p'(:W3a
tW8&:L,m
例如: lR8Lfa*/7
jI;iTKjB(
SELECT * Z+%w|Sx
dln1JZ!
FROM usertable h8)m2KrZ!.
GI
;
ORDER BY age desc,userid ASC xis],.N
AY
B~{
另外,可以根据表达式进行排序。 /E32^o|,>
*%#Sa~iPo
zF([{5r[!)
o]jPG
二、联合查询 Ob~7r*q
>%?kp[
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 \8}!aTC
\Aa{]t
合查询。UNION的语法格式为: .m^L,;+2
3&