一、简单查询 ~5e)h_y
%<cfjo
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 3LKL,z
A*)G. o:
表或视图、以及搜索条件等。 NEInro<
^^MVd@,i
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 We]mm3M3
WZkAlg7Z
SELECT nickname,email R{zAs?j
Q9v
OY8
FROM testtable |fYr*8rH
8Io--Ew3
WHERE name='张三' -X#Zn>#
uh`W} n
(一)选择列表
a`XXz
X.)caF^j
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 24u;'i-y5
59eq"08
量和全局变量)等构成。 $ekJs/I&
tz0_S7h
1、选择所有列 L8"0o 0-
HFV4S]U=
例如,下面语句显示testtable表中所有列的数据: |L
XYF$
@k_xA-a
SELECT * (+Ia:D
")%)e ;V3
FROM testtable t;ZA}>/
*uJcB|KX
2、选择部分列并指定它们的显示次序 5$C4Ui{<E'
# fvt:iE
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 [UqJ3@>
)m .KV5K!
例如: Y/\y"a
y%* hHnGd
SELECT nickname,email *`]LbS
3N8RZt1.b
FROM testtable EyJWi<
}Yd7<"kp
3、更改列标题 q'r(#,B<3
cuenDw=eC
在选择列表中,可重新指定列标题。定义格式为: MXy~kb&
[ 0?*J<d
列标题=列名 RRGo$
1=fP68n
列名 列标题 <5oG[1j
')ZM#
:G
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 Ja$Ple*XU8
6I,^4U
标题: ^Fmp"[q
U
Ke!zI
SELECT 昵称=nickname,电子邮件=email N7/eF9
>hg?!jMjrr
FROM testtable O3Jp:.ps
qo2/? ]
4、删除重复行 "u#T0
&p/^A[
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 9 F"2$;
F(jvdq
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
Yxe%:
p[kEFE,%
5、限制返回的行数 lPA:aHcj
$w,&h:.p
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 '`.bmiM
!3Xu#^Xxj
表示一百分数,指定返回的行数等于总行数的百分之几。 Yo`#G-]
~N2<-~=si
例如: p-p]dV
Aw]W- fx
SELECT TOP 2 * Aqi9@BH
LP_w6fjT
FROM testtable /uXEh61$8
:C%cnU;N
SELECT TOP 20 PERCENT * xMck A<E
58T<~u7
FROM testtable D;~c`G
"f
#;l~Y}7'
(二)FROM子句 >5,nB<
b:OQ/
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, _FG?zE
V/
a!&_""
它们之间用逗号分隔。 C7|zDJ_
U
_QCe+
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 %hEhZW{:
IaDN[:SX
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 =#tQhg,_
lwY2zX&%)/
使用下面语句格式加以限定: HY
(|31
a!n |/9
6
SELECT username,citytable.cityid cjTV~(i'4A
8OYw72&
FROM usertable,citytable ]yvHb)X
az5 $.
WHERE usertable.cityid=citytable.cityid ^ Tr )gik
hB]\vA7
在FROM子句中可用以下两种格式为表或视图指定别名: O@$wU9D<
}]i re2j8
表名 as 别名 FZUN*5`
y'5
y
表名 别名 @'
V=Vr
]<9KX} B
例如上面语句可用表的别名格式表示为: _trF /U<
,5tW|=0@
SELECT username,b.cityid L=Pz0
1Wz -Z
FROM usertable a,citytable b n/>^!S
s>A!Egmo
WHERE a.cityid=b.cityid "`QI2{!l
7U:-zfq
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 , [V#o-Z
( !K?^si
例如: b.Yl0Y
G4VdJ(_
SELECT a.au_fname+a.au_lname |H!kU.f]
'+@q
FROM authors a,titleauthor ta J.R|Xd
`7f><p/q
(SELECT title_id,title #
p?7{"Ep
aGl*h"&
FROM titles Sr9)i8x{
`|{6U"n
WHERE ytd_sales>10000 }D/O cp~o
t[L_n m5-
) AS t `{1&*4!
`PV+.V}
WHERE a.au_id=ta.au_id P|:*OM
p
FY+0r67]
AND ta.title_id=t.title_id {.qeVE{
X|fl_4NC>
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 q}p&<k
|N/Grk4
(三)使用WHERE子句设置查询条件 s(jixAf
$b~[>S-Q
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: 9.%t9RM^
^H0#2hFa
SELECT * UgLFU#
n$ rgJ
FROM usertable @8W@I|
kZ%
AGc
WHERE age>20 ;dzy5o3
HkD.W6A3
WHERE子句可包括各种条件运算符: XVs]Y'*x
0BM3:]=wr
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< ~ b;%J:
XOzd{
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… 1#9 Q1@'OS
spV/+jy{
NOT BETWEEN…AND… JW ;DA E<
ZSCZt&2v
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) ;fLYO6
^sz4-+>
NOT IN (项1,项2……) q 65mR!)
[jb3lO$Xa
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE &VG|*&M
^.5`jdk
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL \mRRx#-r%
?U~}uG^
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR .{6?%lt
q^nSYp#
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 <