ACCESS数据库常用SQL语句.docx
《ACCESS数据库常用SQL语句.docx》由会员分享,可在线阅读,更多相关《ACCESS数据库常用SQL语句.docx(45页珍藏版)》请在冰豆网上搜索。
ACCESS数据库常用SQL语句
SELECT语句
指示MicrosoftJet数据库引擎从数据库返回一组记录信息。
语法
SELECT[predicate]{*|table.*|[table.]field1[ASalias1][,[table.]field2[ASalias2][,...]]}
FROMtableexpression[,...][INexternaldatabase]
[WHERE...]
[GROUPBY...]
[HAVING...]
[ORDERBY...]
[WITHOWNERACCESSOPTION]
SELECT语句包含以下部分:
部分
说明
predicate
这些谓词之一:
ALL、DISTINCT、DISTINCTROW或TOP。
可以使用谓词来限定返回记录的数量。
如果没有指定谓词,默认值为ALL。
*
指定选择所指定的表的所有字段。
table
表的名称,该表包含了其记录被选择的字段。
field1,field2
字段名,这些字段包含了要检索的数据。
如果包括多个字段,将按它们的排列顺序对其进行检索。
alias1,alias2
用作列标题的名称,不是table中的原始列名。
tableexpression
其中包含要检索的数据的表的名称。
externaldatabase
如果tableexpression中的表不在当前数据库中,则使用该参数指定该数据库名。
说明
若要执行此项操作,Microsoft®Jet数据库引擎会搜索指定的表,并提取出选定的列,再选择出符合条件的列,然后按指定的顺序对得到的行进行排序或分组。
SELECT语句不会更改数据库中的数据。
SELECT通常是SQL语句中的第一个词。
大多数SQL语句是SELECT或SELECT...INTO语句。
SELECT语句最简化的语法为:
SELECTfieldsFROMtable
可以通过星号(*)来选择表中所有的字段。
以下的示例选择在Employees表中的所有字段:
SELECT*FROMEmployees;
如果一个字段名包括于FROM子句内的多个表中,请在该字段前面加上表名和.(圆点)号。
在下面的示例中,Department字段同时存在于Employees表和Supervisors表中。
SQL语句从Employees表中选择出部门并从Supervisors表中选择出主管名:
SELECT,
FROMEmployeesINNERJOINSupervisors
WHERE=;
创建Recordset对象时,MicrosoftJet数据库引擎将使用表的字段名作为Recordset对象中的Field对象名。
如果需要一个不同的字段名或者名称不适合用来生成该字段的表达式,请使用AS保留字。
下面的示例使用标题Birth来命名在所得到的Recordset对象中的返回Field对象:
SELECTBirthDate
ASBirthFROMEmployees;
只要使用的聚合函数或查询返回的是不明确的或重复的Field对象名称,就必须使用AS子句为该Field对象另外提供一个替代名称。
下面的示例使用标题HeadCount来命名在结果Recordset对象中的返回Field对象:
SELECTCOUNT(EmployeeID)
ASHeadCountFROMEmployees;
可以在SELECT语句中使用其他子句进一步约束和组织所返回的数据。
有关详细信息,请参阅相应子句的帮助主题。
请参阅
ALLDISTINCT、DISTINCTROW、TOP谓词
ORDERBY子句(MicrosoftJetSQL)
DELETE语句
SELECT...INTO语句
FROM子句
SQL聚合函数
GROUPBY子句
UNION操作
HAVING子句
UPDATE语句
IN子句
WHERE子句
INSERTINTO语句
WITHOWNERACCESSOPTION声明
ALL、DISTINCT、DISTINCTROW、TOP谓词
指定使用SQL查询选择的记录。
语法
SELECT[ALL|DISTINCT|DISTINCTROW|[TOPn[PERCENT]]]
FROMtable
一个包含这些谓词的SELECT语句具有以下部分:
部分
说明
ALL
作为不包括谓词处理。
MicrosoftJet数据库引擎会选择符合SQL语句中的条件的所有记录。
以下两个示例是等价的,它们都返回Employees表中的所有记录:
SELECTALL*
FROMEmployees
ORDERBYEmployeeID;
SELECT*
FROMEmployees
ORDERBYEmployeeID;
DISTINCT
忽略在选定字段中包含重复数据的记录。
若要包括在查询的结果中,在SELECT语句中所列出的每个字段的值必须是唯一的。
例如,Employees表中列出的一些雇员可能有相同的名字(LastName)。
如果在LastName字段中有两个包含Smith的记录,则下面的SQL语句只返回一个包含Smith的记录:
SELECTDISTINCT
LastName
FROMEmployees;
如果忽略了DISTINCT,这个查询将返回两个Smith记录。
如果SELECT子句包含多个字段,若要在结果中包含给定的记录,那么所有字段的值的组合必须是唯一的。
使用DISTINCT查询的输出结果是不可更新的,它不会影响其他用户所做的后续更改。
DISTINCTROW
忽略整个重复记录的数据,而不仅仅是重复的字段。
例如,创建一个联接顾客表和订单表的CustomerID字段的查询。
顾客表不包含重复的CustomerID字段,但是订单表包含重复的CustomerID字段,因为每一个顾客可以有多个订单。
下面的SQL语句显示了如何使用DISTINCTROW产生一个至少有一个订单但没有这些订单任何细节的公司列表:
SELECTDISTINCTROWCompanyName
FROMCustomersINNERJOINOrders
ON=
ORDERBYCompanyName;
如果忽略了DISTINCTROW,对于每个有多个订单的公司这个查询语句将得到多个行。
DISTINCTROW仅在选择的字段源于查询中所使用的表的一部分而不是全部时才会生效。
如果查询仅包含一个表或者要从所有的表中输出字段,DISTINCTROW就会被忽略。
TOPn[PERCENT]
返回出现在由ORDERBY子句指定的起始和结束范围内的一定数量的记录。
假定希望得到1994年级中前25名学生的名字:
SELECTTOP25
FirstName,LastName
FROMStudents
WHEREGraduationYear=1994
ORDERBYGradePointAverageDESC;
如果没有包含ORDERBY子句,查询将会从Students表中返回一个满足WHERE子句的包含25个记录的任意集合。
TOP谓词不会在两个相等的值中进行选择。
在上面的示例中,如果第25和第26名的年级平均分相同,那么查询将会返回26个记录。
也可以使用PERCENT保留字返回出现在ORDERBY子句指定的起始和结束范围内的某个百分比数量的记录。
假如,您希望返回该年级中最后名次的百分之十个学生,而不是前25名学生:
SELECTTOP10PERCENT
FirstName,LastName
FROMStudents
WHEREGraduationYear=1994
ORDERBYGradePointAverageASC;
ASC谓词指定返回最小值。
TOP之后的值必须是一个无符号整数。
TOP谓词不影响查询是否可更新。
table
从中检索记录的表名。
FROM子句
指定其中包含SELECT语句中所列字段的表或查询。
语法
SELECTfieldlist
FROMtableexpression[INexternaldatabase]
包含FROM子句的SELECT语句具有以下部分:
部分
说明
fieldlist
要检索的字段的名称以及任何字段名别名、SQL聚合函数、选择谓词(ALL、DISTINCT、DISTINCTROW或TOP)或其他SELECT语句选项。
tableexpression
用来标识从中检索数据的一个或多个表的表达式。
该表达式可以是单个表名、保存的查询名、或者是INNERJOIN、LEFTJOIN或者RIGHTJOIN产生的结果。
externaldatabase
包含tableexpression中的所有表的外部数据库的完整路径。
说明
FROM是必需的,并且在任何SELECT语句后面。
在tableexpression中表名称的顺序无关紧要。
为了提高性能和便于使用,建议您使用链接表而不是IN子句来从外部数据库中检索数据。
下例展示了怎样从Employees表中检索数据:
SELECTLastName,FirstName
FROMEmployees;
WHERE子句
指定FROM子句所列出的表中哪些记录会受SELECT、UPDATE或DELETE语句的影响。
语法
SELECTfieldlist
FROMtableexpression
WHEREcriteria
包含WHERE子句的SELECT语句具有以下部分:
部分
说明
fieldlist
任何要检索的字段的名称,以及任何字段名别名、SQL聚合函数、选择谓词(ALL、DISTINCT、DISTINCTROW或TOP)或其他SELECT语句选项。
tableexpression
将从中检索数据的表的名称。
criteria
表达式,记录必须满足该表达式才能包括在查询结果中。
说明
MicrosoftJet数据库引擎会选择出符合WHERE子句所列条件的记录。
如果没有指定WHERE子句,查询会返回表中的所有行。
如果在查询中指定了多个表并且不包含WHERE子句或JOIN子句,查询将会产生各个表的迪卡尔积。
WHERE是可选的,但包含它时,则应在FROM后面。
例如,可以选择销售部门中的所有雇员(WHEREDept='Sales')或年龄在18岁到30岁之间的顾客(WHEREAgeBetween18And30)。
如果没有使用JOIN子句来对多个表执行SQL联接操作,那么所返回的Recordset对象将是不可更新的。
WHERE和HAVING相似。
WHERE确定要选择哪些记录。
同样,一旦记录通过GROUPBY进行了分组,那么HAVING就确定将要显示哪些记录。
通过WHERE子句,可以删除不希望由GROUPBY子句分组的记录。
可以使用多种表达式来确定SQL语句要返回哪些记录。
例如,下面的SQL语句选择出薪金多于$21,000的所有雇员:
SELECTLastName,Salary
FROMEmployees
WHERESalary>21000;
WHERE子句能够包含最多40个由逻辑运算符(如And和Or)联接的表达式。
输入包含空格或符号的字段名时,请使用中括号([])把这个名称括起来。
例如,一个顾客信息表可能包含了特定顾客的信息:
SELECT[Customer’sFavoriteRestarant]
指定了criteria参数时,数据文字必须是美国格式,即使没有使用Microsoft®Jet数据库引擎的美国版本。
例如,对于May10,1996,在英国它记为10/5/96,而在美国它记为5/10/96。
请确保将数据文字放在数字符号(#)以内,如下例所示。
若要在英国数据库中查找出日期为May10,1996的记录,必须使用如下所式的SQL语句:
SELECT*
FROMOrders
WHEREShippedDate=#5/10/96#;
也可以使用DateValue函数,该函数可以感知由MicrosoftWindows建立的国际设置。
例如,用于美国数据库的代码是:
SELECT*
FROMOrders
WHEREShippedDate=DateValue('5/10/96');
用于英国数据库的代码是:
SELECT*
FROMOrders
WHEREShippedDate=DateValue('10/5/96');
注释 如果条件字符串所引用的列为GUID类型,那么该条件表达式使用的语法稍微有所不同:
WHEREReplicaID={GUID{AB-CDEF-ABCDEF}}
请确保包含如上所示的嵌套大括号和连字号。
IN子句
标识在任何能够由MicrosoftJet数据库引擎连接的外部数据库(如dBASE或Paradox数据库或外部Microsoft®Jet数据库)中的表。
语法
若要标识目标表:
[SELECT|INSERT]INTOdestinationIN
{path|["path""type"]|[""[type;DATABASE=path]]}
若要标识源表:
FROMtableexpressionIN
{path|["path""type"]|[""[type;DATABASE=path]]}
包含IN子句的SELECT语句具有以下部分:
部分
说明
destination
将在其中插入数据的外部表的名称。
tableexpression
将检索其中的数据的表的名称。
该参数可以是单个表名、存储查询或者从INNERJOIN、LEFTJOIN或RIGHTJOIN产生的组合结果。
path
包含table的目录或文件的完整路径。
type
用于创建table的数据库类型的名称(如果数据库不是MicrosoftJet数据库,例如dBASEIII、dBASEIV、Paradox或Paradox)。
说明
使用IN子句一次只能连接一个外部数据库。
某些情况下,path参数所引用的路径包含了数据库文件。
例如,当使用dBASE、MicrosoftFoxPro®或Paraox数据库表时,该path参数指定了包含.dbf或.db文件的目录。
表文件名来源于destination或tableexpression参数。
若要指定非MicrosoftJet数据库,请在名称的尾部追加一个分号(;),并用引号('')或("")将其括起来。
例如,'dBASEIV;'或"dBASEIV;"都是允许的。
还可以使用DATABASE保留字来指定外部数据库。
以下的各行指定了相同的表:
...FROMTableIN""[dBASEIV;DATABASE=C:
\DBASE\DATA\SALES;];
...FROMTableIN"C:
\DBASE\DATA\SALES""dBASEIV;"
注释
为了提高性能和易于使用,请使用链接表而不是IN。
还可以使用IN保留字作为表达式中的比较运算符。
ORDERBY子句
以升序或降序排列的方式对指定字段查询的返回记录进行排序。
语法
SELECTfieldlist
FROMtable
WHEREselectcriteria
[ORDERBYfield1[ASC|DESC][,field2[ASC|DESC]][,...]]]
包含ORDERBY子句的SELECT语句具有以下部分:
部分
说明
fieldlist
任何要检索的字段的名称,以及任何字段名别名、SQL聚合函数、选择谓词(ALL、DISTINCT、DISTINCTROW或TOP)或其他SELECT语句选项。
table
要从中检索记录的表的名称。
selectcriteria
选择条件。
如果语句中包含WHERE子句,则MicrosoftJet数据库引擎将会在对记录应用WHERE条件后排列所得到的值。
field1,field2
排序记录所依据的字段的名称。
说明
ORDERBY是可选的。
但是,如果希望按排序后的顺序显示数据,那么必须使用ORDERBY。
默认的排序顺序是升序(A到Z,0到9)。
以下的两个示例均以姓氏的顺序对雇员姓名进行排序:
SELECTLastName,FirstName
FROMEmployees
ORDERBYLastName;
SELECTLastName,FirstName
FROMEmployees
ORDERBYLastNameASC;
若要按降序排序(Z到A,9到0),请在每个希望以降序排序的字段后面添加DESC保留字。
以下的示例选择出薪金记录,并对它们进行降序排序:
SELECTLastName,Salary
FROMEmployees
ORDERBYSalaryDESC,LastName;
如果在ORDERBY子句中指定了包含备注或OLE对象数据的字段,将出现错误。
MicrosoftJet数据库引擎不能按这些类型的字段排序。
ORDERBY通常是SQL语句中的最后一项。
可以在ORDERBY子句中包含其他字段。
将首先按ORDERBY后面列出的第一个字段对记录进行排序。
然后,在该字段中具有相同值的记录按照所列出的第二个字段的值进行排序。
这样一直进行下去。
GROUPBY子句
将特定字段列表中相同的记录组合成单个记录。
如果在SELECT语句中包含SQL聚合函数(如Sum或Count),那么将为每条记录创建一个摘要值。
语法
SELECTfieldlist
FROMtable
WHEREcriteria
[GROUPBYgroupfieldlist]
包含了GROUPBY子句的SELECT语句具有以下部分:
部分
说明
fieldlist
任何要检索的字段的名称,以及任何字段名别名、SQL聚合函数、选择谓词(ALL、DISTINCT、DISTINCTROW或TOP)或其他SELECT语句选项。
table
要从中检索记录的表的名称。
criteria
选择条件。
如果语句包含WHERE子句,那么MicrosoftJet数据库引擎将在对记录应用WHERE条件后对值进行分组。
groupfieldlist
最多10个用于分组记录的字段的名称。
groupfieldlist中的字段名称的顺序决定了从最高到最低分组级别方法的分组级别。
说明
GROUPBY是可选的。
如果在SELECT语句中没有SQL聚合函数,将省略汇总值。
在GROUPBY字段中的Null值会被分组,不会被忽略。
但是,任何SQL聚合函数都不会计算Null。
通过WHERE子句可以排除不需要参加分组的行,通过HAVING子句可以过滤已经分组的记录。
除非包含备注或OLE对象数据,否则,GROUPBY字段列表中的字段可以引用任何FROM子句中所列表中的任何字段,即使该字段并不包含在SELECT语句中(假设SELECT语句至少包含了一个SQL聚合函数)。
Microsoft®Jet数据库引擎不能对备注或OLE对象字段进行分组。
在SELECT字段列表中的所有字段必须包含于GROUPBY子句中,或作为参数包含于SQL聚合函数中。
HAVING子句
可以在使用GROUPBY子句的SELECT语句中指定显示哪些分组记录。
在GROUPBY组合记录后,HAVING显示由GROUPBY子句分组的记录中满足HAVING子句条件的的任何记录。
语法
SELECTfieldlist
FROMtable
WHEREselectcriteria
GROUPBYgroupfieldlist
[HAVINGgroupcriteria]
包含HAVING子句的SELECT语句具有以下部分:
部分
说明
fieldlist
任何要检索的字段的名称,以及任何字段名别名、SQL聚合函数、选择谓词(ALL、DISTINCT、DISTINCTROW或TOP)或其他SELECT语句选项。
table
要从中检索记录的表的名称。
selectcriteria
选择条件。
如果语句包含WHERE子句,那么MicrosoftJet数据库引擎将在WHERE条件应用于记录后对值进行分组。
groupfieldlist
最多10个用于分组记录的字段的名称。
在groupfieldlist中的字段名称的顺序确定了从最高到最低分组级别方法的分组级别。
groupcriteria
表达式,确定要显示哪些分组记录。
说明
HAVING是可选的。
HAVING与WHERE相似,WHERE确定哪些记录会被选中。
通过GROUPBY对记录分组后,HAVING确定将显示哪些记录:
SELECTCategoryID,
Sum(UnitsInStock)
FROMProducts
GROUPBYCategoryID
HAVINGSum(UnitsInStock)>100AndLike"BOS*";
HAVING子句可以包含最多40个通过逻辑运算符(如And和Or)链接起来的表达式。
SELECT...INTO语句
创建生成表查询。
语法
SELECTfield1[,field2[,...]]INTOnewtable[INexternaldatabase]
FROMsource
SELECT...INTO语句包含以下部分:
部分
说明
field1,field2
要复制到新表中的字段的名称。
newtable
要创建的表的名称。
它必须符合标准命名规则。
如果newtable即为现有表的名称,会发生一个可捕捉的错误。
externaldatabase
外部数据库的路径。
有关路径的详细描述,请参阅IN子句。
source
从中选择记录