一、简单查询 E/:mO~1< c
8TH fFL
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 62D UF
g[%^OT#
表或视图、以及搜索条件等。 u$%;03hJ
pcC/$5FQ
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 hziPHuK9,
vvwQ/iJO4Q
SELECT nickname,email \\d!z-NOk?
>gSiH#>
FROM testtable 7mT
iO?/y<
TYH4r q
&
WHERE name='张三' ,3P@5Ef
S9mcThcZ
(一)选择列表 TRJ5m?x
"IuHSjP
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 &WV&_z
/y-eVu6
量和全局变量)等构成。 fP>~ @^
_@L{]6P%V
1、选择所有列 TO5#iiM)
CxbGL
例如,下面语句显示testtable表中所有列的数据: G}V5PEF]`
~bnyk%S
o
SELECT * VoG:3qN
WXmR{za
FROM testtable
z?M_Cz;:J
}|9!|Q
2、选择部分列并指定它们的显示次序 ?qJt4Om
LLD#)Jl{?
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 7)zF8V
xN +Oca
例如: 3[r9v!l
Ej#pM.
SELECT nickname,email |?\J,h
'i;/?'!W6
FROM testtable MY w3+B+Jj
2AdO
3、更改列标题 AA &>6JB{
W20H4!G
在选择列表中,可重新指定列标题。定义格式为: oksAQnQe
\C &V)/
列标题=列名 H-C$Jy)f"
x"83[0ib
列名 列标题 8:gUo8
=pnMV"'9
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 kdW$>Jqb
B }t529Z
标题: -
U Elu4n&
e jh0Wfl
SELECT 昵称=nickname,电子邮件=email X"EZpJ'W
IY40d^x
FROM testtable ~m6b6Aj@6
ttd
^jT
4、删除重复行 aESlbH
2kkqPBc_
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 VXP@)\!
r>_40+|&
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 "STd ;vR
cUj^aT pm
5、限制返回的行数 svRYdInBNu
C-tkYP
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 YwU[kr-i
*o}7&Hw#9f
表示一百分数,指定返回的行数等于总行数的百分之几。 r~YxtBZH+
xtFGj,N
例如: a\ZNN k
c1sVdM}|
SELECT TOP 2 * G/N 1[)
E2i'lO\P
FROM testtable :>K8oE
t->I# t7
SELECT TOP 20 PERCENT * :ZsAWe{%,J
sL4j@Lt
FROM testtable xRbtiFk9H
Csf!I@}Z
(二)FROM子句 b<27XZ@
wBI>H
7A
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, m"f3hd4D_q
3,y zRb
它们之间用逗号分隔。 tRVz4fk[G
lnQY_~s
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列
IBYSI0
1"S~#
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 P^^WViVX
{wh, "Ok_
使用下面语句格式加以限定: GQ\;f
gaWJzK
Yc_
SELECT username,citytable.cityid i)q8p
E(!b_C&
FROM usertable,citytable :6jh*,OHZl
1!W'0LPM
WHERE usertable.cityid=citytable.cityid /N7.|XI.
:YCB23368"
在FROM子句中可用以下两种格式为表或视图指定别名: 0BPUbp(
nduUuCIY.
表名 as 别名 :$Xvq-#$|
'1"vwXJ"
表名 别名 v(P5)R,
g+]o=@
例如上面语句可用表的别名格式表示为: iI Dun Ih
,FL*Z9wA
SELECT username,b.cityid 3YD.Fjz$
xQDWnpFc
FROM usertable a,citytable b gTb%c84
.~,=?aq^
WHERE a.cityid=b.cityid -T2w?|
O"~CZh,:r}
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 u$<>8aMei
ZVz`g]
例如: Eg(.L,dj
6PT"9vR`)
SELECT a.au_fname+a.au_lname I~Q
G
0y`r.)G
FROM authors a,titleauthor ta 9@>Q7AUCQ
nLY(%):(P
(SELECT title_id,title zALtG<_t
x7!gmbMfK'
FROM titles Ejj+%)n.
6,~]2H'zq
WHERE ytd_sales>10000 y' RQ_Gi
>';UF;\5]Q
) AS t 9`tSg!YOh
+1nzyD_E
WHERE a.au_id=ta.au_id W
H%EC$
e=`=7H4P
AND ta.title_id=t.title_id ^{a_:r"
zs.@=Z"
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 d}<-G.&_
(bAw>
(三)使用WHERE子句设置查询条件 {gb` %J
8'M:uI
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: RMHJI6?LB
5Z`f.}^w
SELECT * LZDJ\"a-
>%LY0(hY3
FROM usertable ^s\T<;
Y+{jG(rg.F
WHERE age>20 NUFW
SL>
_&N}.y)+t
WHERE子句可包括各种条件运算符: rV}&G!V_t
v8K`cijSS
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< .Bojb~zt
1 %8JMq\
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… 7Y5.GW\^
@H$Sv
NOT BETWEEN…AND… PR7B
Cxm
sh*/wM
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) kS4YxtvB
40G'3HOp
NOT IN (项1,项2……) zEt!Pug
W'6sY@0m
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE 1Gy
[^
B Q2N_*v
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
N@X(YlO
hdwF;
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR NueuCiP
TE6]4E*
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 -""(>$b2
Py#TXzEcC
2、列表运算符例:country IN ('Germany','China') 9Dp0Pi?29
SqZ .}s
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 &gcZ4gpH
4 %V9
varchar、text、ntext、datetime和smalldatetime等类型查询。 PMT}fg
9"zp>VR
可使用以下通配字符: $b)t`r+
iK!FVKi}
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 Va A.J
D!z'Y,.
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 5+UNLvsZ
-$$mr U
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 <H$!OPV
LtUvFe
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 W#2} EX
x[xRqC
vL
例如: aYM~Ub:x{
)iid9K<HB
限制以Publishing结尾,使用LIKE '%Publishing' /D964VR1M\
@9~x@[
限制以A开头:LIKE '[A]%' [Sj"gLj
A4(k<<xjE
限制以A开头外:LIKE '[^A]%' w
c
b,X+*hRt
4、空值判断符例WHERE age IS NULL \VWgF)_
\/b[V3<"
5、逻辑运算符:优先级为NOT、AND、OR F"1tPWn
Bg}l$?S
(四)查询结果排序 BkP4.XRI
;*0nPhBw0>
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: 2.vmZaKP
CY.4 >,
ORDER BY {column_name [ASC|DESC]} [,…n] 1Vc~Sa
N6`U)=2o>h
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 iCCe8nK
]E)\>Jb
序。 'bsHoO
CDoD9Hq,
例如: nw_s:
L4Kg%icz l
SELECT * a l9(
9)
_%Yi^^
FROM usertable Uq~b4 X$
P- +]4\
ORDER BY age desc,userid ASC xGFbh4H=8p
O3mw5<%15
另外,可以根据表达式进行排序。 T8&eaAoo
97~>gFU77#
TZGk[u^*
jFip-=T{4
二、联合查询
e<(6x[_
o1"N{Eu
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 [!MS1vc;
yz,0
S' U
合查询。UNION的语法格式为: ,SNt*t1"
3hxV`rb
select_statement , &n"#
XE&h&v=>
UNION [ALL] selectstatement 9Ofls9]U
aqWlX0+
[UNION [ALL] selectstatement][…n] Djdd|Z+*{
v??$z#1F3
其中selectstatement为待联合的SELECT查询语句。 "Q:h[) a
z`.<dNg
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 '$eJATtC
{> 8?6m-
行。 R$66F>Jz^
xR8.1T?8
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 c{ +bY.J
8vtembna4
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 ,LP^v'[V7
\Rb:t}
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 y?P`vHf
pw5{=bD
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 k2tSgJW
Od^Sr4C
型,系统将低精度的数据类型转换为高精度的数据类型。 |)C*i
Dv
L8}dz
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: X;2LK!x;y
fms(_Q:R?
查询1 UNION (查询2 UNION 查询3) cA|vH^:
yimK"4!j5A
e /1x/v'
+95v=[t#Ut
Yi)s=Q :
:YOo"3.]
三、连接查询 %K.r rn M
$4~Z]-38#A
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 IF-y/]
Jz3,vVfQ:
数据库管理系统的一个标志。 !s?SI=B8
FvYciU!
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 tK/.9qP
L &hw-.Q
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 >fth
iA
s$?LMfT
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 &CSy>7&q