Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-查询/SQL语句

全面掌握MS ACCESS SQL(21)

时 间:2018-01-11 15:10:25
作 者:Big Young   ID:252  城市:襄阳
摘 要:    带FROM子句的基本SELECT语句。
正 文:

第三节 带FROM子句的基本Select语句

    下面我们来研究一下带FROM子句的Select语句,使用示例说明可以在带FROM子句的基本Select语句中使用的各种技术。在Select语句可以使用一系列关键字来限制返回记录的数量,可通过字段列表控制访问的字段的数量,其中的FROM子句用于指定数据源。FROM子句可能还包含JOIN操作,使用JOIN操作匹配和合并两个数据源中的数据,例如两个表或一个表和一个查询。这里我们先简单的单表查询操作,下面是最基本语法:

    Select [predicate] { * | field1 [AS alias1] [, field2 [AS alias2] [, ...]]} FROM tableexpression

    这里predicate(谓词)是可先项,包括下列关键词之一:ALLDISTINCTDISTINCTROWTOP,用于限定Select语句返回记录的数量。如果没有指定predicate,则默认值为ALL。这里field1field2……与星号代表的是字段列表,用于控制选取字段的数量范围。alias1alias2等是字段的别名,用于在查询结果中代替字段的原名。Tableexpression是被查询的表的名字。

    一、用FROM子句指定Select查询的数据源

    Select语句中,它的FROM子句用于指定数据源,也就是说Select语句中的FROM子句指定包含Select子句将使用的数据的表或查询。例如在罗斯文示例数据库中,假设你想知道所有客户的电话号码,包含存储此数据的字段的表称为“客户,带FROM子句将的Select语句类似以下:

    Select 姓氏 & 名字 AS 姓名, 业务电话, 传真号 FROM 客户;

可以用方括号将字段名称和表名称括起来。如果名称不含任何空格或特殊字符(例如标点符号),则方括号为可选项。如果名称含有空格或特殊字符,则必须使用方括号。

    这个例子中我们用字段列表限制查询中只显示我们指定的字段,同时我们还有姓名名字两个字段组成一个表达式并指定了一外别名姓名FROM子句指明了数据来源是表客户

    二、在Select查询中限制记录行的输出

    Select语句中可以使用ALLDISTINCTDISTINCTROWTOP等谓词对查询输出记录进行限制,其基本语法如下:

    Select [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] FROM table

    下面对Select语句中包含项目说明如下:

ALL,意思是全部,就是显示符合条件的所有记录。假如在语句中不包括任一一个谓词,Access数据库引擎可选择所有满足SQL语句中的条件的记录。就是说,ALL是默认的选项,下面的两个示例相等,从“员工表中返回所有记录:

语句一:

Select ALL * FROM 员工;

语句二:

Select * FROM 员工;

DISTINCT,含义是不同的,作用是忽略其中包含所选字段内的重复数据的记录。Select语句中列出的每个字段的值要包含在查询结果中,则必须是唯一的。例如,员工表中列出的多名员工可能姓氏相同。如果两个记录中的姓氏字段内均包含,以下SQL语句将仅返回一条其中包含的记录:

Select DISTINCT 姓氏 FROM 员工;

如果省略DISTINCT,此查询将返回两条包含的记录。如果Select子句中包含多个字段,则所有字段的值组合必须对给定记录是唯一的,才能包含在结果中。使用DISTINCT的查询的输出不可更新,也不能体现其他用户所做后续更改。

DISTINCTROW,与DISTINCT不同,它忽略基于整个重复记录的数据,而不仅仅是重复字段。此关键字主要用在多表连接查询中,当仅从查询中使用的部分表,而非所有表选择字段时,DISTINCTROW才有效。如果查询中仅包含一个表,或者如果从所有表输出字段,将忽略 DISTINCTROW。这个我们将放在以后多表连接查询时再进一步说明。

“TOP n [PERCENT]”,返回ORDER BY子句指定的范围上限或下限内一定数量的记录。 假设需要2017级成绩排在前25名学生的姓名:

Select TOP 25 名字, 姓氏

FROM 学生

Where 年级 = ‘2017’

ORDER BY 成绩 DESC;

如果不包括ORDER BY子句,查询将从“学生表返回满足Where子句的任意25条记录的集合。TOP谓词不在相等值之间进行选择。在上面的示例中,如果第25名和第26名的年级最高平均分相等,查询将返回26条记录。

也可以使用PERCENT保留字返回ORDER BY子句指定的范围上限或下限内一定百分比的记录。假设我们需要的不是年级前25名学生,而是排名为最后10%的学生:

Select TOP 10 PERCENT 名字, 姓氏

FROM 学生

Where 年级 = ‘2017’

ORDER BY 成绩 ASC;

ASC谓词指定了返回的底部的值。TOP之后的值必须是符号的整数。TOP对查询是否可更新没有影响。

    三、在Select查询中限制记录列的输出

    Select语句中,显示列的方式有两种,一种是显示表中的所有的列,这时为了简化,我们使用*(星号);另一种就是罗列需要显示的列名。例如:

    Select * FROM 员工;

    这条语句就会查询出员工表的所有记录,并且显示每条记录中的全部字段(列),这种方式虽然简单,却有两个局限,就是不能为列命名别名和不能调整列的显示顺序。而通过罗列字段列表就没有这种限制,但要一个一个的写出来,有点麻烦。如:

    Select 姓氏 & 名字 AS 姓名, 职务,

           城市 & 地址 AS 通信地址,

           业务电话 AS 电话, 电子邮件地址 AS 电子信箱

FROM 员工

通过这种方式,我们可以精确控制列的显示并赋予有意义的名字。



Access软件网官方交流QQ群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助