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

 找回密码
 注册
搜索
查看: 2405|回复: 0
打印 上一主题 下一主题

Access如何筛选重复数据以及Select语句的完整语法 [复制链接]

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-11-10 10:28:12 |只看该作者 |倒序浏览
Access如何筛选重复数据以及Select语句的完整语法0 B+ g9 N0 \: {
' @1 g; \, L# J8 B; G- e- S; M" B
select distinct 字段 from 表名
7 j% R' }' q7 ?distinct会筛选出不同的记录,也就是说相同内容的那个字段只会取一条。, U- P  h5 B0 B2 _8 M$ u
一.Select语句的完整语法为:$ i+ l* M9 C  O
Select[ALL|DISTINCT|DISTINCTROW|TOP]
% b4 o6 X0 L% t! v' C; @{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}! P8 ?9 j0 k  [8 s9 r& T9 P! x
FROM tablee xpression[,…][IN externaldatabase]* H5 K6 b( M- O4 \
[Where…]) ?4 M, F/ {9 }
[GROUP BY…]  x8 [" P% [+ E( M% F. H+ O4 b1 B
[HAVING…]: `( h) e( ]9 k4 p  ^. X/ V3 ?
[ORDER BY…]
/ w$ G: a6 K9 ?; w2 k[WITH OWNERACCESS OPTION]5 s1 E; u! c( m
说明:3 q% k8 s' u% ~. {/ ]2 E% ?  U- G2 w
用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须从中选择其中的一个。; P( C) E6 Z. u
1 FROM子句
1 t# V' x! S- GFROM 子句指定了Select语句中字段的来源。FROM子句后面是包含一个或多个的表达式(由逗号分开),其中的表达式可为单一表名称、已保存的查询或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 得到的复合结果。如果表或查询存储在外部数据库,在IN 子句之后指明其完整路径。+ }1 g$ v( A9 D. z/ t) @  {
例:下列SQL语句返回所有有定单的客户:
1 `% e  J: S7 O( Z  R9 ?& _( OSelect orderID,Customer.customerID
  Q4 p- W9 @" o% |/ v7 NFROM orders Customers
+ [/ F& m- S  L; N9 e- ^6 T; K: O& rWhere orders.CustomerID=Customers.CustomeersID; {0 i9 ^" m. Z$ X
2 ALL、DISTINCT、DISTINCTROW、TOP谓词3 {( F- [/ r. k; V6 E4 p
(1) ALL 返回满足SQL语句条件的所有记录。如果没有指明这个谓词,默认为ALL。3 m/ Y* G3 e% g8 o9 y( H
例:Select ALL FirstName,LastName3 w' M9 t2 Z! ^- k" T0 h; O3 e  v. [
FROM Employees
+ Y  Z* ^* p# z(2) DISTINCT 如果有多个记录的选择字段的数据相同,只返回一个。. K; [4 F. }- ], G( J) W0 E
(3) DISTINCTROW 如果有重复的记录,只返回一个
' z$ |2 m9 _9 |7 e( b(4) TOP显示查询头尾若干记录。也可返回记录的百分比,这是要用 TOP N PERCENT子句(其中N 表示百分比)# q% k: w8 B+ P, ?) E. I: f% w7 Z
例:返回5%定货额最大的定单6 o% k6 |' ?0 R8 V+ Q
Select TOP 5 PERCENT*
7 T* p5 v& w) D6 [/ NFROM [ order Details]9 n# W. [" @. K% u) r& Y) c
orDER BY UnitPrice*Quantity*(1-Discount) DESC
5 c9 P" S7 `  d+ y0 n, F  I3 用 AS 子句为字段取别名
* E# O5 Q8 e- g5 K* K9 }如果想为返回的列取一个新的标题,或者,经过对字段的计算或总结之后,产生了一个新的值,希望把它放到一个新的列里显示,则用AS保留。* O" g* V" L1 [3 U2 Z) R+ X
例:返回FirstName字段取别名为NickName) z5 y- `6 G0 G: x9 z
Select FirstName AS NickName ,LastName ,City3 X2 g& I8 }0 f( Y0 A  @
FROM Employees
# U  l6 G! ?* Z& |$ u, D例:返回新的一列显示库存价值* \5 D; T+ w) s+ K, _
Select ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock8 o2 \0 ]* P& l+ o0 _
FROM Products' E, v  ^# K( W% n) d& g# a  b9 x
二 .Where 子句指定查询条件
9 S8 U& j" A1 y/ U; o1 比较运算符
& H/ ^. f  |* O- R& g* _+ ^; D比较运算符 含义
% W7 r) {4 i- @0 C& V9 R$ F% |- X- N= 等于
4 f: e: U+ Z- d: {0 K" U4 C1 n4 ~> 大于
/ v9 h8 c' d3 y: H* m# D< 小于) c5 b+ w2 t7 ]  {5 w6 A4 r
>= 大于等于) L- ~  b1 o! _/ Z, A; ~- p
<= 小于等于4 e) ^. X( |1 d1 x! s, E0 v3 V: V
<> 不等于
9 ?' d1 l! b; {) l!> 不大于3 S3 h4 @' C, ^1 c- B
!< 不小于
5 X- B/ e; C+ X! n- P2 e+ u& l例:返回96年1月的定单: _( M# b7 G2 M0 Y
Select orderID, CustomerID, orderDate
' s8 K& f& F! B  `6 T$ O! @FROM orders
! O! m7 N: r! R& }8 d6 nWhere orderDate>#1/1/96# AND orderDate<#1/30/96#
  G2 o3 Z2 k/ N# z注意:* V$ H2 K, H9 N6 ~3 D, f3 I+ D# G
Mcirosoft JET SQL 中,日期用‘#’定界。日期也可以用Datevalue()函数来代替。在比较字符型的数据时,要加上单引号’’,尾空格在比较中被忽略。* u# C; Y2 b/ x5 w+ ~# m
例:
$ M" Y! s. b( j' {3 B$ ]+ y. ^( y3 lWhere orderDate>#96-1-1#
$ c9 T4 Y6 _5 M: K: P5 ]也可以表示为:
* F, H' B7 ^7 x8 s! _) yWhere orderDate>Datevalue(‘1/1/96’)% X: e3 q8 M5 b; p
使用 NOT 表达式求反。% R. @0 `0 [0 [4 A; H9 m
例:查看96年1月1日以后的定单" A1 O) G* g7 o2 _: \: v2 Z0 b$ V
Where Not orderDate<=#1/1/96#/ J  ~; V5 j& m5 g7 p( Q- d
2 范围(BETWEEN 和 NOT BETWEEN)
* b0 {1 }" X- U% P5 E" B, FBETWEEN …AND…运算符指定了要搜索的一个闭区间。
. L( ~& J% @2 X9 H/ W例:返回96年1月到96年2月的定单。
7 T# s7 @2 ~- K) s) a" JWhere orderDate Between #1/1/96# And #2/1/96#
1 T' {, _3 V  r5 G4 D+ f* e3 列表(IN ,NOT IN)5 _9 I$ f3 f+ G4 X+ A# Y
IN 运算符用来匹配列表中的任何一个值。IN子句可以代替用OR子句连接的一连串的条件。; S1 G/ |( F& y* k( S
例:要找出住在 London、Paris或Berlin的所有客户) w/ h9 o$ P8 H: @! B! Q$ N; J% j
Select CustomerID, CompanyName, ContactName, City9 j6 u; _- W  _8 P+ G- i
FROM Customers
0 r  i3 q* \: f- I* S3 ^6 LWhere City In(‘London’,’ Paris’,’ Berlin’)3 c6 c+ k; C' e4 q5 `0 F3 D
4 模式匹配(LIKE)) x8 g( {" t. x/ I* s0 Y( d
LIKE运算符检验一个包含字符串数据的字段值是否匹配一指定模式。
" U6 ~# m" y- K2 Q& y+ wLIKE运算符里使用的通配符8 L2 j2 z7 h) M7 [/ M
通配符 含义
4 z3 C$ J. d- j  Z3 p( a. ?9 q? 任何一个单一的字符/ k. K8 R! R7 ]: O# _6 B
* 任意长度的字符
5 V, k6 M( T. t9 l) N# 0~9之间的单一数字$ K  q! N2 j$ t' ^5 M9 \' O
[字符列表] 在字符列表里的任一值
( z8 C/ c+ ?# v2 l3 P" f9 n[!字符列表] 不在字符列表里的任一值& K% L* F" U% l3 A* d' ]3 M
- 指定字符范围,两边的值分别为其上下限
  D7 }& E( o2 q# u& q- E例:返回邮政编码在(171)555-0000到(171)555-9999之间的客户9 k- s9 z8 A& C+ C, r. Q9 S' ~
Select CustomerID ,CompanyName,City,Phone
1 u; I' @0 u! g! w# q" k6 {, @FROM Customers( O8 W; s2 g) o0 k+ v& `
Where Phone Like ‘(171)555-####’; T" W* r5 |/ \
LIKE运算符的一些样式及含义
. x% [" _; Y! k3 V. l样式 含义 不符合! p2 N. }3 p% t# P" Y
LIKE ‘A*’ A后跟任意长度的字符 Bc,c2551 v+ |; @- z) t: i* [
# LIKE’5’ 5*5 555
! K  i7 B# m4 X2 D0 n; mLIKE’5?5’ 5与5之间有任意一个字符 55,5wer56 p# n3 X# A, @) |, t8 E  o
LIKE’5##5’ 5235,5005 5kd5,53460 f6 d* g9 p$ A# r; ~) P, u
LIKE’
5 m5 N. ?# x: P2 o2 g2 |. p8 S[a-z]’ a-z间的任意一个字符 5,%, J  a( y+ l3 y  q. O
LIKE’[!0-9]’ 非0-9间的任意一个字符 0,1
7 r/ k# F! m+ @5 Z4 N% GLIKE’[[]’ 1,*, D3 Y* b8 a& f7 @/ E
三 .用ORDER BY子句排序结果
6 l; e( i. L2 p7 MorDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。
$ O: e* q& S2 H7 N) M* J4 KorDER子句中定义了多个字段,则按照字段的先后顺序排序。1 C' U! i3 w3 Y- P2 ^' R! q' {- h! O
例:
2 _$ {" N- J& x* [1 jSelect ProductName,UnitPrice, UnitInStock4 @/ y: L* M( [
FROM Products! d* {5 O0 f6 |& |& e3 f# n. G; y' _
orDER BY UnitInStock DESC , UnitPrice DESC, ProductName
' ]3 ]% B, J) i0 z3 p3 G) a: EorDER BY 子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位置号。( x# Y5 A- k7 _! R' P+ A
例:下面的语句产生与上列相同的效果。. S  X4 v" u# ~" s6 k
Select ProductName,UnitPrice, UnitInStock( I1 q1 }) V7 ?# X* K/ G
FROM Products- `" G& A" {/ E
orDER BY 1 DESC , 2 DESC,3
/ ?* d  n$ @( r8 V+ k0 Y四 .运用连接关系实现多表查询3 ^2 f" @/ N  k- u
例:找出同一个城市中供应商和客户的名字
) \9 \& H2 I8 G' N4 `' ~Select Customers.CompanyName, Suppliers.ComPany.Name+ f( r& a9 k; V% @) O
FROM Customers, Suppliers
- ]! K) E/ {$ t6 nWhere Customers.City=Suppliers.City% ]( R6 |% B/ B9 y* |( I6 K* A9 T6 z
例:找出产品库存量大于同一种产品的定单的数量的产品和定单
' R9 s& p- Q" eSelect ProductName,OrderID, UnitInStock, Quantity
% }1 @$ [' M3 UFROM Products, [Order Deails]
0 L8 e" v) _( _' m" yWhere Product.productID=[Order Details].ProductID
( ^+ x( @, q# R: u* V' k9 x2 C2 BAND UnitsInStock>Quantity
( t0 Y. x9 o- r  A7 N另一种方法是用 Microsof JET SQL 独有的 JNNER JOIN* F/ g# v% i! c! Y! q8 O. K; r
语法:
' h! I0 e' H; h6 R; n7 G4 ^4 }5 Z0 XFROM table1 INNER JOIN table2
* ?0 R7 [: ~: |+ H) F, sON table1.field1 comparision table2.field2; y" x! v  n' H+ w% c
其中comparision 就是前面Where子句用到的比较运算符。
: l5 r+ Z$ L5 d4 K; @Select FirstName,lastName,OrderID,CustomerID,OrderDate
* N- w8 M6 P' b% B+ f3 W6 Q' GFROM Employees
/ o3 A- J3 ~6 X, N% oINNER JOIN orders ON Employees.EmployeeID=Orders.EmployeeID5 Q, n' H; ]4 d6 o
注意:
+ y+ }) ~% u( ?  }INNER JOIN不能连接Memo OLE Object Single Double 数据类型字段。- E% O7 d3 L& _. o0 Z
在一个JOIN语句中连接多个ON子句; a& L( D1 N/ G" C
语法:
8 e; X; @, Y' G' K: _6 E% V. iSelect fields
7 L+ \5 z+ J5 a" Y( }9 o" `0 jFROM table1 INNER JOIN table28 w- S. y0 E) ~( [: J
ON table1.field1 compopr table2.field1 AND& l: S/ l" D% j/ |( ]. W. \
ON table1.field2 compopr table2.field2 or2 g9 F  Q$ s1 t1 s' j
ON table1.field3 compopr table2.field3
2 K/ Q! i" {  a/ |0 @7 r5 }也可以
3 ?4 q2 q5 g4 B, A( @Select fields  K2 ?- Q' `& B) M/ V6 K8 F. f4 L
FROM table1 INNER JOIN
- a! i( ]; U9 N(table2 INNER JOIN [( ]table3
  f) ?8 s, U" J+ [9 |2 r% Z6 x[INNER JOER] [( ]tablex[INNER JOIN]5 @7 z$ m. z* k5 E8 z8 T
ON table1.field1 compopr table2.field1. j$ A  E$ T0 O9 m9 O& M
ON table1.field2 compopr table2.field2- }2 V1 u  }4 K0 n+ @0 Q
ON table1.field3 compopr table2.field3
- Q0 J& r- o# g) @) {( {1 }5 X外部连接返回更多记录,在结果中保留不匹配的记录,不管存不存在满足条件的记录都要返回另一侧的所有记录。
7 A/ |3 ?# U% M1 T- ]FROM table [LEFT|RIGHT]JOIN table23 S6 O4 w; h2 A" b2 T$ l
ON table1.field1comparision table.field2
+ ?0 f8 b3 a2 f, `/ d  r用左连接来建立外部连接,在表达式的左边的表会显示其所有的数据4 I) z$ D6 B! v; N7 B/ U
例:不管有没有定货量,返回所有商品
7 S) k, g; F1 T# dSelect ProductName ,OrderID4 z* Z! ~5 ^* D: ]2 u" h# r
FROM Products  v+ l4 v2 r" j* m
LEFT JOIN orders ON Products.PrductsID=Orders.ProductID' U7 E1 ~0 n  c
右连接与左连接的差别在于:不管左侧表里有没有匹配的记录,它都从左侧表中返回所有记录。
& u* O( V% i7 e9 s3 V4 T例:如果想了解客户的信息,并统计各个地区的客户分布,这时可以用一个右连接,即使某个地区没有客户,也要返回客户信息。
( R. g" ]6 ~9 _& W' m6 s空值不会相互匹配,可以通过外连接才能测试被连接的某个表的字段是否有空值。
% t9 \. i0 A+ ]% Z3 i! Z/ rSelect *
. t: E$ B! R0 ]FROM talbe1
0 {0 c9 f9 W/ k& y  l" F, ?4 H* Z5 VLEFT JOIN table2 ON table1.a=table2.c
" I# A1 H5 J, D6 r, E+ W9 |, d1 连接查询中使用Iif函数实现以0值显示空值
# l" |. A' Y' j& u; b; eIif表达式: Iif(IsNull(Amount,0,Amout)5 \- k7 m) ~+ J9 H! V
例:无论定货大于或小于¥50,都要返回一个标志。: Y, F8 p& f7 [+ C+ @
Iif([Amount]>50,?Big order?,?Small order?)
- W6 @+ H: T0 }0 `" o五. 分组和总结查询结果
; ^) \: n! u9 _4 n在SQL的语法里,GROUP BY和HAVING子句用来对数据进行汇总。GROUP BY子句指明了按照哪几个字段来分组,而将记录分组后,用HAVING子句过滤这些记录。1 M& M0 H! e. n; @* F$ }
GROUP BY 子句的语法" d9 c7 O! I/ _
Select fidldlist) [, b7 ], H' o' M9 T9 Q
FROM table. X; H7 c  g6 Q* V; R; [5 T; h
Where criteria9 _8 u9 {+ O" w
[GROUP BY groupfieldlist [HAVING groupcriteria]]
: p$ [) s3 R0 z4 q" T9 B: C5 Q注:Microsoft Jet数据库 Jet 不能对备注或OLE对象字段分组。
3 `6 b/ X3 s, e) IGROUP BY字段中的Null值以备分组但是不能被省略。+ ?& y% f/ d- v) M. ~
在任何SQL合计函数中不计算Null值。8 Y, Y% j' q) X3 R& P6 p" j
GROUP BY子句后最多可以带有十个字段,排序优先级按从左到右的顺序排列。3 ?! d. J  y$ ^- H) p4 ~9 F- o( A- }
例:在‘WA’地区的雇员表中按头衔分组后,找出具有同等头衔的雇员数目大于1人的所有头衔。$ I& l6 o8 ^6 w1 j4 k/ h
Select Title ,Count(Title) as Total
* Y' ]7 |3 N/ w. F7 i' L! P! HFROM Employees. @/ V7 D) r2 T1 R' t) ^
Where Region = ‘WA’( ?3 V5 t$ y4 i4 t4 z7 K; }) }9 V
GROUP BY Title
8 j+ o. |! |, {. ~" k% o9 V9 b  cHAVING Count(Title)>1
; I* ^7 |8 \# n, k% g9 @JET SQL 中的聚积函数7 l, q1 Z6 t6 w" k+ y; E
聚集函数 意义
( t2 P$ G) x4 qSUM ( ) 求和
4 W- P  e/ V9 BAVG ( ) 平均值% |) N, o9 L$ i: J$ \
COUNT ( ) 表达式中记录的数目! r, i9 f5 S' Q9 P* y) {
COUNT (* ) 计算记录的数目) t: V! T' x9 ^. R
MAX 最大值  r- n1 i% n6 [
MIN 最小值# y. R7 {" M# s, g! L& k: o
VAR 方差
/ Z) F( H! [! s  s# PSTDEV 标准误差
/ W/ g& x- S% w8 K( l# dFIRST 第一个值
7 ^. o. ?! E7 ?LAST 最后一个值# l6 B1 G- H1 ?/ B4 O# v" @
六. 用Parameters声明创建参数查询
6 B3 H2 f! Q: @0 eParameters声明的语法:! a" R; B+ D% x( L
PARAMETERS name datatype[,name datatype[, …]]6 N5 t# l3 N* d8 t
其中name 是参数的标志符,可以通过标志符引用参数.
' |7 i+ j5 l& F: k3 O% y/ ?; s4 NDatatype说明参数的数据类型.
8 B* L* ?# P) A0 W. t: h使用时要把PARAMETERS 声明置于任何其他语句之前.9 O' }3 C- K- q2 @6 c
例:
$ M' c& r: X( T: I0 y" k, GPARAMETERS[Low price] Currency,[Beginning date]datatime0 f; E5 n% ~, V5 f5 B
Select orderID ,OrderAmount
  k1 M% {3 M* E+ L/ U8 oFROM orders+ t7 V2 V# K6 w6 A. o4 S% N' Z  F; E, C
Where orderAMount>[low price]; J& W& L+ Y% {! X6 {  e; `$ L& r5 n* {
AND orderDate>=[Beginning date]. {3 [0 n+ p+ F) n, O# Q0 p
七. 功能查询
: \2 A/ d3 C& s6 j- K; a+ N/ `' H( J所谓功能查询,实际上是一种操作查询,它可以对数据库进行快速高效的操作.它以选择查询为目的,挑选出符合条件的数据,再对数据进行批处理.功能查询包括更新查询,删除查询,添加查询,和生成表查询.
2 ]3 U; E' J7 d* k  f. I* i1 更新查询
1 ^& u/ \& l, nUpdate子句可以同时更改一个或多个表中的数据.它也可以同时更改多个字段的值.' R, K' I3 J$ @  F% k7 l
更新查询语法:$ _' C$ ]8 s2 X1 V" e9 A
Update 表名
# W! z1 G; R* t0 B9 v( [+ HSET 新值' v) n& C) e% P" N
Where 准则1 X4 a* t0 o! x- e% b
例:英国客户的定货量增加5%,货运量增加3%
$ ?5 V( Q$ K. ?' h9 W5 f4 Z8 rUpdate OEDERS( _, C. i, M' Z
SET orderAmount = orderAmount *1.1
, T4 l: ?# p  V2 qFreight = Freight*1.033 x, `; E6 R# _+ r5 M- p
Where ShipCountry = ‘UK’: h2 a& K& W$ n8 c
2 删除查询
7 O: Q" Q3 l: j. \# r5 }0 EDelete子句可以使用户删除大量的过时的或冗于的数据.
* i- V1 T. s% s3 f4 T; m# p注:删除查询的对象是整个记录.
: ^) F8 G0 G, O0 D) d( aDelete子句的语法:7 {% Q3 B( R; b6 M& ^6 X/ U
Delete [表名.*]
7 ~$ w9 S- `, }/ g  FFROM 来源表
' ?& S% G1 l  C9 H7 \: I; q9 IWhere 准则
7 N( F% @% J, w0 K( o" h例: 要删除所有94年前的定单
" \/ g7 Y8 z) @$ v& H; m  hDelete *
2 Y6 g5 B. ?( I, ^& tFROM orders9 a9 c; K1 H2 Z
Where orderData<#94-1-1#+ L! u; T! E$ N) Y" T& w
3 追加查询# V8 f2 @" b$ M! e0 M$ x( \
Insert子句可以将一个或一组记录追加到一个或多个表的尾部.
! U( X! @, j2 G. s/ [& pINTO 子句指定接受新记录的表! R# `$ z, @1 M
valueS 关键字指定新记录所包含的数据值.5 P6 B! _" Q1 J- a0 d$ l- ]9 h' G
Insert 子句的语法:
, m+ W+ M# t' H9 P# B4 IINSETR INTO 目的表或查询(字段1,字段2,…)) E! O! m; E4 O2 ^* Q  B- h, _
valueS(数值1,数值2,…)
9 X) o4 |' \  x. l- @$ v# x, t例:增加一个客户4 J- D' T' h( R* |
Insert INTO Employees(FirstName,LastName,title)3 t  C% w; U: Z1 `
valueS(‘Harry’,’Washington’,’Trainee’)/ }5 \6 p! \8 X& h- s4 Y( P. n
4 生成表查询+ {; ]7 y" _. |, _& x) S
可以一次性地把所有满足条件的记录拷贝到一张新表中.通常制作记录的备份或副本或作为报表的基础." q% y1 V' U( v6 t; K4 n
Select INTO子句用来创建生成表查询语法:
# p4 e, u4 c+ B) a& lSelect 字段1,字段2,…
, U( y$ U- t9 m. ]8 C! D7 DINTO 新表[IN 外部数据库]% o% I# n3 F2 Y
FROM 来源数据库2 ?2 Z  U0 ?+ h8 x& K, ^
Where 准则" |6 v1 d" F( |
例:为定单制作一个存档备份, ~0 u; l& b4 P# f/ b; D8 n1 d5 q
Select *
7 m+ ]  D# K0 h9 h, j# d+ pINTO ordersArchive  [$ X/ @% z' _6 s' s% f
FROM orders
! D1 ]6 L8 r0 c# ^八. 联合查询
" J5 w1 f  x5 o0 j/ e6 FUNION运算可以把多个查询的结果合并到一个结果集里显示.9 I% |+ z* A4 l1 U
UNION运算的一般语法:1 l9 Y& U; I+ q3 b
[表]查询1 UNION [ALL]查询2 UNION …( A  L" Y% c! S# w, l, K3 O9 b
例:返回巴西所有供给商和客户的名字和城市$ z$ l9 V+ Y) k# y( S- c4 A
Select CompanyName,City2 C  g% ^& c$ a1 s  o, ?5 T* D' r
FROM Suppliers" V! [6 E, j$ i7 u. [
Where Country = ‘Brazil’: C3 l0 N* U# ?; i  h( p3 j
UNION4 d0 J6 q3 d# ?% U8 M0 K  F# G" y
Select CompanyName,City
. i6 q  `  e8 F% I4 X# mFROM Customers. D. T( v1 P( x0 }5 X8 p
Where Country = ‘Brazil’
! p  n  a" S7 i1 X3 z注:
/ m& j6 e7 L! j* w9 ]5 E缺省的情况下,UNION子句不返回重复的记录.如果想显示所有记录,可以加ALL选项% i2 m: W5 W& a" n
UNION运算要求查询具有相同数目的字段.但是,字段数据类型不必相同.
. O- z* D, U7 t每一个查询参数中可以使用GROUP BY 子句 或 HAVING 子句进行分组.要想以指定的顺序来显示返回的数据,可以在最后一个查询的尾部使用OREER BY子句.
' U4 i0 s% h3 a+ J九. 交叉查询: V  o. E( l" ^
交叉查询可以对数据进行总和,平均,计数或其他总和计算法的计算,这些数据通过两种信息进行分组:一个显示在表的左部,另一个显示在表的顶部.6 U! E7 g% s  y- K& J2 B
Microsoft Jet SQL 用TRANSFROM语句创建交叉表查询语法:
8 C  {5 b) ]0 JTRANSFORM aggfunction3 l; C' V* O* n: A6 J3 L( Y
Select 语句- D7 P, J$ A  r1 A
GROUP BY 子句
/ w- j8 T8 j0 C6 U9 q9 u2 ]8 ~' EPIVOT pivotfield[IN(value1 [,value2[,…]]) ]
. d! M; J& h7 y/ C, ?Aggfounction指SQL聚积函数,
. [+ e9 f- `; sSelect语句选择作为标题的的字段,& Y$ H$ Y  v2 o1 r3 b9 ~
GROUP BY 分组! h! A6 L2 T& t
说明:# I& S: M6 G$ l6 P  T
Pivotfield 在查询结果集中创建列标题时用的字段或表达式,用可选的IN子句限制它的取值.  ^# p' N0 Z! v! }0 t7 e1 o
value代表创建列标题的固定值.+ I$ t* z' A% P" A* j
例:显示在1996年里每一季度每一位员工所接的定单的数目:
, }) |. G; L9 \" l) mTRANSFORM Count(OrderID)& M) m8 z5 H8 Q& l
Select FirstName&’’&LastName AS FullName
0 N7 I# Q3 F; u5 aFROM Employees INNER JOIN orders
% m6 A6 A0 S" @7 L8 x8 L8 DON Employees.EmployeeID = orders.EmployeeID
0 n8 T  L+ d: V) T( cWhere DatePart(“yyyy”,OrderDate)= ‘1996’/ ]6 B" ]$ s, v/ t
GROUP BY FirstName&’’&LastName5 l! e$ a! f' U: h/ x
orDER BY FirstName&’’&LastName/ [! i3 t" r4 |  M( q( I
POVOT DatePart(“q”,OrderDate)&’季度’
3 ?+ H) {$ Q4 ?; F! H# i十 .子查询( x$ K  ^8 R$ _5 q
子查询可以理解为 套查询.子查询是一个Select语句.% r8 I# ?, Y4 B5 h
1 表达式的值与子查询返回的单一值做比较
- U* W3 p/ W. @( V5 U语法:2 G2 \7 l0 E: @+ n# y$ }
表达式 comparision [ANY|ALL|SOME](子查询)7 m, o8 e9 ~0 r
说明:  x7 q2 i- {2 x7 c1 j1 C0 @
ANY 和SOME谓词是同义词,与比较运算符(=,<,>,<>,<=,>=)一起使用.返回一个布尔值True或 False.ANY的意思是,表达式与子查询返回的一系列的值逐一比较,只要其中的一次比较产生True结果,ANY测试的返回 True值(既Where子句的结果),对应于该表达式的当前记录将进入主查询的结果中.ALL测试则要求表达式与子查询返回的一系列的值的比较都产生 True结果,才回返回True值.& ~: S2 ?# z7 L8 ?# @
例:主查询返回单价比任何一个折扣大于等于25%的产品的单价要高的所有产品+ l3 h! W' I+ u; n, @' B$ G" I. V
Select * FROM Products0 N+ y0 u9 p+ B- i) \' S) [
Where UnitPrice>ANY
$ p; P* R+ D( q+ s6 G% q(Select UnitPrice FROM[Order Details] Where Discount>0.25)
5 N$ f: p3 `6 A, j2 检查表达式的值是否匹配子查询返回的一组值的某个值
7 L1 ]7 g8 d9 R$ E4 {* T5 q语法:: A1 D+ _" q! m
[NOT]IN(子查询)9 }& F. ^6 V! {1 `, t
例:返回库存价值大于等于1000的产品.
# M& r  O( N/ ?2 lSelect ProductName FROM Products
  i# X9 E! {3 s0 H( D. p2 Q3 XWhere ProductID IN
& ]% z, g2 _3 a$ `4 U' @/ p0 l(Select PrdoctID FROM [Order DEtails]
4 f& W6 _1 E- N2 YWhere UnitPrice*Quantity>= 1000)
/ q  }: m/ i( F' M: r# a" W3检测子查询是否返回任何记录
, m8 W" t8 M" N# X, Y语法:/ c" M6 U! j- j5 y- U4 W/ b" r/ ~
[NOT]EXISTS (子查询)+ x" O) \$ p& v( H# D# M: w2 [
例:用EXISTS检索英国的客户3 _" m( h3 Y+ b, b6 G' h1 }
Select ComPanyName,ContactName
2 G% v- O* O, s3 ?FROM orders5 `' k5 Q! g: Q7 v8 h* |
Where EXISTS
- O6 J8 k1 `2 G5 r7 ^(Select ** i: D$ Q5 z* S( [/ W
FROM Customers
" ~0 k$ P7 q! l4 ]% nWhere Country = ‘UK’ AND
7 \# y1 S4 X) C) f( I  i$ `/ gCustomers.CustomerID= orders.CustomerID)
您需要登录后才可以回帖 登录 | 注册


Archiver|航空论坛 ( 渝ICP备10008336号 )

GMT+8, 2025-11-27 02:00 , Processed in 0.026001 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部