SQL查询语句精华使用简要
一、 简单查询
+ D+ Y ^; ?; {# f
" p6 c o- ~ ^3 U; i$ f 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。 * a5 P7 X! k2 M# k5 |
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 ' v1 C9 m2 ^6 S7 M4 Z* E6 [1 R
. g, @% t; L8 b9 Z$ c8 [$ B SELECT nickname,email 6 ^/ p" Q7 R, J
FROM testtable ) t, C+ k' h( v) m
WHERE name='张三'
3 A! T- J+ |) K6 \" [
8 U( Q6 [+ j) H L' |$ f, t2 a (一) 选择列表
8 g& `" b+ L/ H* ^2 E; t6 q, F9 U
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
2 J/ }* ]' }0 n3 F+ r+ c" U
. W; M3 ~# m1 h# a0 M5 ^ 1、选择所有列 % B% W J* i) M7 X( X
5 ]' D3 S; l: u& d, M/ `
例如,下面语句显示testtable表中所有列的数据: 1 Z3 T! [% \2 ?4 _& x$ M: g; b
8 z! H! s9 c1 L
SELECT * * j# ~ n- Q& C. c2 ?/ O- U
FROM testtable $ Z2 U; P: g! i3 Z
; d# q4 E: Y# {+ M, @8 `+ @2 r4 w
2、选择部分列并指定它们的显示次序 / a- x3 B8 I4 Y1 g
$ x) Z5 m- }( A 查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 % t6 O7 ?; z; R: Y: a) l
例如: # ^+ m0 w* B4 O0 m2 X
$ ?* n7 S' m& M }
SELECT nickname,email - I J! `6 b3 l
FROM testtable ( X' n n. V) X) ~( d; @9 ~
4 J6 Y" }% D } 3、更改列标题
% J. ~6 q4 y1 l# K" ~' X( }
( G8 X W l' T6 G* ]" e8 p7 L" O' B 在选择列表中,可重新指定列标题。定义格式为:
8 y( O: i M3 O0 C 列标题=列名 1 O, s. Q- x( t1 c7 L: T
列名 列标题
* R4 E( Z! N) N% S7 M* b; f" k 如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:
9 p3 Z6 ]& M$ U6 w
( c4 S6 Q1 ^! A( C" z) r2 h+ k; ~ SELECT 昵称=nickname,电子邮件=email
$ ]3 N2 E& h( c T FROM testtable
?9 F; h! Y* v" V3 m t% i3 @ P `: E: V+ X
4、删除重复行 & j1 d' G/ v6 |
2 {7 o# S, P+ r8 m* ^
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
( \2 Z4 v: e$ `/ y# ~/ r: p2 ~/ g' K& t' ]: L' Z/ d/ A, I
5、限制返回的行数
& U! C" ^# A8 t$ g- B6 W; _" ^: N
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。 % I; R' \4 b& R* D5 \" Q$ o
例如:
5 N9 Q- V! I8 ?2 ^5 ^+ X. J& Y3 K7 u* J, n: Q x0 Y+ F' U
SELECT TOP 2 *
3 D( E' N. }4 `3 h6 N FROM testtable
- x+ Z0 W& e, k' d" Y* `, s SELECT TOP 20 PERCENT * ' X5 Y9 W3 @$ Z5 H) l
FROM testtable ( Y) `% p/ t! l" \) i X+ T
1 m) \6 J: r2 i# H. P/ k/ \* g
(二)FROM子句 * X9 I0 { O: S
V5 i4 h* y8 e7 ~% y
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
6 L1 O4 e; O/ h5 s8 w 在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:
6 R2 s. S/ `& l/ c% m9 N
( H/ T+ f6 d ?# i7 J0 [; O- D j SELECT username,citytable.cityid 3 q/ S) N! }/ \+ D
FROM usertable,citytable
9 M0 k9 {' ]# f9 C WHERE usertable.cityid=citytable.cityid
* {8 `/ }1 K/ K E- |3 C# \
i" P" A# j% t1 \ 在FROM子句中可用以下两种格式为表或视图指定别名:
- A- n* f5 O" L! o. {+ r, {1 v 表名 as 别名
% |1 _# O( `! Y: l! b* f. U 表名 别名 " k/ e; S0 x/ K% K9 u: h* @
% h9 r5 c* t/ Z (二) FROM子句
& a& u/ s- g2 p9 v
; `, I9 R. e( b0 {9 v' ^) c FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
J* i2 {% v, L 在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定: J5 G8 K, X$ F% \
3 J- H. a2 \, s! X3 U# K SELECT username,citytable.cityid
0 T' b. @, ^. }$ s/ K% L. p FROM usertable,citytable 1 D N( U3 \. Z: \! R$ h& u
WHERE usertable.cityid=citytable.cityid
" h( I+ _: ~9 d3 J0 M. n9 T
" }7 T2 v6 ^" V& X5 w 在FROM子句中可用以下两种格式为表或视图指定别名:
" E/ G: T% F* |- E2 w 表名 as 别名 1 ?; `# U; w* d2 P1 L; V* y4 m* t
表名 别名 : T) [8 M1 v k2 U8 S
例如上面语句可用表的别名格式表示为: ; V9 W# [* T1 Q* ~9 L: M; f
. S3 K; o O' Z
SELECT username,b.cityid
. Y2 I. l. n; U% F4 X: ?* N FROM usertable a,citytable b ( T1 K; M+ c! v- e- B
WHERE a.cityid=b.cityid
% t& ]# q1 w- O, C9 z' ~7 J1 a; D D1 ~9 c$ ~
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 / q/ d8 y# u4 x5 L, h( W$ q) {" i* D
. Y( r1 e* o$ ~- j
例如:
8 P" W% Q9 W* g, t& E; |7 `0 E
% R+ R6 ?9 R! I5 Y SELECT a.au_fname+a.au_lname ' k9 w! l$ I8 T1 N
FROM authors a,titleauthor ta
7 m8 x4 J0 Y* m6 L8 I( Q; P" g; n: q( F (SELECT title_id,title # i a1 D& j6 m
FROM titles
( X2 _ A) K8 s; v) V4 m WHERE ytd_sales>10000
* B$ N! r$ @% w# a ) AS t 2 n: I- t! j' }, J3 t/ t- F
WHERE a.au_id=ta.au_id
+ B- ?: H7 h0 P) l2 I" U. X AND ta.title_id=t.title_id
( m8 W! [4 a& M2 L5 {; H' ~/ ~% z3 z0 d% N' f
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。