航空论坛_航空翻译_民航英语翻译_飞行翻译

标题: Access如何筛选重复数据以及Select语句的完整语法 [打印本页]

作者: 帅哥    时间: 2009-11-10 10:28:12     标题: Access如何筛选重复数据以及Select语句的完整语法

Access如何筛选重复数据以及Select语句的完整语法* ?+ t  |- [0 l7 y7 g
4 m# L; |! E; Z. Z- L$ A1 C4 `+ A
select distinct 字段 from 表名, L" o- D- U0 \, h1 b$ F4 l
distinct会筛选出不同的记录,也就是说相同内容的那个字段只会取一条。- V3 @) ~+ k' q
一.Select语句的完整语法为:
( d0 p! g" M9 X! l! @$ tSelect[ALL|DISTINCT|DISTINCTROW|TOP]
. T. D. \+ {7 H8 x! Z" j! J& }{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}% M+ ?# l4 s: G/ ~4 a2 o, ~7 y
FROM tablee xpression[,…][IN externaldatabase]6 I: Z+ r" M; n# u1 @
[Where…]1 w8 G# ^  M& g
[GROUP BY…]
' f0 `$ O- |0 X6 [+ p" V[HAVING…]$ Z# [  e6 C+ K7 \
[ORDER BY…]  q% l% Z3 |. Z
[WITH OWNERACCESS OPTION]5 S+ p: _- K( M% g& _1 _; r
说明:
+ J9 f- ?/ W6 D1 S6 G+ X) A6 k用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须从中选择其中的一个。9 O( @0 L( M$ W0 \
1 FROM子句
3 c, b* ]4 Z: SFROM 子句指定了Select语句中字段的来源。FROM子句后面是包含一个或多个的表达式(由逗号分开),其中的表达式可为单一表名称、已保存的查询或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 得到的复合结果。如果表或查询存储在外部数据库,在IN 子句之后指明其完整路径。( s3 \" n: @, A( K6 K- J
例:下列SQL语句返回所有有定单的客户:
+ ^+ M9 {" x! m! U* i/ Q3 e6 JSelect orderID,Customer.customerID  }% d2 M' A' P$ U9 a. ?
FROM orders Customers
- N. l. i# J4 k7 uWhere orders.CustomerID=Customers.CustomeersID
8 G& c/ n1 Z# `0 X  u$ B* N3 k2 ALL、DISTINCT、DISTINCTROW、TOP谓词
' B( T. ^, c. h  a2 n(1) ALL 返回满足SQL语句条件的所有记录。如果没有指明这个谓词,默认为ALL。0 G5 c; k2 j; v% `; E, O7 l
例:Select ALL FirstName,LastName
9 ~' I9 b  e( @2 l+ LFROM Employees8 I) c1 n# D, Y6 L6 U
(2) DISTINCT 如果有多个记录的选择字段的数据相同,只返回一个。/ t. W9 k. n4 {6 s" E# L3 X& R
(3) DISTINCTROW 如果有重复的记录,只返回一个/ \- n) o: y$ ^% G, D( O
(4) TOP显示查询头尾若干记录。也可返回记录的百分比,这是要用 TOP N PERCENT子句(其中N 表示百分比)
0 h2 K1 ]8 s' Z例:返回5%定货额最大的定单5 o8 H6 ^4 G/ O9 t# B: v
Select TOP 5 PERCENT*0 @5 Q# t2 |" k
FROM [ order Details]
) ?' i% W, ~* |5 {, O, ^orDER BY UnitPrice*Quantity*(1-Discount) DESC0 s. I( k8 f9 ~0 E/ G& g" l
3 用 AS 子句为字段取别名
2 j* h) R* I  I1 u如果想为返回的列取一个新的标题,或者,经过对字段的计算或总结之后,产生了一个新的值,希望把它放到一个新的列里显示,则用AS保留。
  g( m; g- d, [# a$ k6 O; {2 w- `例:返回FirstName字段取别名为NickName
3 B- M8 A4 }8 H5 c1 mSelect FirstName AS NickName ,LastName ,City
$ ^: f9 z- \0 }! f8 Y4 FFROM Employees
/ ]9 A: T5 o: [例:返回新的一列显示库存价值
$ s" _/ r+ I  W' y2 f4 f3 kSelect ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock
+ E( g5 a$ ^" v2 w/ J4 h; bFROM Products: N; C) X! ]2 z0 s/ G
二 .Where 子句指定查询条件
5 n1 Q* d  u" F. B1 比较运算符
3 V* d. H0 l5 ]' R8 `2 `% G比较运算符 含义* B& z. I3 c5 {0 V; }9 _  _5 l
= 等于9 U* N6 z. {7 i! T' P( I
> 大于+ ~$ C( a4 ~: I9 r3 _" M, y' R
< 小于
, O: Q0 ^0 O9 p$ S% b2 V>= 大于等于
, g% F% U2 ?- x; j' {' |<= 小于等于
6 K; t; z1 ?! _- G<> 不等于6 a& p) S; `6 D+ i; `
!> 不大于
+ H( O* W5 n  o  Z8 m+ d4 b9 p!< 不小于& t: _5 W- W# _  y. k
例:返回96年1月的定单2 m# R% ?8 }1 n# w9 V; f
Select orderID, CustomerID, orderDate
) b: q6 A( ^+ K$ @: y9 v" CFROM orders6 T6 x' l( Y( Z/ z5 w) |, S" B$ j1 V6 ]; n
Where orderDate>#1/1/96# AND orderDate<#1/30/96#
1 Y% {& o6 [' S; q: r& K# Q+ {' C注意:
" _& v' Q5 `& j8 A6 aMcirosoft JET SQL 中,日期用‘#’定界。日期也可以用Datevalue()函数来代替。在比较字符型的数据时,要加上单引号’’,尾空格在比较中被忽略。, g* S, u8 `: {
例:
* w1 E/ Y& w4 y8 B' u% uWhere orderDate>#96-1-1#4 {( k" V! U2 t5 v( S* X  I% N& L# I
也可以表示为:
/ ?* l# P. ~' v. F5 ?2 QWhere orderDate>Datevalue(‘1/1/96’)7 w" d+ r; _4 r& ~2 R
使用 NOT 表达式求反。
/ ^# g( q' W  Q6 |7 w% X例:查看96年1月1日以后的定单
4 X: f- y( B0 l" n. _9 sWhere Not orderDate<=#1/1/96#: R& c1 Y7 \( v- i) L6 {
2 范围(BETWEEN 和 NOT BETWEEN); z& u2 Z' x9 Z  ^# j2 O, y* D3 y
BETWEEN …AND…运算符指定了要搜索的一个闭区间。% R! V; {5 T4 `$ k2 g
例:返回96年1月到96年2月的定单。. x6 l  C0 D- _0 _4 i; x
Where orderDate Between #1/1/96# And #2/1/96#
, G9 z; r1 y6 C' z  j3 列表(IN ,NOT IN)$ I! P( c. R  @. e
IN 运算符用来匹配列表中的任何一个值。IN子句可以代替用OR子句连接的一连串的条件。* h: p) E3 Z( t3 z
例:要找出住在 London、Paris或Berlin的所有客户
: b& L" \2 v6 B$ B/ Q# oSelect CustomerID, CompanyName, ContactName, City, p$ T1 K1 ?; k
FROM Customers
1 d# _# r1 E3 ?. h/ wWhere City In(‘London’,’ Paris’,’ Berlin’)" m( Q% e% }% c; O* B/ W
4 模式匹配(LIKE)
7 D/ l* z- Y" CLIKE运算符检验一个包含字符串数据的字段值是否匹配一指定模式。" F  d4 f5 I7 K; ^
LIKE运算符里使用的通配符
4 z7 K  t3 D' k/ a通配符 含义
8 Z* P, c& V% ^5 L; S! u. w? 任何一个单一的字符
) [. T# }. Y2 q$ m. w* 任意长度的字符
3 x3 ?' L* C  H0 M# 0~9之间的单一数字
4 U! U( f) l. u) P$ A: B; i# v[字符列表] 在字符列表里的任一值
/ s+ ~+ u+ L2 f" p7 T[!字符列表] 不在字符列表里的任一值+ t+ a  R' p4 V( R7 b9 }" q$ M5 Y
- 指定字符范围,两边的值分别为其上下限) k* w2 x5 x% K
例:返回邮政编码在(171)555-0000到(171)555-9999之间的客户2 i# `/ x* K) c: q, }3 P
Select CustomerID ,CompanyName,City,Phone
  T' r# n  B( C+ U$ ZFROM Customers& k7 i. `0 g0 f( l
Where Phone Like ‘(171)555-####’
4 ^) A# n! h# g9 c# VLIKE运算符的一些样式及含义
3 k9 E, \: u9 c1 f( t' K4 R样式 含义 不符合
6 H/ q5 ~* X) \9 y8 C! ~& OLIKE ‘A*’ A后跟任意长度的字符 Bc,c255
! A# a3 ?1 w# J: H% W& U# LIKE’5’ 5*5 555
* _; Q0 b3 U& q, u! i. }LIKE’5?5’ 5与5之间有任意一个字符 55,5wer56 V$ D4 h( w/ L( w* |
LIKE’5##5’ 5235,5005 5kd5,5346
. N0 W/ I5 W; }; DLIKE’  D" l/ G) u$ X6 A3 a1 t$ ^1 \
[a-z]’ a-z间的任意一个字符 5,%
7 [; f/ v' e* sLIKE’[!0-9]’ 非0-9间的任意一个字符 0,1. h& e# _: ]  d
LIKE’[[]’ 1,*
( y  ]5 @: j! l% e% A" h! z3 |三 .用ORDER BY子句排序结果" Z+ v. j  s- S3 W/ H2 H
orDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。
5 T9 _: i0 D% ~7 }+ SorDER子句中定义了多个字段,则按照字段的先后顺序排序。
' x! T) G3 x% _9 j0 w例:3 }. @7 t" n3 W. L8 i7 [
Select ProductName,UnitPrice, UnitInStock
! l0 g3 T: ~- X" M" @FROM Products
/ Y+ D" P2 B) c3 G; aorDER BY UnitInStock DESC , UnitPrice DESC, ProductName
( j/ q6 ^5 x8 g* xorDER BY 子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位置号。* a8 _9 f4 `0 A" ]; P3 m3 \! d
例:下面的语句产生与上列相同的效果。
3 M" Q6 I9 t" h4 A0 \' i9 tSelect ProductName,UnitPrice, UnitInStock
, b( ]- d' S8 w3 [- l4 |FROM Products
: B$ ]) z: I! b/ {# ~orDER BY 1 DESC , 2 DESC,3
; Q. p7 |/ ~0 Q四 .运用连接关系实现多表查询+ D& v$ u+ L) h' |/ L2 i
例:找出同一个城市中供应商和客户的名字
+ b% \2 N. x8 Y1 c4 S9 bSelect Customers.CompanyName, Suppliers.ComPany.Name
+ k8 C9 @. s' t2 e- y, [# Z0 pFROM Customers, Suppliers4 i1 i6 O& ^$ _* y8 Z2 ^- O2 T- W
Where Customers.City=Suppliers.City
, E% b; f6 J* V6 A  z5 Q4 C例:找出产品库存量大于同一种产品的定单的数量的产品和定单
0 J$ U0 U* {) K, ]Select ProductName,OrderID, UnitInStock, Quantity, P, [- A$ v1 G/ M
FROM Products, [Order Deails]
: B, G1 v5 W9 R" x! J2 cWhere Product.productID=[Order Details].ProductID5 Y. p! b: ~; o. M1 G
AND UnitsInStock>Quantity
  a) Z  z; [1 w# o* g, c另一种方法是用 Microsof JET SQL 独有的 JNNER JOIN
) `5 Z/ o) P7 w( e" s0 ]. ?语法:
8 n! ?7 _  m+ Z2 m3 G4 BFROM table1 INNER JOIN table2
. O" ^% o3 q& r: w$ z/ nON table1.field1 comparision table2.field2+ e! r8 C4 U; }* w
其中comparision 就是前面Where子句用到的比较运算符。6 b  U- e8 [5 V8 b; X5 z- I$ |) x
Select FirstName,lastName,OrderID,CustomerID,OrderDate* l3 M" \/ e' z5 ~8 o  y- j. W8 z: b* X
FROM Employees
2 K; |9 V! H# Q1 b& p; ~. ?  XINNER JOIN orders ON Employees.EmployeeID=Orders.EmployeeID' j$ J. O# _% Q3 P+ p- E
注意:
* J+ m- f+ c3 `# _0 xINNER JOIN不能连接Memo OLE Object Single Double 数据类型字段。" E- X0 _  V8 X
在一个JOIN语句中连接多个ON子句* M( k6 b* K7 ?3 Y3 s
语法:8 ]1 F. i# D1 a, T  _1 j
Select fields% {8 y/ g) T5 k, X+ g
FROM table1 INNER JOIN table27 k. B. @1 A$ y! @; L" L. \; }
ON table1.field1 compopr table2.field1 AND6 f) }6 x1 j9 [: s# n3 ], a
ON table1.field2 compopr table2.field2 or: a: B% {% f. ^. N$ x
ON table1.field3 compopr table2.field3
" c1 K' v/ h: ]+ a9 M" Y2 R也可以$ L4 \9 w. D, b+ z) O$ Q' w
Select fields0 I! ]( Z% F7 V% K6 Y
FROM table1 INNER JOIN7 r- q# G0 x5 T  b. i( a( N" @
(table2 INNER JOIN [( ]table3
- O. |: g, |4 [9 l[INNER JOER] [( ]tablex[INNER JOIN]
& e, T2 C( G$ E8 U6 p3 z: W5 uON table1.field1 compopr table2.field1
# Y  l' N- @- _ON table1.field2 compopr table2.field2: z; C, R5 R6 j1 ~" \5 H3 ]: R
ON table1.field3 compopr table2.field3. d  b! p- N# _- l4 Z& X
外部连接返回更多记录,在结果中保留不匹配的记录,不管存不存在满足条件的记录都要返回另一侧的所有记录。
: w* b0 x! }# L8 r1 cFROM table [LEFT|RIGHT]JOIN table21 ^- @" N* C% `2 R
ON table1.field1comparision table.field2
3 e0 Y; \0 g/ S- ~; u0 }3 r" |* b用左连接来建立外部连接,在表达式的左边的表会显示其所有的数据
8 L* S7 e& u/ _) \& u  H9 r例:不管有没有定货量,返回所有商品
! ?% ?0 t/ I5 g1 a& k  ISelect ProductName ,OrderID2 h3 _& P0 _) P" d8 f& S' w
FROM Products3 x& z: i( P6 v' Q
LEFT JOIN orders ON Products.PrductsID=Orders.ProductID
- H& a6 g. @; t, f' n7 K右连接与左连接的差别在于:不管左侧表里有没有匹配的记录,它都从左侧表中返回所有记录。
& H6 c! Z- N/ z& [1 j( i例:如果想了解客户的信息,并统计各个地区的客户分布,这时可以用一个右连接,即使某个地区没有客户,也要返回客户信息。
% Z1 z% ]/ B4 n& O5 S4 _( {$ P) H空值不会相互匹配,可以通过外连接才能测试被连接的某个表的字段是否有空值。
! u/ J: g" d( w( N8 m. G4 uSelect *- Z" X; O% c' ]4 o' n# p
FROM talbe1# ~2 h! @% H* m2 e+ _" N
LEFT JOIN table2 ON table1.a=table2.c& U3 k5 c$ |4 _3 v0 G, S
1 连接查询中使用Iif函数实现以0值显示空值6 j* N3 s  q0 V7 I! Z- R
Iif表达式: Iif(IsNull(Amount,0,Amout)7 P5 y- H: W5 d8 O3 I
例:无论定货大于或小于¥50,都要返回一个标志。
8 w5 P, L7 b& P5 T  uIif([Amount]>50,?Big order?,?Small order?), J& v6 H/ R1 A) r( H3 V1 {
五. 分组和总结查询结果. C4 b/ n4 x# L0 `
在SQL的语法里,GROUP BY和HAVING子句用来对数据进行汇总。GROUP BY子句指明了按照哪几个字段来分组,而将记录分组后,用HAVING子句过滤这些记录。
0 h5 A$ ?1 y( qGROUP BY 子句的语法3 S: Z9 L& v  ^0 r( M
Select fidldlist
, h- t8 V. d3 w  P+ m3 _FROM table
: {! C2 L4 ^& E/ T' |Where criteria
+ t9 r; Y0 H4 Z[GROUP BY groupfieldlist [HAVING groupcriteria]]
: N- g# Q) I: z3 w; c注:Microsoft Jet数据库 Jet 不能对备注或OLE对象字段分组。/ ?0 _: k! R& c4 S
GROUP BY字段中的Null值以备分组但是不能被省略。
5 e( q1 a1 P% l5 M在任何SQL合计函数中不计算Null值。
3 x, G+ i8 r2 h, d* O7 }GROUP BY子句后最多可以带有十个字段,排序优先级按从左到右的顺序排列。1 w) I/ @# W7 n, s
例:在‘WA’地区的雇员表中按头衔分组后,找出具有同等头衔的雇员数目大于1人的所有头衔。
# K# a, \" z, r# O; O% ?Select Title ,Count(Title) as Total* a- e2 l  J& h( ?( H
FROM Employees! ?7 ?7 p2 [! _: [1 p
Where Region = ‘WA’% Z' m, J' o& x" `; Y$ T6 }: Q
GROUP BY Title
8 V2 r. H+ B+ ^7 f8 ~3 |/ VHAVING Count(Title)>1& T3 Y3 v6 w4 f3 V4 j
JET SQL 中的聚积函数0 l: T. y) @6 T" s$ c$ p4 |
聚集函数 意义: C, w2 t2 D0 v$ m4 [5 q# @
SUM ( ) 求和; k! ^9 F; w/ }% J, ~- L8 n5 J
AVG ( ) 平均值7 K3 i5 m- f' m2 r
COUNT ( ) 表达式中记录的数目
6 I9 A- m3 h5 Z# f9 PCOUNT (* ) 计算记录的数目
0 {; a( I5 v" n. Y1 MMAX 最大值/ r9 y/ Q, p1 }
MIN 最小值
1 l/ ]! s% e, O& |; nVAR 方差
- `) w, _  E# o# I. zSTDEV 标准误差8 l/ e$ ?+ [* g/ i( c. |
FIRST 第一个值
5 B% y& q3 K. G+ ULAST 最后一个值* x) H8 A, o9 w% l/ I6 z! Y
六. 用Parameters声明创建参数查询
1 A! |' q8 w: T: z0 EParameters声明的语法:
7 A6 G, w& P$ \! q8 R% ^PARAMETERS name datatype[,name datatype[, …]]2 E; _5 l; P5 i4 e+ w& p# {  I) {
其中name 是参数的标志符,可以通过标志符引用参数.
; S$ }: ^4 e/ V' P0 TDatatype说明参数的数据类型.
# R, h5 j, c: p& ?使用时要把PARAMETERS 声明置于任何其他语句之前.) w) h+ h3 C9 P/ m
例:
+ l6 p& R7 J+ @6 K0 ~9 v* f- f% uPARAMETERS[Low price] Currency,[Beginning date]datatime
! Y5 ^5 n, j0 n" L3 v1 Z4 ~Select orderID ,OrderAmount
2 s: J) q7 C+ g  I) t% w- VFROM orders/ o# K. Y% K4 Y$ k
Where orderAMount>[low price]
& n& }( ]( r! _1 [AND orderDate>=[Beginning date]
- C+ _% ~8 m- C' u: v七. 功能查询" j; _& o. u, o. o
所谓功能查询,实际上是一种操作查询,它可以对数据库进行快速高效的操作.它以选择查询为目的,挑选出符合条件的数据,再对数据进行批处理.功能查询包括更新查询,删除查询,添加查询,和生成表查询.5 g' e& t: t: [" C% G" N
1 更新查询
5 N3 h7 _. L2 L, ~6 W; X, [Update子句可以同时更改一个或多个表中的数据.它也可以同时更改多个字段的值.
( T' I8 R. U) a1 U3 K5 j8 J更新查询语法:5 x- l; I! N" Q$ u* P/ ?
Update 表名% l2 e: f/ B, K; B5 R" n3 P' N0 D
SET 新值
' O, k, v6 E, h. YWhere 准则
( e  Q9 ~# @" _* Z: w% J! M例:英国客户的定货量增加5%,货运量增加3%
; y% w3 P( n9 ]5 ^0 l( n2 l6 \Update OEDERS
9 g% Q7 F5 T9 JSET orderAmount = orderAmount *1.1
; X7 V; R* R. m- eFreight = Freight*1.036 e/ q  c* {# b) r8 I
Where ShipCountry = ‘UK’  ~5 \  I( N+ D7 d* U5 Z
2 删除查询# N8 T% t, C* o, Y
Delete子句可以使用户删除大量的过时的或冗于的数据.
+ Q9 e+ M9 F" l* w注:删除查询的对象是整个记录.
% H/ ], M* O6 n$ E3 g  w# j$ wDelete子句的语法:8 W/ g+ s* K& s: Y
Delete [表名.*]
5 x" j( ~2 s* s9 y1 o: e/ Y: xFROM 来源表
5 V$ x% q6 y& }7 ], X5 oWhere 准则( r% Z0 u2 x: N! @: r' z0 r9 e
例: 要删除所有94年前的定单
3 X% T, ~* D8 H' }) uDelete *$ `. o& C+ R6 `  g1 Z* a
FROM orders6 o( F& \6 Y) w+ |, c9 }% M$ F
Where orderData<#94-1-1#: }) O) W# k0 x! s0 R1 }0 T7 V1 s4 l9 K
3 追加查询
3 O  I5 R% z% W' VInsert子句可以将一个或一组记录追加到一个或多个表的尾部.8 W& Y/ J5 D" [0 b8 e4 e
INTO 子句指定接受新记录的表
; S6 G5 k  G& A# m/ V0 K8 P! mvalueS 关键字指定新记录所包含的数据值.
8 B% ~) P0 m: {  x3 z( {% E. A$ SInsert 子句的语法:: _9 x3 u* d  n8 [' |0 b( _, L
INSETR INTO 目的表或查询(字段1,字段2,…)3 i+ a0 W: k) k
valueS(数值1,数值2,…)' j6 k8 y6 R' l; y6 D7 o, r
例:增加一个客户
  I% m% [; n, `6 q9 Y+ `2 mInsert INTO Employees(FirstName,LastName,title)
& q1 s. i" A) f# ~3 }valueS(‘Harry’,’Washington’,’Trainee’)
& P1 }( ?, w' ~4 u; i4 生成表查询
+ ]8 {1 F7 k4 `可以一次性地把所有满足条件的记录拷贝到一张新表中.通常制作记录的备份或副本或作为报表的基础.
- q- c* ]. C  L; H7 ]3 }Select INTO子句用来创建生成表查询语法:4 X1 Z' L! k6 S$ V3 W! A
Select 字段1,字段2,…
4 s5 M0 g8 n) OINTO 新表[IN 外部数据库]
( N' j4 N2 R& o: O& o- H5 PFROM 来源数据库
" X$ x/ K2 y, c/ ~- w: |: ]Where 准则6 z  M9 E* y, [; E: I7 q
例:为定单制作一个存档备份
$ P* S1 y6 ~1 E# t% }9 ]+ x. qSelect *8 `8 f0 ?8 Z- s  u
INTO ordersArchive1 F& ]3 w  t7 A) `5 Q
FROM orders
1 {0 G( `  {# f3 j! ~/ N; u八. 联合查询
% u) Y+ e; N' Z2 \. L* SUNION运算可以把多个查询的结果合并到一个结果集里显示.& e5 R: h5 N* y' E& p) ?" F  M2 m
UNION运算的一般语法:
& v: r8 G8 u( s[表]查询1 UNION [ALL]查询2 UNION …' X3 k) P6 ~2 Y  G2 A1 z4 i. k
例:返回巴西所有供给商和客户的名字和城市
7 \( L, ]2 m5 w% ~- iSelect CompanyName,City2 f4 w9 K8 v! _
FROM Suppliers+ w$ _. n9 L) C# n
Where Country = ‘Brazil’' }6 A$ ]7 R$ R, q' j
UNION
* C6 }+ ~4 q- y  d/ q, e) N4 JSelect CompanyName,City
3 f  X) y  G1 c6 }FROM Customers/ q- Y. Q. ]6 m4 n3 R4 C8 I6 l
Where Country = ‘Brazil’  K! c3 T! e/ ^0 E2 p' q
注:$ x8 w, d% n4 `8 N
缺省的情况下,UNION子句不返回重复的记录.如果想显示所有记录,可以加ALL选项
) C2 f3 m# K6 d0 n. t2 B# oUNION运算要求查询具有相同数目的字段.但是,字段数据类型不必相同.
9 x; s# ?9 m0 C; {每一个查询参数中可以使用GROUP BY 子句 或 HAVING 子句进行分组.要想以指定的顺序来显示返回的数据,可以在最后一个查询的尾部使用OREER BY子句.
  G3 T! U. C  S, G# a; {$ B九. 交叉查询
6 V1 L! V  R; I( z% i交叉查询可以对数据进行总和,平均,计数或其他总和计算法的计算,这些数据通过两种信息进行分组:一个显示在表的左部,另一个显示在表的顶部.5 ~: Y! j! d$ _% }! Z
Microsoft Jet SQL 用TRANSFROM语句创建交叉表查询语法:6 k% O+ F  o- V' t/ E5 L
TRANSFORM aggfunction5 _' h; A! r( N- R9 R
Select 语句0 W7 j' z' ]$ v% h2 Q
GROUP BY 子句% p( W$ ]2 v5 `
PIVOT pivotfield[IN(value1 [,value2[,…]]) ]1 E3 w& Q2 Z0 U- D# W; A/ d9 v
Aggfounction指SQL聚积函数,
% K+ P9 H$ g$ MSelect语句选择作为标题的的字段,8 f# e  r4 f% D$ w+ t1 d
GROUP BY 分组5 u) v! ]! L* I- L  w3 Y/ }3 y* L
说明:% S% @8 W# W7 ?7 l, e& T
Pivotfield 在查询结果集中创建列标题时用的字段或表达式,用可选的IN子句限制它的取值.& Q) R0 M4 @( ]3 U5 N( n
value代表创建列标题的固定值.
. z$ F$ g& f( A# H( f例:显示在1996年里每一季度每一位员工所接的定单的数目:) c2 X1 p: `8 ?, E
TRANSFORM Count(OrderID)3 b& g- q& m3 y& p: ?# q
Select FirstName&’’&LastName AS FullName
4 f) h8 t1 T* h5 Z  R: w( ^FROM Employees INNER JOIN orders2 L6 j+ P& K% s* g
ON Employees.EmployeeID = orders.EmployeeID% v( w* g8 D& P' w
Where DatePart(“yyyy”,OrderDate)= ‘1996’1 A6 ]; L. t2 r# j8 n, @; |5 M
GROUP BY FirstName&’’&LastName
, u: w0 j2 G( s, r) C& `orDER BY FirstName&’’&LastName, Y! S+ \. m9 e; ^
POVOT DatePart(“q”,OrderDate)&’季度’
5 k  X, R# j( S* ]; J/ \# N' O十 .子查询6 z0 T: Y# N+ J( p
子查询可以理解为 套查询.子查询是一个Select语句.
. H8 {: I  t+ c9 e6 V7 ~1 表达式的值与子查询返回的单一值做比较- A2 I3 n5 B( j
语法:1 o3 H7 L! ]: R2 H$ V% H+ Y8 r
表达式 comparision [ANY|ALL|SOME](子查询)
: q6 p& S$ @( P' \- j$ V说明:
9 I( N5 [# }% D' q+ G9 CANY 和SOME谓词是同义词,与比较运算符(=,<,>,<>,<=,>=)一起使用.返回一个布尔值True或 False.ANY的意思是,表达式与子查询返回的一系列的值逐一比较,只要其中的一次比较产生True结果,ANY测试的返回 True值(既Where子句的结果),对应于该表达式的当前记录将进入主查询的结果中.ALL测试则要求表达式与子查询返回的一系列的值的比较都产生 True结果,才回返回True值.% H- Q+ ^+ e- L6 H* y/ a; _
例:主查询返回单价比任何一个折扣大于等于25%的产品的单价要高的所有产品* T$ h& ^$ ~/ W
Select * FROM Products
, ^; O, `/ P" q! _% }  \, j. nWhere UnitPrice>ANY" \# o9 L: I1 z4 W5 D& ]
(Select UnitPrice FROM[Order Details] Where Discount>0.25)$ w8 p8 j  G' J  l5 C+ S) N/ B+ K
2 检查表达式的值是否匹配子查询返回的一组值的某个值+ T  g3 v' }; p* R. d' s1 _
语法:4 W8 a& j1 e* u4 a, @: w4 ?4 M  q
[NOT]IN(子查询)
+ B' X% _7 d5 F5 d9 _4 P8 e例:返回库存价值大于等于1000的产品.
/ O0 L  J, `) ?# q0 N, r+ I* l. sSelect ProductName FROM Products, W( a7 E5 l8 G
Where ProductID IN
& H1 T  R% a2 v(Select PrdoctID FROM [Order DEtails]! C( l1 M* a, r! V
Where UnitPrice*Quantity>= 1000)1 Z7 v& N! P: `' {+ R+ ~* Z
3检测子查询是否返回任何记录9 j2 H. s  \- j' L  T$ s" X4 f& k) A
语法:! }; n: D6 j, J5 c& ^4 o6 b9 m* k
[NOT]EXISTS (子查询)6 ]& F& ]6 h' a
例:用EXISTS检索英国的客户
% s. D% g: X# S5 R8 x, U+ {9 S# wSelect ComPanyName,ContactName
, o# B+ H, D) }1 PFROM orders
* E% [, c6 l# v7 k: BWhere EXISTS
% A. c% U8 Q) t" R(Select *
6 ^7 A' o! ?& T$ e3 X, E1 bFROM Customers! f. D9 q( |3 E; s1 L8 n
Where Country = ‘UK’ AND; J* }% \2 J) \, f. H
Customers.CustomerID= orders.CustomerID)




欢迎光临 航空论坛_航空翻译_民航英语翻译_飞行翻译 (http://bbs.aero.cn/) Powered by Discuz! X2