一、简单查询 ny}_^3
}t*:EgfI
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 +GEdVB
X#o<))
表或视图、以及搜索条件等。 ?
=I']$MH
=9;b|Y"aQ
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 ~t<uX "K
Fh4Exl@6
SELECT nickname,email `Y3\R#
O4cBn{Dq9
FROM testtable &ZL4/e
G2&,R{L6w
WHERE name='张三' :W#?U yo
D
`av9I
(一)选择列表 {s0!hp
a1shP};pK
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 b%].D(qBy
7ufTmz#j<
量和全局变量)等构成。 `SA1V),~
3X#Cep20a
1、选择所有列 >FS}{O2c
E.,
例如,下面语句显示testtable表中所有列的数据: BP@V:z
0jt@|3
SELECT * uNca@xl'
6OR) 97
FROM testtable kZ= 2#.
RG 9iTA'
2、选择部分列并指定它们的显示次序
i (`Q{l
IEe;ygL#
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 'vV+Wu#[
'Hsd7Dpi}
例如: n5y0$S/D
'$[a-)4
SELECT nickname,email n72kJ3u.
-EE}HUP)
FROM testtable P('bnDU
h0C>z2iH
3、更改列标题 d .Q<!Au3
_zkTx7H
在选择列表中,可重新指定列标题。定义格式为: *xN?5u%
8Vy/n^3)
列标题=列名 m95]
z18T'
J&bMox
列名 列标题 F_&H*kL L3
f?TS#jG4}
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 })j N
8px
@ V_i%=go
标题: +UiJWO
8\G"I
SELECT 昵称=nickname,电子邮件=email 2J (nJT"
8Y_lQfJa
FROM testtable }@~+%_;
j
Y(|z*|
4、删除重复行 ]MC5 uKn
[#fz[U
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 zYM0?O8pJ~
-XnOj2
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 $RYOj{1
R[rOzoNp0
5、限制返回的行数 wRZS+^hx
'wWuR@e#&
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 g9Ty%|Q7(
c<sq0('`
表示一百分数,指定返回的行数等于总行数的百分之几。 xEv?2n@A
`NNP}O2
例如: 4ves|pLET
1@9M[_<n5
SELECT TOP 2 * X`fm5y
Ya-GDB;L
FROM testtable Ap 3B'
D~M*]&
SELECT TOP 20 PERCENT * ^>^h|$
0U !&|i\
FROM testtable +|H,N7a<
GiKhdy
(二)FROM子句 ""m/?TZq'
~%h&ELSw
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, J ~KygQ3%
!%B-y9\
它们之间用逗号分隔。 oi8M6l
U;*O7K=P
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 ce*?crOV
s#(7D3Pr#
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 L* ScSxw
cH5RpeP
使用下面语句格式加以限定: $j\jT
8"A0@fNz
SELECT username,citytable.cityid +11 oVW
KUC%Da3
FROM usertable,citytable ..w$p-1
?A04qk
WHERE usertable.cityid=citytable.cityid qE8Di\?
$ab{GxmX'4
在FROM子句中可用以下两种格式为表或视图指定别名: SjIDzNI5
z2Z}mktP
表名 as 别名 .EvP%A
m
FEX67A8/;
表名 别名 )|#ExyRO
cQsSJBZ[v5
例如上面语句可用表的别名格式表示为: ]:m4~0^#-(
MP.ye|i4Q
SELECT username,b.cityid Kjpsz] ;
lTVz'ys
FROM usertable a,citytable b D_G]WW8
F~~9/#
WHERE a.cityid=b.cityid F%4N/e'L
#B
q|^:nj
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 G&`5o*).bb
C
=B a|Z
例如: d,Oe3?][0p
=h|7bYLy
SELECT a.au_fname+a.au_lname LR'~:46#u
B*P;*re
FROM authors a,titleauthor ta #WGyQu
C%j@s|
(SELECT title_id,title ad52a3deR
OL^DuoB4q
FROM titles c8HETs1
ywB0
D`s'
WHERE ytd_sales>10000 h 0)oQrY
NRk^Z)
) AS t O;T)u4Q&3
%eGD1.R
WHERE a.au_id=ta.au_id M'oQ<,yW-
Xn5LrLM&
AND ta.title_id=t.title_id c{39,oF
]7RK/Zu i
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 nA%8
bZ+
xK4E+^ b
(三)使用WHERE子句设置查询条件 |CK/-UG}
k^K%."INn
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: uKB V`I
:qV|rih_Q
SELECT * >SS^qjh/
A0Q1"b=
FROM usertable J7~Kjl
=$ubSfx
WHERE age>20 tf1Y5P$
Mko,((>I1
WHERE子句可包括各种条件运算符: }uO2x@
4{b/Nv:b
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< v+dT7*^@
ha9 dz
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… (C%qA<6
QkLcs6)R
NOT BETWEEN…AND… NH1ak(zHW
y5Fgf3P@ju
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) LmUR@
/VQ
.Np!Qp1*
NOT IN (项1,项2……) 4 XGEw9`3
AboRuHQ
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE fSGaUBiq}
Fl"LK:)
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL #vViEBVeN
gEq6[G
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR a t=;}}X
e`)zR'As
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 52F3r:Rk
B74]hgK
2、列表运算符例:country IN ('Germany','China') Hl8\*#;C&>
kq(]7jU$[
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 B0gs<E
$cLZ,N24
varchar、text、ntext、datetime和smalldatetime等类型查询。 6^FUuj.
Lo"s12fr
可使用以下通配字符: .e}`n)z
(: mF+%(
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 JqEo~]E]
`[x'EJp#
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 2#'"<n,G
y@Td]6|f
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 6']WOM#
n.o_._mu2
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 9$%S<v
cO-^#di
例如: 0_t9;;y :
aDE}'d1qo
限制以Publishing结尾,使用LIKE '%Publishing' HLh]*tQG
wqyF"^It"
限制以A开头:LIKE '[A]%' s##XC^;p[
KnK\X>:
限制以A开头外:LIKE '[^A]%' v,US4C|^3i
g=Nde2d?
4、空值判断符例WHERE age IS NULL ;3Q3!+%j
P+ 0-h
5、逻辑运算符:优先级为NOT、AND、OR cQ0+kX<
Tcq@Q$H
(四)查询结果排序 SWNT}{x]
_G%kEt_4
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: jLEO-<)-)
c2d1'l]n
ORDER BY {column_name [ASC|DESC]} [,…n] nNRc@9Lt
)xTu|V
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 5L\Im^
@X_)%Y-^O
序。 e^hI[LbNC
I3Ad+]v
例如: Nm3CeU
\r&(l1R
SELECT * 'tVe#oI
Wa%p+(\<uB
FROM usertable X C'|
<h`}I3Ao
ORDER BY age desc,userid ASC i\RB KF
Ul:M=8nE%
另外,可以根据表达式进行排序。 &VVvZ@X;
[kI[qByf
quFNPdP
q]y{
4"=5
二、联合查询 :/;;|lGw
MhN8'y(
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 ?6:e%YT
jf&
oN]sZ
合查询。UNION的语法格式为: Ystd[
hTQ]xN)
select_statement e ,A9N%M
@%6"xnb`
UNION [ALL] selectstatement u/5)Yx+5_
DF"*[]^[
[UNION [ALL] selectstatement][…n] So#>x5dL
z>spRl,dr
其中selectstatement为待联合的SELECT查询语句。 >W'"xK|:
.L_ Hk
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 $XFFNE`%
p{w;y6e
行。 ,){WK|_
&GI'-i
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 RP6hw|
w.Go]dpK
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 bWMb@zm
4& 9V
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 EL9JM}%0v
r#^uY:T%
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 gE6{R+sp
B)Dsen
型,系统将低精度的数据类型转换为高精度的数据类型。 (KT+7j0^
=5g|7grQ:`
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: tU>4?`)E
{z8wFL\
查询1 UNION (查询2 UNION 查询3) ]?hlpL
!]P=v`B.
='HLA-uT
* YTv"
Qy) -gax:,
:tLMh08h
三、连接查询 7:OF>**
}9L;|ul6
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 jft@ 'W53
Q7?[@2HN
数据库管理系统的一个标志。 BNbz{tbX"
2O0<