SQL查询是使用SQL语句创建的查询。可以用结构化查询语言(SQL)来查询、更新和管理Access这样的关系数据库。
在查询设计视图中创建查询时,Access将在后台构造等效的SQL语句。事实上,在查询设计视图的属性表中,大多数的查询属性在SQL视图中都有可用的等效子句和选项,用户可以在SQL视图中进行查阅。
SQL查询的特殊方式包括联合查询、传递查询、数据定义查询和子查询。
某些SQL查询,称为SQL特定查询,不能在设计网格中创建。对于传递查询、数据定义查询和联合查询,必须直接在SQL视图中创建SQL语句。对于子查询,要在查询设计网格的“字段”行或“条件”行中输入SQL语句。
1.SQL基本命令
SQL基本语句格式:
SELECT [DISTINCT(消除重复值)]<字段列表>|<表达式>(*)[AS<替代内容>]
FROM<表列表>[WHERE<条件>]
[GROUP BY<分组条件>HAVING<组选项条件>] [ORDER BY<排序条件>][UNION⋯]
命令格式说明:
·[⋯]表示中括号中的内容为可选可不选项。
·<⋯>表示尖括号中的内容为必选项。
·<字段列表>表示可以选择多个字段,每个字段之间用“,”逗号隔开。
·<表列表>表示可以选择多个表,每个表名称之间用“,”逗号隔开。
·(*)表示如果不选任何字段,必须使用*(星号),表示选择全部字段。
命令中各短语使用说明:
·AS输出替代内容
·UNION连接另一张表(不要重复值)。
·UNIONALL连接另一张表(要重复值)。
注意:构造条件表达式时会用到一些运算符,可参见第10章的表10-4各类运算符列表。
2.SQL查询基本操作
(1)查看SQL查询语句:弹出建立查询后,在数据库“查询”对象下,使用鼠标指向某查询(如“参数查询性别”)并右击,在快捷菜单中选择“设计视图”命令;在查询设计视图中单击Access工具栏上的“视图”按钮,选择“SQL视图”选项,也可选择“视图”菜单下的“SQL视图”命令进行查看(如图5-84与图5-85所示),弹出“选择查询”窗口如图5-86所示。
图5-84 查询设计视图与选择SQL视图菜单
图5-85 工具栏的查询视图菜单
图5-86 “选择查询”窗口
(2)创建SQL查询:在数据库窗口中,选择“查询”对象,单击“新建”按钮,选择“设计视图”选项,进入查询设计视图,添加表(见图5-87,如选择”学生信息表”),依次选择“查询”→“SQL特定查询”→“数据定义”命令,如图5-88所示,在弹出的对话框中输入SQL语句,如图5-89所示。
(3)运行SQL查询:单击工具栏上的“!”按钮,或选择“查询”菜单下的“运行”命令查看运行SQL语句的结果,运行结果如图5-90所示。
图5-87 查询设计视图中添加表
图5-88 选择“数据定义”命令
图5-89 输入SQL语句
图5-90 SQL查询运行结果
3.单表查询
(1)在查询中实现计算。
【例5.23】在成绩表中,使用SQL计算:总评成绩=期中成绩×0.3+期末成绩×0.6+平时成绩×0.1。
操作步骤如下:
①在数据库窗口中,选择“查询”对象,单击“新建”按钮,弹出“新建查询”对话框;选择“设计视图”选项,单击“确定”按钮,在查询设计视图窗口中,关闭“显示表”对话框;选择“视图”菜单下的“SQL视图”命令则弹出SQL选择查询窗口。
②在SQL选择查询窗口中输入SQL命令,如图5-91所示。
图5-91 SQL选择查询窗口
③选择“视图”菜单下的“数据表视图”命令,弹出该SQL查询的数据表视图,如图5-92所示。
④关闭数据表视图窗口,弹出保存提示对话框,如图5-93所示。
⑤单击“是”按钮,弹出“另存为”对话框,如图5-94所示
图5-92 SQL查询的数据表视图
图5-93 保存提示对话框
图5-94 “另存为”对话框
⑥输入查询名称,如输入“SQL计算查询”,单击“确定”按钮即可。
(2)各种数据类型的条件查询。
注意:表5-1中列出了各类表达式及其各种数据类型的简要说明,在Access的SQL查询命令中要学会使用这些内容。在Access中的SQL查询中编辑SQL命令时,均以半角状态输入。
【例5.24】常用数据类型的条件查询举例。
①使用SQL查询命令输出学生信息表中性别为女的学生姓名、性别。
SELECT 姓名,性别 FROM 学生信息表WHERE 性别="女"
②使用SQL查询命令输出成绩表中平时成绩大于等于80分学生的学号、平时成绩。
SELECT 学号,平时成绩 FROM 成绩表 WHERE 平时成绩>=80
③使用SQL查询命令输出学生信息表中非代培的学生姓名
SELECT 姓名 FROM 学生信息表 WHERE 是否代培=﹣1
④使用SQL查询命令输出学生信息表中代培的学生姓名。
SELECT 姓名 FROM 学生信息表 WHERE 是否代培=0
⑤使用SQL查询命令输出学生信息表中1988-1-1以后出生学生的姓名、出生日期。
SELECT 姓名,出生日期 FROM 学生信息表 WHERE 出生日期>=#1988-1-1#
(3)构造条件表达式中各类特殊符的使用。
注意:表5-1中列出了各类表达式及其各种数据类型的简要说明,其中列出了一些特殊运算符与通配符,在Access的SQL查询命令中也常常用到。
【例5.25】构造条件表达式中各类特殊符的使用举例。
注意:命令中的所有符号均为半角符号。如果命令中涉及到表中没有的字段,先修改表的结构。
①查询学生信息表中“民族”为汉族或民族为回族学生的姓名与民族。
SELECT 姓名,民族 FROM 学生信息表 WHERE 民族 IN("汉族","回族")
②查询学生信息表中年龄;年龄在21~24岁之间学生的姓名与年龄。
SELECT 姓名,年龄 FROM 学生信息表 WHERE 年龄 BETWEEN 21 AND 24
等效于:SELECT 姓名,年龄 FROM 学生信息表 WHERE 年龄>=21 AND 年龄<=24
③查询学生信息表中年龄字段为“空”学生的姓名。
SELECT 姓名 FROM 学生信息表 WHERE 年龄 IS NULL
④查询学生信息表中年龄字段不为“空”学生的姓名。
SELECT 姓名 FROM 学生信息表 WHERE 年龄 <> NULL
⑤查询所有姓“张”学生的信息。
SELECT * FROM 学生信息表 WHERE 姓名 LIKE "张*"
(4)查询中分组与排序的使用。查询中的分组与排序对查询结果可以通过GROUP BY、ORDER BY语句来实现。
【例5.26】查询中分组与排序的应用举例。
注意:GROUP BY字段对输出选择内容有限制,只针对所选字段、合计函数。
①将性别分组,并分别统计人数。
SELECT 性别,Count(学生信息表.性别)AS 性别之计数 FROM 学生信息表 GROUP BY 学生信息表.性别
②将性别为男的学生输出并按出生日期的升序排列。
SELECT * FROM 学生信息表 WHERE 性别="男" ORDER BY 出生日期
(5)查询中集函数的使用。SQL查询中常用的集函数有:COUNT()、AVG()、MAX()、MIN()函数等。
【例5.27】查询中集函数的使用举例。
①查询总人数。
SELECT COUNT(*)AS 总人数 FROM 学生信息表
②查询选了课程学生的学号。
SELECT DISTINCT(学号)FROM 成绩表
③查询所有学生平时成绩的平均分。
SELECT 学号,AVG(平时成绩)AS 平时成绩的平均分 FROM 成绩表
4.创建SQL联合查询(www.xing528.com)
联合查询可以将两个或更多“表”或“查询”中的字段合并到查询结果中的一个字段中,也可以实现合并多表中数据的目的。
联合查询包括:等值连接、自然连接、非等值连接,自身连接、外连接、复合条件连接查询。下面分别举例说明。
(1)等值连接(=)与非等值连接(其他运算符)查询。
【例5.28】创建学生信息表与成绩表的联合查询,查询结果包括:学号、姓名、总评成绩。
SELECT 学生信息表.*,成绩表.* FROM 学生信息表,成绩表 WHERE 学生信息表.学号=成绩表.学号
(2)自然连接。
【例5.29】创建学生信息表与成绩表的联合查询,查询结果包括:学号、姓名、总评成绩,并去掉重复属性列。
实现方法一:使用菜单。
操作步骤如下:
①在数据库窗口,选择对象“查询”,单击“新建”按钮,双击“设计视图”选项,弹出查询设计视图与显示表对话框,如图5-95所示,分别添加学生信息表与成绩表后关闭显示表对话框。
图5-95 查询设计视图与显示表对话框
②将所需字段拖到字段网格区。
③单击Access工具栏的视图按钮,选择“SQL视图”选项,则弹出如图5-96所示的SQL语句序列。
④按照系统提示保存该查询 运行该查询,结果如图5-97所示。
图5-96 SQL语句序列
图5-97 SQL查询运行结果
实现方法二:输入SQL语句创建SQL查询。
操作步骤如下:
操作步骤①、②与实现方法一相同。
③依次选择“查询”→“SQL特定查询”→“联合”命令,弹出SQL查询窗口,用户可直接输入SQL语句:
SELECT 学生信息表.学号,姓名,性别,课程号,平时成绩 FROM 学生信息表,成绩表 WHERE 学生信息表.学号=成绩表.学号
运行结果如图5-97所示。
(3)自身连接(本表连接)。
【例5.30】查询与姓李的同籍贯的学生。(使用自身连接)
SELECT DISTINCT S1.学号,S1.姓名 FROM 学生信息表 S1,学生信息表S2 WHERE S1.籍贯=S2.籍贯 AND S2.姓名 LIKE "李*"
(4)外连接。
【例5.31】以学生信息表为主体,列出每个学生的基本情况及选课情况,没选课,则列出主体表的信息,非主表对应允许空。
SELECT 学生信息表.*,成绩表.* FROM 学生信息表,成绩表 WHERE 学生信息表.学号=成绩表.学号
(5)复合条件连接(指多个条件的连接)。
【例5.32】查询选修1002号课程且平时成绩90分以上的学生。
SELECT 学生信息表.学号,姓名 FROM 学生信息表,成绩表 WHERE 学生信息表.学号=成绩表.学号 AND 成绩表.课程号="1002" AND 成绩表.平时成绩>90
【例5.33】查询每个学生的学号、姓名、选修的课程名与成绩。(涉及3个表)
SELECT 学生信息表.学号,姓名,课程名称,平时成绩 FROM 学生信息表,成绩表,课程表 WHERE 学生信息表.学号=成绩表.学号 AND 成绩表.课程号=课程表.课程号
【例5.34】查询学号为06050003且平时成绩80分以上学生的姓名、学号和平时成绩。
注意:一个学生可选多门课。
SELECT 学生信息表.学号,姓名,成绩表.平时成绩 FROM 学生信息表,成绩表 WHERE 学生信息表.学号=成绩表.学号 AND 成绩表.学号="06050003" AND 成绩表.平时成绩>80
5.嵌套查询(带IN的子查询,子查询中不能用ORDER BY)
【例5.35】查询与姓李的同籍贯的学生。(使用嵌套结构)
SELECT 姓名,籍贯 FROM 学生信息表 WHERE 籍贯 IN(SELECT 籍贯 FROM 学生信息表 WHERE 姓名 LIKE "李*")
等效于下面的公式:(自身连接)
SELECT DISTINCT S1.学号,S1.姓名FROM 学生信息表 S1,学生信息表S2 WHERE S1.籍贯=S2.籍贯AND S2.姓名LIKE "李*"
【例5.36】查询既是姓李又是同籍贯的学生。
SELECT 姓名,籍贯 FROM 学生信息表WHERE 姓名 LIKE "李*" AND 籍贯 in (SELECT 籍贯 FROM 学生信息表WHERE 姓名 LIKE " 李*")
【例5.37】查询选修了1001号课程的学生。
SELECT 姓名,成绩表.学号 FROM 成绩表,学生信息表 WHERE 成绩表.学号=学生信息表.学号 AND 课程号="1001"
【例5.38】查询没有选修1001号课程的学生。
SELECT 姓名 FROM 学生信息表WHERE NOT EXISTS (SELECT * FROM 成绩表WHERE 成绩表.学号=学生信息表.学号 AND 课程号="1001")
【例5.39】查询选修了全部课程的学生。
SELECT 姓名 FROM 学生信息表WHERE NOT EXISTS (SELECT * FROM 课程表WHERE NOT EXISTS (SELECT * FROM 成绩表 WHERE 成绩表.学号=学生信息表.学号 AND 成绩表.课程号=课程表.课程号))
6.传递查询
Access的传递查询是自己并不执行,而是传递给另一个数据库执行。这种类型的查询使用服务器能接受的命令直接将命令发送到ODBC数据库,如Microsoft Visual FoxPro、SQL Server。使用传递查询,可以直接使用服务器上的表,而不需要建立连接。
创建传递查询,一般要完成两项工作,一是设置要连接的数据库,二是在SQL窗口中输入SQL语句。
操作步骤如下:
(1)在数据库窗口中,选择“查询”对象,双击“在设计视图中创建查询”选项,关闭“显示表”对话框,单击“查询”菜单,选择“SQL特定查询”菜单项下的“传递”命令,弹出“传递”窗口。
(2)单击工具栏上的“属性”按钮,弹出“查询属性”对话框,单击“ODBC连接字符串”按钮,弹出“选择数据源”对话框,输入连接信息,在“传递”窗口中输入传递查询,运行已建立的传递查询文件执行查询。
【例5.40】创建学生信息表与成绩表的联合查询,查询结果包括学号、姓名、总评成绩。
(1)使用菜单进行查询。
操作步骤如下:
①在数据库窗口中,选择“查询”对象,单击“新建”按钮,双击“设计视图”选项,弹出查询设计视图与“显示表”对话框,分别添加“学生信息表”与“成绩表”后关闭“显示表”对话框,如图5-98所示。
图5-98 查询设计视图
②将所需字段拖到设计网格区。
③单击Access工具栏上的的下拉按钮,选择“SQL视图”选项,弹出图5-99所示的SQL语句序列。
图5-99 SQL语句序列
④按照系统提示保存该查询。
⑤运行该查询,结果如图5-100所示。
(2)输入SQL语句创建SQL查询。
操作步骤如下:
操作步骤①、②与上面相同,此处省略。
③依次选择“查询”→“SQL特定查询”→“联合”命令,如图5-101所示,弹出SQL对话窗口,用户可直接输入SQL语句。例如,图5-99所示的SQL语句序列,运行结果如图5-100所示。
图5-100 SQL查询运行结果
图5-101 从“查询”菜单中选择SQL联合查询
7.数据定义查询
(1)数据定义查询的作用:数据定义查询可以创建、删除或改变表,也可以在数据库表中创建索引。例如,下面的数据定义查询使用CREATE TABLE语句创建表。示例中的语句包括表中每个字段的名称和数据类型(见第4章)、主键的选取、索引字段的创建等。
数据定义语句与数据类型以表列出说明。常用的数据定义语句如表5-3所示,数据类型如表5-4所示。
表5-3 SQL数据定义语句说明
表5-4 数据类型简要说明
续表
(2)数据定义语句使用示例。
【例5.41】使用CREATE TABLE创建学生基本信息简表。
操作步骤与“例5.39”相同,其中SQL命令如图5-102所示。
图5-102 例5.41SQL语句窗口
【例5.42】为学生基本信息简表添加“年龄”字段。
操作步骤与“例5.39”相同,其中SQL命令如图5-103所示。
图5-103 例5.42SQL语句窗口
【例5.43】将学生基本信息简表删除。
SQL命令为:DROP TABLE学生基本信息简表
【例5.44】为学生基本信息简表创建姓名索引。
SQL命令为:ALTER TABLE学生基本信息简表ADD UNIQUE 姓名
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。