一、简单查询 Z~-T0Ab-
e)ZyTuj
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 U5@TaGbx
} K+Q9<~u
表或视图、以及搜索条件等。 [9YlLL@
E :'
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 Q G=-LXv:@
,q'gG`M
N
SELECT nickname,email eMpEFY
!}Woo$#ND
FROM testtable Se;?j-
e"v[)b++Y
WHERE name='张三'
Rsa\V6N>
*_"c!eW
(一)选择列表 ulz\x2[Pf
clR?< LO
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 Y*5@|Q
_!$Up
量和全局变量)等构成。 Z;"4$@|qE
KL:6P-3
1、选择所有列 ^J#*n;OQ3A
#(26t _a
例如,下面语句显示testtable表中所有列的数据: ?hry=I(7r
C>k;Mvq O
SELECT * tLoD"/z
:#Ex3H7
FROM testtable Im' :sJ31
Z CQt1;
2、选择部分列并指定它们的显示次序 J^F(]
>H=Q$gI
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 %1 VNP(E
5 vu_D^Q
例如: [#P`_hx
=?`y(k4a
SELECT nickname,email cc2 oFn
H>X\C;X[
FROM testtable Jegx[*O>b
w ;s ]n
3、更改列标题 +qSr=Y:+
#0YzPMV
在选择列表中,可重新指定列标题。定义格式为: QU,TAO
&)"7am(S`
列标题=列名 t7*H8
Hq"<vp
列名 列标题 KHc/x8^9
"[".3V
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 }G,SqpcG
~\@<8@N2a6
标题: :}3qZX
^*?B)D =,
SELECT 昵称=nickname,电子邮件=email wE8a4.
/F8\%l+
FROM testtable 3<UDVt@0
\$~oH3m&
4、删除重复行 D?*sdm9r`
wTMHoU*>
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 G|6 |;
eB/hyC1
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 W_f"Gk
#iqhm,u7D
5、限制返回的行数 yOn2}Z
ad3z]dUZ9
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 q$u\
q.
beHCEwh
表示一百分数,指定返回的行数等于总行数的百分之几。 2
Zjb/
,T21z}r
例如: n%MYX'0
!EmR (x
SELECT TOP 2 * \dxW44sM
]RrP !|^
FROM testtable _G}CD|Kx
}r<@o3t
SELECT TOP 20 PERCENT * \Q?|gfJH
{GH`V}Ob
FROM testtable 7L~ zI>2
h7W%}6Cqkw
(二)FROM子句 i37a}.;
]stLC; nI
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, g`5`KU|
A*26'
它们之间用逗号分隔。 +VpE-X=T
)r6SGlE[Y
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 {, *Y
4k&O-70y4^
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应
VjB`~
D'sboOY
使用下面语句格式加以限定: Cp~3Jm3
B 1ZHV^
SELECT username,citytable.cityid 4M<JfD
m|cWX"#g
FROM usertable,citytable neY=:9
PHiX:0zT
WHERE usertable.cityid=citytable.cityid LG@c)H74
L};;o+5uJD
在FROM子句中可用以下两种格式为表或视图指定别名: ,w/mk$v
nXeK,C
表名 as 别名 l^eNZ3:H
<11Tqb
表名 别名 J&U0y
a_iQlsU
例如上面语句可用表的别名格式表示为: xP/1@6]_Je
|`t!aG8
SELECT username,b.cityid C7 &
6rUX
pv?17(w(\
FROM usertable a,citytable b \|>`z,;
a^}P_hg}-
WHERE a.cityid=b.cityid J0*]6oD!
A*;^F]~'
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 :mtw}H 'F8
]gZ8b-
2O
例如: d
@kLLDP
WoWM
SELECT a.au_fname+a.au_lname T#_n-b>
DGfQo5#
FROM authors a,titleauthor ta 6RT0\^X*:
>\oJ&gdc
(SELECT title_id,title {7~ $$AR(
IweK!,:>dN
FROM titles $Ex 9
]pP2c[;
WHERE ytd_sales>10000 16> >4U:Y
674oL,
) AS t -S3+
h$Y8
a4CNPf<$
WHERE a.au_id=ta.au_id tDLk ZCP
Dx# @D#
AND ta.title_id=t.title_id *=0r>]
QKaj4?p$|S
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 ut5!2t$c
6ewOZ,"j"4
(三)使用WHERE子句设置查询条件 v0MOX>`s
%FI6\|`M
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: 1 l*(8!_
6p6Tse]
SELECT * P$qkb|D,
F)iGD~
FROM usertable
nIDsCu=A
_NqT8C4C
WHERE age>20 *_K-T#
F#bo4'&>@
WHERE子句可包括各种条件运算符: 68GGS`&
;pyJ O_R[
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< "oXAIfU#T
ST8/
;S#c
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… `"b7y(M
]j$p _s>
NOT BETWEEN…AND… "PScM9) \
<^'+]?
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) jhbH6=f4]^
{2clOUi
NOT IN (项1,项2……) dQ|Ht[s=
@N_H]6z4
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE yz$1qEII`q
HN~4-6[q
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL Aag)c~D
ee0>B86tE
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR 'U{:
zBh
z*~PYAt
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 m"7 R
4O
Y6%OV?}v!
2、列表运算符例:country IN ('Germany','China') Yg,lJ!q
n@,eZ!
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 s]8J+8
<uO
nzJi)A./
varchar、text、ntext、datetime和smalldatetime等类型查询。 `0XbV A
KdMA58)
可使用以下通配字符: (Dh;=xG
S!!\!w>N
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 2/4x]i
H*
.'mC3E+$
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 F20-!b
.-~%w
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 $#JVI:
*]{I\rX
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 78J.~v/
<\>ak7m
例如: RYJc>
SVWSO
限制以Publishing结尾,使用LIKE '%Publishing' L=wFo^N
G/3lX^Z>
限制以A开头:LIKE '[A]%' =}GyI_br;8
H1qw1[%0y
限制以A开头外:LIKE '[^A]%' {ZEXlNPww
Dlf=N$BL7d
4、空值判断符例WHERE age IS NULL 5
^J8<s@_
ZV4'
|q
5、逻辑运算符:优先级为NOT、AND、OR 2OlC7X{
{!Z_&i5
(四)查询结果排序 K}3"K C
t}+c/ C%b=
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: !,!tNs1 K
by<@Zwtf
ORDER BY {column_name [ASC|DESC]} [,…n] .LcE^y[V
'<D}5u72
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 78~V/L;@S2
'p+QFT>Ca
序。 ;p!hd}C
9QZ wUQ
例如: J7^T!7V.
WzbN=&
C]h
SELECT * '?GZ"C2
@5V Z
FROM usertable =d.W'q|
A2_3zrE
ORDER BY age desc,userid ASC %_O>Hy|p
pdqa)>$
另外,可以根据表达式进行排序。 .V:<