一、简单查询 u@{z
xYn
3rUuRsXn
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 Hy9c<X[F9
4^jIV!V
表或视图、以及搜索条件等。 gpe/ dfyJ9
L2jjkyX]
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 )yj:P
fGz++;b<S
SELECT nickname,email :9O"?FE
`/4R$E{
FROM testtable DA(ur'D
dYn<L/#
WHERE name='张三' TJhzyJ"t
xaSg'8-
(一)选择列表 .Z0$KQ'iy
a*g7uaoP
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 T0Kjnzs
naHQeX;
量和全局变量)等构成。 gl$ Ks+od
_>LI[yf{
1、选择所有列 V(5=-8k
]w+n39da
例如,下面语句显示testtable表中所有列的数据: G)S(a4
ayR;|S
SELECT * !=f$
[1
ylo/]pVs
FROM testtable @7fx0I'n
Bw`7ND}&
2、选择部分列并指定它们的显示次序 W7
.Y`u[
\H-,^[G3
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 q"uP%TN
RY4b<i3
例如: &W|r
P(
6iZ:0y0t+6
SELECT nickname,email 5x}XiMM
))<1"7D^^
FROM testtable kYl')L6
NF0=t}e
3、更改列标题 7F;dLd'
~*-%tFSv
在选择列表中,可重新指定列标题。定义格式为: VGPBD-6)
{$ (X,E
列标题=列名 Ug1[pONk
-{=c T?"+
列名 列标题 e+? -#
WbP
wO
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 .R<Ke\y/
R'Y=-
yF
标题: 2GB+st,
Vo; B#lK
SELECT 昵称=nickname,电子邮件=email 5Y W.s
YO3$I!(
FROM testtable P\3$Y-id
9_07?`Jr
4、删除重复行 CB1AL]|3
L(
B(x>w
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 (oiF05n
h
i=ztWKwKf
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 Jm5&6=
l|Z<pD
5、限制返回的行数 @=0O'XM
&M5_G$5n
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 eKT'd#o2R
-j<g}IG
表示一百分数,指定返回的行数等于总行数的百分之几。 }p <p(
+I9+L6>UR
例如: )HFl 0[vT
.0eHP
SELECT TOP 2 * zq?Iwyo
;Bs^+R7
FROM testtable 3H'+7[~qH
5YQq*$|'+
SELECT TOP 20 PERCENT * 9tt0_*UX
HJh9<I
FROM testtable Y>N`(
/P8`)?f~y
(二)FROM子句 DOzJ-uww1
#G/
_FRo`
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, k\~A\UIYo
EXrOP]Kl
它们之间用逗号分隔。 AVx 0aj
yVP 1=pz_[
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 -H;%1y$A-
CK{.Ic^
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 -nvK*rn>}
G|"`kAa
使用下面语句格式加以限定: hny):59f
lZq`,E_L
SELECT username,citytable.cityid >h+G$&8[y
02EbmP
FROM usertable,citytable - A\J:2a|
u\]aUP
e
WHERE usertable.cityid=citytable.cityid )t/[z3rn
BUozpqN}
在FROM子句中可用以下两种格式为表或视图指定别名: YnCWmlC
DW,fh8 w
表名 as 别名 z3lMD'uU3
.-0;:>
表名 别名 wU|Y`wJmF
,iUYsY
例如上面语句可用表的别名格式表示为: }: W6Bo-|
Fs bX{
SELECT username,b.cityid NyJ=^=F#
@$ea-fK??
FROM usertable a,citytable b ~
3HI;
z
[qO5z~I
WHERE a.cityid=b.cityid XP$ 1CWI
-i}@o1o\
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 b,7@)sZ*
9=-!~_'1-
例如: u}[Z=V
zg3q\~
SELECT a.au_fname+a.au_lname KLc<c1BZ
P]pVYX#m
FROM authors a,titleauthor ta r|bvpZV
n,Z B-"dW
(SELECT title_id,title 4eOQP
k?Bc^7l:
FROM titles Dyx3N5?C
ON$^_l/c
WHERE ytd_sales>10000 &f\ng{
Q\>Kd
N{
) AS t |VC/(A
mh4NZ @;
WHERE a.au_id=ta.au_id bB^SD] }C
*d,u)l :S
AND ta.title_id=t.title_id XOM@Pi#z
n{~Ws^d
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 Y^? J3[@
}tIIA"dZ
(三)使用WHERE子句设置查询条件 @jE<V=?
RyGce'
q
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: ya9V+/i7T_
|!\(eLR9>
SELECT * <*Kj7o{Qn
wec|~Rc-
FROM usertable 8bB'[gJ]{
J%
B(4`
WHERE age>20 7[l
"=
T/V 5pYl
WHERE子句可包括各种条件运算符: kpkN GQ2
mn=G6h
T}W
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< (+Yerc.NQt
Jmln*,Ol7
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… h5bQ
/^E2BRI
NOT BETWEEN…AND… \pzqUTk
CapWn~*g
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) W*hRYgaX3
c%uX+\-$
NOT IN (项1,项2……) `]^JOw5o
N'fE^jqU
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE Os?`!1-
r lalr+Rf
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL 3B(6^iS
\advFKN
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR +fd^$Qd%K
RNyw`>
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 N1RZ
;[-dth
2、列表运算符例:country IN ('Germany','China') 9:bC{n
5PPV`7Xm9
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 @l0#C5(:
-Fodqq@,
varchar、text、ntext、datetime和smalldatetime等类型查询。 _u^ S[
)g9&fGYf
可使用以下通配字符: i;1aobG
R1YRqk
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 \e5bxc
Ly?gpOqu5
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 i/nA(%_
AepAlnI@
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 9S0I<<m
r* K[,
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 lPh>8:qFM
qV$\.T>x
例如: v1yNVs\}
IYq)p
/
限制以Publishing结尾,使用LIKE '%Publishing' 'IweN
:XK.A
限制以A开头:LIKE '[A]%' nf5Ld"|%9
V`V
Z[
限制以A开头外:LIKE '[^A]%' k0{5)Su"xr
"-Lbz)k
4、空值判断符例WHERE age IS NULL W9~vBU
Y" &