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

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

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

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
发表于 2009-11-10 10:28:12 |只看该作者 |倒序浏览
Access如何筛选重复数据以及Select语句的完整语法( v) E; K6 ^! u6 f
) O9 K. X5 @) ^5 R0 N! g: |- q" K
select distinct 字段 from 表名' \  Z( ]: x- y+ H, j; A
distinct会筛选出不同的记录,也就是说相同内容的那个字段只会取一条。- A& t7 H  l$ Z6 D. R
一.Select语句的完整语法为:
8 a: F, w% v" _" I0 ^Select[ALL|DISTINCT|DISTINCTROW|TOP]% E" l& z: T0 z% n* n) y4 n
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}) c2 c6 n  ?+ f/ g- @0 T
FROM tablee xpression[,…][IN externaldatabase]
1 n- r8 t# k# @1 @! H0 `: g: c[Where…]
; {2 e/ b, F$ c, D1 M+ E[GROUP BY…]
: [/ }: p+ z. r1 e+ @; R[HAVING…]  p" h# w9 C0 {) V( X; D
[ORDER BY…]
+ F* g1 g4 O+ i- |- {0 q7 R; K[WITH OWNERACCESS OPTION]
% n3 e" Y* z, O- g# x4 ]6 e0 n& _/ v说明:+ T8 N- ?4 N+ V3 ^4 _" h
用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须从中选择其中的一个。
0 d4 Z% k* z$ Z0 F9 {) A5 d) \1 FROM子句
9 ~  _! ~" k# v/ E) QFROM 子句指定了Select语句中字段的来源。FROM子句后面是包含一个或多个的表达式(由逗号分开),其中的表达式可为单一表名称、已保存的查询或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 得到的复合结果。如果表或查询存储在外部数据库,在IN 子句之后指明其完整路径。  U4 e; q5 X, d$ Y% ^  ^* y
例:下列SQL语句返回所有有定单的客户:( y. [7 v3 Y! M' S2 `" w
Select orderID,Customer.customerID
; q* t0 C+ [, Y" XFROM orders Customers
' ]/ J7 q" S4 Y4 D6 h- ]Where orders.CustomerID=Customers.CustomeersID
) N' d# |2 ?( w/ E8 s" G6 x5 o' u2 ALL、DISTINCT、DISTINCTROW、TOP谓词% j! H! o/ e7 @0 o9 G
(1) ALL 返回满足SQL语句条件的所有记录。如果没有指明这个谓词,默认为ALL。* [; x3 }4 q. q/ L8 i
例:Select ALL FirstName,LastName
- z6 p7 g( n& ~+ g, s3 \! @7 b: `FROM Employees
6 d/ S0 B" W1 m) y(2) DISTINCT 如果有多个记录的选择字段的数据相同,只返回一个。0 e  y  B( T" `3 _. S+ c% E
(3) DISTINCTROW 如果有重复的记录,只返回一个
& o: _9 \0 U# k3 J(4) TOP显示查询头尾若干记录。也可返回记录的百分比,这是要用 TOP N PERCENT子句(其中N 表示百分比)$ _4 J7 N: E" A+ [( F- h
例:返回5%定货额最大的定单8 Z& {0 i$ n; i: _0 c( |: `$ b
Select TOP 5 PERCENT*: S; E$ S. e4 k, K1 o- i
FROM [ order Details]. U, L. [7 K3 k3 f$ g! _* ^( y2 P$ q
orDER BY UnitPrice*Quantity*(1-Discount) DESC4 I8 t& N' ~- Y' ]5 A$ P
3 用 AS 子句为字段取别名
% v& h1 p# J4 c如果想为返回的列取一个新的标题,或者,经过对字段的计算或总结之后,产生了一个新的值,希望把它放到一个新的列里显示,则用AS保留。
$ ^: O$ j* ]" u+ y9 S& h; O6 @9 o- y+ h例:返回FirstName字段取别名为NickName
' b' y* W7 e& ESelect FirstName AS NickName ,LastName ,City
$ ^+ G  S/ U  ]6 Y' pFROM Employees$ i8 [! i, f7 P
例:返回新的一列显示库存价值
# L; d* ^3 \  [7 n; \Select ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock$ z( G) Q1 V7 j' {5 G3 {: l
FROM Products
6 D+ ~& o' a/ ~3 M: u4 \/ F2 B; F二 .Where 子句指定查询条件
: j, Z/ ]7 k. P% S4 e* F1 比较运算符
) y6 `7 ^, h$ `/ G. w# P比较运算符 含义' X; ]7 d0 q% H5 D
= 等于( E( y0 x1 `/ W8 A- ?
> 大于8 ^, `' g2 V; K- d" V) z" O! K0 @+ w) F
< 小于
' t, g$ D# x3 p% L6 O>= 大于等于
( b! V$ L! l: L, h1 m6 I  y/ x<= 小于等于
; h, S2 B' |* ^1 z2 o$ g, W<> 不等于0 Y# E; P2 q9 i6 n* W+ f- t
!> 不大于
1 P& I4 ?# H& D# M$ H!< 不小于2 o) E2 W; t* [& }( Y5 K
例:返回96年1月的定单
: p* P/ Q! A3 d1 ESelect orderID, CustomerID, orderDate' C$ g; L7 ]" j
FROM orders
$ s! Y4 u+ F) K3 sWhere orderDate>#1/1/96# AND orderDate<#1/30/96#
! M) s9 H' s. y4 p, o, E( t注意:, E  w2 y# e8 }* ^. y9 Y
Mcirosoft JET SQL 中,日期用‘#’定界。日期也可以用Datevalue()函数来代替。在比较字符型的数据时,要加上单引号’’,尾空格在比较中被忽略。0 x8 P8 M) R' c3 @
例:) O$ {% {) O5 G% S) K
Where orderDate>#96-1-1#
0 x. @. Q5 `$ W. s也可以表示为:$ l4 X4 P. t  G' P3 s# M
Where orderDate>Datevalue(‘1/1/96’)
8 p% ?3 K( Q' R: K1 w& C使用 NOT 表达式求反。" S, @2 H) R8 S$ L: |7 r( F
例:查看96年1月1日以后的定单
5 [  x: F. C; k% m2 Q9 tWhere Not orderDate<=#1/1/96#
! l8 M. b3 Z! V2 范围(BETWEEN 和 NOT BETWEEN)
6 v0 O7 e  z: f3 jBETWEEN …AND…运算符指定了要搜索的一个闭区间。
( |/ E+ _' V2 X5 o" @' F例:返回96年1月到96年2月的定单。$ V& ]7 p7 h5 e. T* n/ q  C9 B
Where orderDate Between #1/1/96# And #2/1/96#
5 ]" ?# t: t( ]3 i) J! b3 列表(IN ,NOT IN)0 y$ y- n7 G+ Z! P
IN 运算符用来匹配列表中的任何一个值。IN子句可以代替用OR子句连接的一连串的条件。0 Z9 ?2 x, o8 y0 u% P
例:要找出住在 London、Paris或Berlin的所有客户
" k, V( C1 S0 J5 }, ~7 I1 ]Select CustomerID, CompanyName, ContactName, City
& q& F) }% O8 aFROM Customers6 M9 R' O( F! W- A5 ~
Where City In(‘London’,’ Paris’,’ Berlin’)+ V5 Y; K! W$ a' p3 r
4 模式匹配(LIKE)
. G7 c3 \1 P; b/ JLIKE运算符检验一个包含字符串数据的字段值是否匹配一指定模式。
. ]1 K+ ?* N! X* \: \LIKE运算符里使用的通配符9 J, |6 R" h4 U2 Z0 i( P; ^) p
通配符 含义
! z; f) t( Z9 v8 g9 n? 任何一个单一的字符! `' U1 B: E- z8 b: Z% L
* 任意长度的字符3 }# e% r* @9 W
# 0~9之间的单一数字# R( f2 l; R* v3 S% u( n) ]" ?
[字符列表] 在字符列表里的任一值$ B) @: \$ W6 |
[!字符列表] 不在字符列表里的任一值
% v. }2 ~8 O* Q, j  Q% b% S1 ?- 指定字符范围,两边的值分别为其上下限
$ M( P( T4 Z0 q( K& _2 I" R' P2 ?例:返回邮政编码在(171)555-0000到(171)555-9999之间的客户
! u4 g/ T7 t( y9 b( \4 I( r! N+ @( OSelect CustomerID ,CompanyName,City,Phone
- I* ?7 k$ e3 t" [/ t0 FFROM Customers
; \' ^- x$ U" ?$ d% oWhere Phone Like ‘(171)555-####’# C* D5 e: {% I$ |2 `. R4 c
LIKE运算符的一些样式及含义7 l: u2 J1 x7 j: N1 N8 z* |
样式 含义 不符合+ \- q5 a1 g2 d5 W
LIKE ‘A*’ A后跟任意长度的字符 Bc,c255
: ], z5 @$ R, X) D3 Y- J, S# LIKE’5’ 5*5 555; T4 d0 g/ B3 J
LIKE’5?5’ 5与5之间有任意一个字符 55,5wer5$ s. P4 Y( m; v/ A0 E$ r
LIKE’5##5’ 5235,5005 5kd5,5346
; }+ W/ G6 Q# J- k" P8 }: kLIKE’
) A6 k8 t/ K  n' ^* ~/ `[a-z]’ a-z间的任意一个字符 5,%
, [' R3 F" ?0 `) N" G3 r, FLIKE’[!0-9]’ 非0-9间的任意一个字符 0,1) B! y( P5 P! F
LIKE’[[]’ 1,*5 r3 ^5 {6 r$ }+ a( P: [
三 .用ORDER BY子句排序结果
- u- u3 U4 p5 v( h- S/ b0 horDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。
& \& ~4 c& i( P5 F! ^% F: d; J2 @0 eorDER子句中定义了多个字段,则按照字段的先后顺序排序。$ N4 B* ?/ o; Z7 i! y
例:
5 U. r+ q8 A+ L+ D4 W* j8 gSelect ProductName,UnitPrice, UnitInStock
2 k- U6 R/ D' P/ `, n5 i( L0 ~FROM Products
# G  ?: k$ M* @1 w1 y: NorDER BY UnitInStock DESC , UnitPrice DESC, ProductName: q; W" U/ U5 O9 M8 n( m
orDER BY 子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位置号。
7 v' {' V; n% V' F! W例:下面的语句产生与上列相同的效果。( c% D" a- J7 M3 I: b7 h4 p
Select ProductName,UnitPrice, UnitInStock* }3 Y; {3 v3 I7 k
FROM Products
6 o" N- t# z( D: _/ MorDER BY 1 DESC , 2 DESC,3
) X( c6 l9 H; H) F四 .运用连接关系实现多表查询
5 o2 f1 z( B+ }. b) T例:找出同一个城市中供应商和客户的名字& J0 O7 c& s0 r& E) S  ?
Select Customers.CompanyName, Suppliers.ComPany.Name+ {, x: x  y& o; ~# V) b% K! M1 |  X: q
FROM Customers, Suppliers
  f3 O: t- y: ?  J, aWhere Customers.City=Suppliers.City
% |# a5 F# f# s4 R9 O3 h例:找出产品库存量大于同一种产品的定单的数量的产品和定单
" w' K6 v3 J1 _5 qSelect ProductName,OrderID, UnitInStock, Quantity& p/ Z" ~2 t1 ]6 Z" [( G& ^  ?; }7 j
FROM Products, [Order Deails]
; j3 u! h" T- X/ V, zWhere Product.productID=[Order Details].ProductID
( b* t- Q' T) p& S! ^$ j( \+ m- cAND UnitsInStock>Quantity2 Y! P9 M7 ?7 D
另一种方法是用 Microsof JET SQL 独有的 JNNER JOIN+ h, d4 o7 H, `. R2 T- R- F0 U
语法:4 [+ O( n+ ~# Z
FROM table1 INNER JOIN table2# }4 }, C3 R* a% \( S
ON table1.field1 comparision table2.field23 V6 ?6 _7 I5 _/ p
其中comparision 就是前面Where子句用到的比较运算符。
, k, I  y% _' C1 u! q: ^3 N% xSelect FirstName,lastName,OrderID,CustomerID,OrderDate
% K5 b  p* A6 V" h; PFROM Employees
( y: F" y6 J/ eINNER JOIN orders ON Employees.EmployeeID=Orders.EmployeeID/ H% c1 t4 j( g
注意:: z* L( T9 R0 b6 D. [7 ?
INNER JOIN不能连接Memo OLE Object Single Double 数据类型字段。: ~: O& t! b3 m
在一个JOIN语句中连接多个ON子句0 ^  v+ `$ P7 w3 i
语法:( z% H8 f& ]$ W7 c0 N  M
Select fields
2 ^! t# `: B! fFROM table1 INNER JOIN table2' F$ J5 b$ e) K2 s7 m
ON table1.field1 compopr table2.field1 AND
, c6 t' s& s: CON table1.field2 compopr table2.field2 or& P( C. E7 r8 t
ON table1.field3 compopr table2.field3
- Q/ t" e9 `4 ~$ M7 V2 D也可以$ a8 T0 b8 K' I
Select fields# _1 E; {1 _& j, a0 H7 n
FROM table1 INNER JOIN/ z0 y! J" Y# W, k* x
(table2 INNER JOIN [( ]table3
# l4 _! |& Q( b. Q- m7 \5 r2 _[INNER JOER] [( ]tablex[INNER JOIN]
5 B& x3 V( R. ~+ K: [5 v3 JON table1.field1 compopr table2.field1
4 {  @( @. a  l( p5 r; |ON table1.field2 compopr table2.field22 J  h8 d% ~/ P0 x- M* {# }7 {
ON table1.field3 compopr table2.field3
' d3 @4 A! P5 r% ]( J: Y9 |0 ?0 V外部连接返回更多记录,在结果中保留不匹配的记录,不管存不存在满足条件的记录都要返回另一侧的所有记录。7 N7 d# Y: m1 l
FROM table [LEFT|RIGHT]JOIN table2
" j. n+ T, Q, H; m) I9 L$ XON table1.field1comparision table.field24 t6 V9 b/ W: L' y, s4 h
用左连接来建立外部连接,在表达式的左边的表会显示其所有的数据
% u1 O- J- x# f5 z, i, I  X: [例:不管有没有定货量,返回所有商品
! R2 _/ X: A4 B  rSelect ProductName ,OrderID
; w+ {* R* B; C4 R2 PFROM Products
% f. a3 q. u+ G& {5 c  |LEFT JOIN orders ON Products.PrductsID=Orders.ProductID8 ^0 [& B& u( C. n6 N
右连接与左连接的差别在于:不管左侧表里有没有匹配的记录,它都从左侧表中返回所有记录。2 {& V8 h( p7 l* O
例:如果想了解客户的信息,并统计各个地区的客户分布,这时可以用一个右连接,即使某个地区没有客户,也要返回客户信息。
2 V+ f. ^# w7 a空值不会相互匹配,可以通过外连接才能测试被连接的某个表的字段是否有空值。
  v- j# C5 {4 x! c. _Select *
2 p  e9 ~( r; V3 p$ t* Q- IFROM talbe1# T6 R5 \0 h6 Y# N
LEFT JOIN table2 ON table1.a=table2.c6 t3 p7 n) `! M: r( f) A; \
1 连接查询中使用Iif函数实现以0值显示空值
+ n7 H+ U9 E, uIif表达式: Iif(IsNull(Amount,0,Amout)% R% S, j. h$ l! V1 o0 R9 J
例:无论定货大于或小于¥50,都要返回一个标志。
1 @, w  b* R7 V" k9 d1 W; VIif([Amount]>50,?Big order?,?Small order?)
9 n3 V+ S( Y7 `/ W五. 分组和总结查询结果  G" e- S+ W- T% [
在SQL的语法里,GROUP BY和HAVING子句用来对数据进行汇总。GROUP BY子句指明了按照哪几个字段来分组,而将记录分组后,用HAVING子句过滤这些记录。
: R0 k2 D* F, z- j  ]/ ?, PGROUP BY 子句的语法: |$ [, n  U5 X
Select fidldlist
1 c* G8 C) P0 O  dFROM table' h. O- F1 n* J& `
Where criteria
6 r7 _5 D9 f7 p1 N0 F6 u' S* H: e  C[GROUP BY groupfieldlist [HAVING groupcriteria]]
3 C5 ^6 [# o* T+ D! Y1 ~注:Microsoft Jet数据库 Jet 不能对备注或OLE对象字段分组。
/ E. N: S: ^/ C. p5 }! JGROUP BY字段中的Null值以备分组但是不能被省略。
/ D/ S2 i( g# v( r2 t6 b) y在任何SQL合计函数中不计算Null值。
. r1 R/ ^5 `0 }2 @6 s; \GROUP BY子句后最多可以带有十个字段,排序优先级按从左到右的顺序排列。) U7 u- v/ v- U4 G8 s7 `, j
例:在‘WA’地区的雇员表中按头衔分组后,找出具有同等头衔的雇员数目大于1人的所有头衔。) e; v0 A- Q) z. }: H
Select Title ,Count(Title) as Total9 S' E  t9 V( |" ^$ B4 N) Y
FROM Employees
4 ]- X( n3 m0 _- h/ S, YWhere Region = ‘WA’+ _- `" q4 o7 x8 l
GROUP BY Title
8 N, E) U* `6 NHAVING Count(Title)>1  M! F7 |, T7 V
JET SQL 中的聚积函数
1 U6 }0 S6 Q; ?4 J* Z8 t/ o9 v聚集函数 意义# X1 E7 B0 R5 }* E$ P+ k
SUM ( ) 求和
# G( \4 h: h. S6 RAVG ( ) 平均值
2 p( h9 ?  Y( a8 WCOUNT ( ) 表达式中记录的数目& G9 C: K- `/ O9 j
COUNT (* ) 计算记录的数目
: _: Y. P' v: |* \MAX 最大值
5 H' H( q: ]5 k& eMIN 最小值; L, Q& |7 m. J7 A& s
VAR 方差
# l8 E( {/ L. m' Y7 j* }9 N( pSTDEV 标准误差
5 Y- v8 u4 u8 F$ e) G2 nFIRST 第一个值; f+ \& W. m5 ^* R( P5 Q8 u2 C$ @; s! S
LAST 最后一个值6 E# D$ z( H2 L' I9 x! C6 m8 o$ _/ F
六. 用Parameters声明创建参数查询
! {1 p  F; q+ m. H# |Parameters声明的语法:
+ X1 |9 i6 L$ T7 GPARAMETERS name datatype[,name datatype[, …]]3 b- I- K5 {. Q1 d: Q
其中name 是参数的标志符,可以通过标志符引用参数.$ K; j; m) g2 q$ h2 U
Datatype说明参数的数据类型.
5 O8 |1 E0 n  }使用时要把PARAMETERS 声明置于任何其他语句之前.1 H" M( f* R* p4 D/ T. a- ]
例:+ Z. I' r! B: }) }2 d
PARAMETERS[Low price] Currency,[Beginning date]datatime
) y1 g3 {  T  J5 @4 ~! q9 LSelect orderID ,OrderAmount+ i2 F2 s1 [% w, @/ k
FROM orders7 y0 I: g+ j  T
Where orderAMount>[low price]
& `1 p4 K) y; T9 h- lAND orderDate>=[Beginning date]
5 ]0 p" o$ V) i' K七. 功能查询- t5 |" k6 L- p) d9 q1 o, |6 D
所谓功能查询,实际上是一种操作查询,它可以对数据库进行快速高效的操作.它以选择查询为目的,挑选出符合条件的数据,再对数据进行批处理.功能查询包括更新查询,删除查询,添加查询,和生成表查询.
/ i: `$ c  o/ ~. R) C: P1 更新查询) O9 P- r% G3 W) e$ m' ]7 @
Update子句可以同时更改一个或多个表中的数据.它也可以同时更改多个字段的值.
$ C+ Y1 T7 n% F更新查询语法:
' s2 g  s4 k7 t+ Q* B: q& d9 dUpdate 表名; h" g7 e- r# o1 U7 q/ R* P5 A
SET 新值+ @: w7 M7 l6 J  q$ P
Where 准则
; t+ i0 M  M0 P2 x例:英国客户的定货量增加5%,货运量增加3%; ]+ t8 j/ ^# K
Update OEDERS
6 S1 Y8 m5 k$ {+ V: uSET orderAmount = orderAmount *1.12 ^9 ^( @+ d' L% k: l
Freight = Freight*1.03
5 j! D2 W! i! U  l* e+ O  S# yWhere ShipCountry = ‘UK’
) G" }% f* c. S2 删除查询
6 I; U: }* ?5 i# ?. jDelete子句可以使用户删除大量的过时的或冗于的数据.
1 U2 k" j* Z/ A* x) W' A2 O注:删除查询的对象是整个记录.
% d/ U* A/ ^" a! t. GDelete子句的语法:* w, T' ?! f* |
Delete [表名.*]$ Q: {7 J# [$ q. H/ Z, x5 ]8 T+ B
FROM 来源表
: U+ g# l) M, K! |, YWhere 准则% Q4 ?! ?% d0 v5 H+ B7 r/ O* l- l
例: 要删除所有94年前的定单
' h- i6 f6 y8 H% P, H1 i/ gDelete */ M% b: f& c" L6 l, f# E- B# G2 ?
FROM orders
' J5 C" p3 ~) B9 h! k/ [; lWhere orderData<#94-1-1#: B( O3 m* g$ J6 C- J* V! B
3 追加查询6 g8 l# C5 H% n! ^' [( v
Insert子句可以将一个或一组记录追加到一个或多个表的尾部.$ T: ?1 E$ [" x$ a- l) o
INTO 子句指定接受新记录的表7 `; H3 i# w  w
valueS 关键字指定新记录所包含的数据值.9 T4 i( _0 v  x: f0 D
Insert 子句的语法:0 U$ r8 _' E$ |# f  |) {
INSETR INTO 目的表或查询(字段1,字段2,…)+ A8 f, g9 F, N& p6 V. I  T  ~6 h
valueS(数值1,数值2,…)+ n2 |6 a. N; i& _% N# C- g" D7 A
例:增加一个客户
( ^4 Y% T* _* c+ R- YInsert INTO Employees(FirstName,LastName,title)
6 y. l! T2 D% t& i7 VvalueS(‘Harry’,’Washington’,’Trainee’)
3 m4 r$ V( [. E4 生成表查询
+ p) K: R# G; N可以一次性地把所有满足条件的记录拷贝到一张新表中.通常制作记录的备份或副本或作为报表的基础.( s% _; _3 ^9 q+ ?
Select INTO子句用来创建生成表查询语法:
3 {7 Z. F5 G6 o. g, DSelect 字段1,字段2,…
5 h( n8 ]9 |9 K9 L3 j1 x( wINTO 新表[IN 外部数据库]5 o4 ], Y- ^7 X' \  a
FROM 来源数据库
$ ^$ X( z, ?6 MWhere 准则
; v- s7 _7 A" N& K$ a例:为定单制作一个存档备份6 @+ M  T: N  t# x( b
Select *5 P. w' _% Z% t2 j. N7 @0 m
INTO ordersArchive5 v+ b  `+ T% z, a6 z. E
FROM orders2 ~5 [5 u5 F9 i8 U
八. 联合查询
0 b- q5 t1 z& e7 l3 Q; K  ]+ MUNION运算可以把多个查询的结果合并到一个结果集里显示.
9 z1 o  w6 c4 \7 ZUNION运算的一般语法:5 U8 ^8 u/ \: V" N( D- e( v0 N8 g
[表]查询1 UNION [ALL]查询2 UNION …
8 {1 H6 ^- J  v" P0 s% _) ~5 r例:返回巴西所有供给商和客户的名字和城市" k2 X1 n( O7 d; M, g5 k& V' A# l
Select CompanyName,City9 {$ k9 K% F% J4 a
FROM Suppliers# F6 N: k3 `+ c( w
Where Country = ‘Brazil’
4 E) M3 X! O/ z1 T) P1 q% wUNION% ^! u4 E5 S3 o# E# w
Select CompanyName,City. C: I8 N4 Z9 y* ~) z# \/ k
FROM Customers
$ Y9 U( T. }7 c# P$ `Where Country = ‘Brazil’& n1 r" D7 ~2 H) g/ g& a) ~0 @, C
注:
/ [0 g3 f9 {( G- k/ B# M2 E缺省的情况下,UNION子句不返回重复的记录.如果想显示所有记录,可以加ALL选项
* V" m# g; u% d5 H6 n4 a4 x  n/ yUNION运算要求查询具有相同数目的字段.但是,字段数据类型不必相同.- H& l& K. P# l1 l
每一个查询参数中可以使用GROUP BY 子句 或 HAVING 子句进行分组.要想以指定的顺序来显示返回的数据,可以在最后一个查询的尾部使用OREER BY子句.
4 j1 B8 w3 N+ [( o! {九. 交叉查询
, X1 ?9 A4 E& C. i' V0 r; _. Q交叉查询可以对数据进行总和,平均,计数或其他总和计算法的计算,这些数据通过两种信息进行分组:一个显示在表的左部,另一个显示在表的顶部.0 o# W, [+ A  T8 Z3 A
Microsoft Jet SQL 用TRANSFROM语句创建交叉表查询语法:
! C1 A( D8 Y( L1 `2 J. gTRANSFORM aggfunction
" M7 h" Y+ n9 C& H, BSelect 语句
2 P! d, D- I: Q" L- ^, ^GROUP BY 子句' e: n. e( Z) d$ ~& d
PIVOT pivotfield[IN(value1 [,value2[,…]]) ]0 x: Z  [& l* @* |
Aggfounction指SQL聚积函数,6 q% Q7 ]2 g3 c
Select语句选择作为标题的的字段,$ y1 K2 m3 F+ z* B' }6 w7 B
GROUP BY 分组
) F; j) V: g% A& @. F8 K) i. A说明:1 y, Y0 d/ ^, y0 Z! o: V
Pivotfield 在查询结果集中创建列标题时用的字段或表达式,用可选的IN子句限制它的取值.+ d, h2 X8 G$ h& l$ M
value代表创建列标题的固定值.! v' S' L. o% k& ]0 W2 F4 c4 u6 H
例:显示在1996年里每一季度每一位员工所接的定单的数目:
# d4 L  c# K( ~, TTRANSFORM Count(OrderID)! v- L/ [: u. f" I5 d
Select FirstName&’’&LastName AS FullName
) U) l1 w0 |! k- D9 ]- |$ F$ xFROM Employees INNER JOIN orders- q& _' l" g, Y5 V! l
ON Employees.EmployeeID = orders.EmployeeID0 R4 }+ s/ g( g2 x
Where DatePart(“yyyy”,OrderDate)= ‘1996’5 f+ [6 x5 i/ @+ C# {0 o: Q: ~
GROUP BY FirstName&’’&LastName. H/ r/ P# {9 m* a) d  f0 s
orDER BY FirstName&’’&LastName2 O2 B! ?7 D' t
POVOT DatePart(“q”,OrderDate)&’季度’  i, P; P# J7 ]0 O, J, @
十 .子查询; o5 C& p7 }9 H
子查询可以理解为 套查询.子查询是一个Select语句.% ?$ P* D: m# b/ R( s2 v% q- ~
1 表达式的值与子查询返回的单一值做比较
2 B1 |* @0 d# y  N: |* k4 d1 D" K1 Z9 k语法:
, _  O. O2 U; Z; f, X$ _表达式 comparision [ANY|ALL|SOME](子查询)
! t& r0 W2 H: U# L9 m7 x说明:2 X" e1 P5 M: T+ G
ANY 和SOME谓词是同义词,与比较运算符(=,<,>,<>,<=,>=)一起使用.返回一个布尔值True或 False.ANY的意思是,表达式与子查询返回的一系列的值逐一比较,只要其中的一次比较产生True结果,ANY测试的返回 True值(既Where子句的结果),对应于该表达式的当前记录将进入主查询的结果中.ALL测试则要求表达式与子查询返回的一系列的值的比较都产生 True结果,才回返回True值." |  I+ L* c2 s0 S. Z" D
例:主查询返回单价比任何一个折扣大于等于25%的产品的单价要高的所有产品- E" M5 E& M/ n- c, E3 {6 Q
Select * FROM Products
7 L" }" p8 n4 J, U& [$ k# @Where UnitPrice>ANY
% B6 e. U; p! E3 u& x(Select UnitPrice FROM[Order Details] Where Discount>0.25)
6 u7 ]  j9 y- T' f* q2 检查表达式的值是否匹配子查询返回的一组值的某个值
. z8 A# Y) b0 U9 K+ r5 e0 X6 T语法:
+ z9 q+ l/ n8 x% ^: x[NOT]IN(子查询)8 }6 D6 R% }+ [5 h% b2 j7 ~  O
例:返回库存价值大于等于1000的产品.
) N, \. ^0 Q; ~2 VSelect ProductName FROM Products
8 ^. _3 m0 n$ P! }6 v$ J+ B$ I* v- WWhere ProductID IN" g) @+ A! b- B4 q! q9 f
(Select PrdoctID FROM [Order DEtails]& I0 I% x: v4 ~6 A
Where UnitPrice*Quantity>= 1000)
7 k  x' ^) i7 n% l: D' V) a- l9 f3检测子查询是否返回任何记录9 U* q, E, E9 L( z
语法:+ \2 C/ ^8 _3 v7 k2 H
[NOT]EXISTS (子查询)7 J; C  f- A$ U$ }
例:用EXISTS检索英国的客户9 C* E4 f8 d4 W4 l
Select ComPanyName,ContactName& c: Z; E1 w$ k" j
FROM orders3 S, m+ {% W, K; t6 s/ f
Where EXISTS" `5 \/ d. }5 I% W
(Select *
4 A/ C$ X! _; xFROM Customers9 J* [3 z  C) m# ]0 f
Where Country = ‘UK’ AND
% g: {& e( v- t( E: t: o! L: t1 OCustomers.CustomerID= orders.CustomerID)
您需要登录后才可以回帖 登录 | 注册


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

GMT+8, 2025-6-17 16:46 , Processed in 0.026002 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 MinHang.CC.

回顶部