【任务引导】
本教材介绍创建查询的方法中,作为普通用户,使用设计查询是最便利的方法。但是,在创建查询时,并不是所有的查询都可以在设计视图中进行,有些查询只能通过SQL语句来实现。如查询“学生成绩表”中总分前三名的学生信息,只能用SQL语句来实现。SQL查询是使用SQL语句在SQL视图中创建查询的方法,所有的查询都可以使用SQL查询来实现。用其他方法创建的查询都会在SQL视图中自动写入SQL语句,这为SQL初学者提供了便利,但自动写入的SQL语句是比较繁琐的。
SQL是Structured Query Language的英文缩写,意思是结构化查询语言。SQL是在数据库系统中应用广泛的数据库查询语言,它包括数据定义、查询、操作和控制4种功能。SQL语言简单,功能强大,使用方便,但使用者必须熟悉SQL语言。
常用的SQL查询语句包括Select、Insert、Update、Create、Drop等。其中最常用的是Select语句,它是SQL语言的核心语句。
【知识储备】
知识点1 SQL查询的操作方法
(1)在数据库窗口的“创建”选项卡中,单击“查询”组的“设计查询”按钮,打开设计视图,关闭弹出的“显示表”对话框。
(2)在“设计”选项卡中单击“SQL视图”按钮,进入SQL视图,在编辑区中输入SQL语句。
(3)当SQL语句编写完成后,切换到“数据表视图”查看查询结果,最后保存SQL查询。
知识点2 Select语句
Select语句的语法格式如下:
Select[谓词]<字段列表>|<目标表达式>|<函数>[AS别名]
From表名
[Where条件…]
[Group By字段名]
[Having分组条件]
[Order By字段名[Asc|Desc]]
Select语句各部分的含义如下:
(1)方括号[ ]中内容为可选项,尖括号<>中内容为必选项。
(2)谓词:为All、Distinct或Top,用于查询返回记录数的范围。All表示所有记录,当没有指定谓词时,默认值为All;Distinct表示去掉查询结果中指定字段的重复值,显示不重复值;Top n表示查询中前n条记录。
(3)字段列表:显示的字段名,当多个字段时,字段名之间用英文的逗号“,”分隔;如果字段在不同的表中使用相同的字段名时,则显示的字段名前要加上表名,以说明是来自哪个表,表名和字段名之间用英文的句号“.”分隔。
(4)函数:进行查询计算的聚合函数。
(5)别名:用来作为计算字段的字段名或重命名的字段名。
(6)From:指出数据源表,如果有多个数据源表,要写出每个表的表名,表名之间用逗号“,”分隔。
(7)Where:可选项,指明查询条件。
(8)Group By:可选项,按列进行分组。
(9)Having:可选项,用来指定分组时的条件。
(10)Order By:可选项,指明排序的字段和排序方式,其中Asc为递增,Desc为递减,默认为递增。
知识点3 SQL查询中Select语句的基本规则
(1)Select语句中最少要有Select、字段列表和From三项,且顺序不能颠倒,后面有子句时,子句的顺序也不能混乱。
(2)Select语句中的符号必须在英文输入法状态下输入。
(3)各项之间至少要用一个空格隔开,为了语句层次清晰,最好使用前面介绍的标准格式书写。
(4)在设计视图中,当计算或条件中有字段名时要用方括号,但在SQL语句中,字段名可不用方括号。
知识点4 Insert语句
Insert语句用于向表中添加新记录,并给新记录赋值。有以下两种类型:
(1)向表中添加一条记录,并为相应字段赋值。
语句的语法格式:
Insert Into<表名>[(字段1[,字段2],…)]
Values([常量1[,常量2],…])
Into后的内容是指出要添加新记录的表名和字段名列表,Values后的内容是指输入新记录相应字段的值,如果省略前面的字段名列表,会按照表原先设计的字段顺序赋值。如向“选课表”中添加一条记录为:Insert Into选课表(学号,课程号,成绩,教师编号)Values(“20100011”,“C001”,82,“620001”)。
(2)向表中添加一批符合条件的记录,添加的记录是由一个Select语句生成的。
语句的语法格式:
Insert Into<表名>[(字段1[,字段2],…)]
Select查询字段1[,查询字段2[,…]]
From表名列表
知识点5 Update语句
Update语句用于修改表的记录。
语句的语法格式:
Update<表名>set<字段名1>=<表达式1>[<字段名2><表达式2>][,…]
[Where <条件>]
其中,Update子句指出进行记录修改的表的名称,Set子句指出将被修改的列对应的新值,Where为条件。
知识点6 Delete语句
Delete语句用于删除表中的记录。
语句的语法格式:
Delete From <表名> [Where <条件> ]
【工作任务】
SQL查询是Access数据库中重要的查询,用它可以很方便灵活地创建所有的查询,使用Select语句创建SQL查询,需在SQL视图中进行。
【案例3-15】创建SQL查询,显示教师表中的系别。
【案例效果】图3-52所示是教师所在系别的SQL查询。通过本案例可以学会使用Select语句创建基本的SQL查询,并会使用Distinct项去掉重复数据。
图3-52 教师表中的系别
【设计过程】
(1)在SQL视图中输入图3-53所示的语句。
图3-53 教师所在系别查询的SQL视图
(2)单击“查询视图”按钮切换到数据表视图查看查询结果,如图3-54所示。
图3-54 教师所在系别数据表视图
(3)图3-54中有重复项,添加distinct语句去掉重复数据,SQL视图如图3-55所示,查询结果如图3-52所示。
图3-55 添加distinct语句的SQL视图
【案例3-16】创建SQL查询,显示教师表中的1994年前参加工作的教授的姓名、性别、工作时间、学历、职称5个字段。
【案例效果】图3-56所示是用SQL查询创建的在1994年以前参加工作的教授。通过本案例可以学会创建带条件子句的SQL查询。
图3-56 1994年以前参加工作的教授
【设计过程】
(1)在SQL视图中输入图3-57所示的语句。
图3-57 1994年前参加工作的教授的SQL视图
(2)单击“查询视图”按钮,切换到数据表视图查看查询结果,如图3-56所示,保存查询。
【案例3-17】创建SQL查询,统计学生表中各班男女生人数。
【案例效果】图3-58所示是用SQL查询创建的统计学生表中各班男女生人数。通过本案例可以学会创建带分组子句的SQL查询。
图3-58 统计各班男女生人数查询
【设计过程】
(1)在SQL视图中输入图3-59所示的语句。
(2)单击“查询视图”按钮,切换到数据表视图查看查询结果,如图3-58所示,保存查询。
图3-59 统计各班男女生人数SQL查询
【案例3-18】创建SQL查询,显示学生成绩等信息。
【案例效果】图3-60所示是用SQL查询创建的显示学生成绩信息。通过本案例可以学会基于多个数据源表创建SQL查询的方法。
图3-60 使用SQL创建的学生成绩查询
【设计过程】
(1)此查询显示的信息来源于学生表、选课表和课程表三个表,在SQL视图中输入图3-61所示的语句。
图3-61 学生成绩查询SQL视图
(2)单击“查询视图”按钮,切换到数据表视图查看查询结果,如图3-60所示,保存查询。
【案例3-19】创建SQL查询,显示总分大于300的学生信息,且总成绩按降序排列。
【案例效果】图3-62所示是用SQL查询创建的显示总成绩大于300的学生信息。通过本案例可以学会创建基于多个数据源表,且带分组条件和排序子句的SQL查询。
图3-62 总分大于300的学生
【设计过程】
(1)此查询显示的信息来源于学生表、选课表,计算总分的方法是使用聚合函数,函数名称为:SUM(成绩)。根据题意,显示成绩大于300的记录,还要使用Having子句。在SQL视图中输入图3-63所示的语句。
图3-63 总分大于300的学生SQL视图
(2)单击“查询视图”按钮,切换到数据表视图查看查询结果,如图3-62所示,保存查询。
【提示】如果有分组子句时,字段列表中的字段名为分组子句(Group By)后面的字段名,或用聚合函数计算而得的字段名。
【案例3-20】创建SQL INSERT查询,向选课表中添加一行记录:学号=20100011,课程号=C001,成绩=82,教师编号=620001。
【案例效果】图3-64所示是用SQL INSERT查询添加了一条记录到选课表中。通过本案例可以学会向表中添加一条记录。(www.xing528.com)
图3-64 选课表中添加一条记录
【设计过程】
(1)在SQL视图中输入图3-65所示的语句。
图3-65 Insert视图
(2)单击“查询视图”按钮,切换到数据表视图查看查询临时结果,如图3-66所示。
图3-66 Insert查询临时结果
(3)保存并按提示运行查询,打开选课表,如图3-64所示,已在表的末尾添加了一行记录。
【案例3-21】创建SQL INSERT查询,将成绩等于90的学生信息添加到“成绩大于90”表中,因为“成绩大于90”表中不包括成绩等于90的学生。
【案例效果】图3-67所示是用SQL INSERT查询添加了成绩等于90的记录到成绩大于90表中。通过本案例可以学会向表中添加一批记录。
图3-67 成绩等于90的记录插入学生成绩表
【设计过程】
(1)在SQL视图中输入图3-68所示的语句。
图3-68 插入成绩等于90的学生信息到“成绩大于90”表中的SQL视图
(2)单击“查询视图”按钮,切换到数据表视图查看查询临时结果,如图3-69所示。
图3-69 SQL INSERT临时结果
(3)保存并按提示运行查询,打开“成绩大于90”表,如图3-67所示,已在表的末尾添加了5条记录,与图3-69中的内容相符。
【案例3-22】创建SQL UPDATE查询,将“成绩大于90”表中马辉的成绩加5分。
【案例效果】图3-70所示是用SQL UPDATE将“成绩大于90”表中马辉的成绩增加5分。通过本案例可以学会使用UPDATE更新数据。
图3-70 马辉的成绩增加了5分的“成绩大于90”表
【设计过程】
(1)在SQL视图中输入图3-71所示的语句。
图3-71 使用UPDATE的SQL视图
(2)保存并按照提示运行查询,打开“成绩大于90”表,如图3-70所示。与图3-67比较,已将成绩大于90表中马辉的成绩更改为95分。
【案例3-23】创建SQL DELETE查询,将“成绩大于90”表中马辉的记录删除。
【案例效果】图3-72所示是用SQL DELETE将“成绩大于90”表中马辉的记录删除。通过本案例可以学会使用DELETE语句删除表中的记录。
图3-72 删除了马辉的记录的学生成绩表
【设计过程】
(1)在SQL视图中输入图3-73所示的语句。
图3-73 使用Delete的SQL视图
(2)保存并按照提示运行查询,打开“成绩大于90”表,如图3-72所示,从中可以看出表中已经删除了马辉的记录。
【实战演练】
1.使用SQL查询创建“教师学历、职称情况”查询,数据来源为“教师表”,字段为“教师编号”、“姓名”、“性别”、“学历”、“职称”。
2.使用SQL查询创建“出生在1992年的学生信息”,数据来源为“学生表”,字段为“学号”、“姓名”、“性别”、“出生日期”、“班级”。
3.使用SQL查询创建“统计各系教师人数”,数据来源为“教师表”,字段为“系别”、“人数”。
4.使用SQL查询创建“出生日期在1992年学生选课信息”,数据来源为“学生表”、“课程表”、“选课表”,字段为“学号”、“姓名”、“性别”、“课程名”、“出生日期”。
提示:条件Where学生表.学号=选课表.学号And课程表.课程号=选课表.课程号And Year([出生日期])=1992。
5.使用SQL查询创建“平均成绩大于80的学生信息”,数据来源为“学生表”、“课程表”、“选课表”,字段为“学号”、“姓名”、“性别”、“平均”。
6.使用SQL Insert查询创建“插入一条学生信息”,数据来源为“学生表”,学生信息为学号:420026;姓名:李丽;出生日期:1991/12/1;班级:土木2;政治面貌:党员;专业:土木工程。
7.使用SQL Update查询,为土木2班的每个学生成绩减2分。
8.使用SQL Delete查询,删除学生表中“出生日期”为1991年的学生信息。
【任务评价】
【习题】
一、选择题
1.下列查询类型中,会改变数据源的是( )。
A.参数查询 B.交叉表查询 C.操作查询 D.选择查询
2.使用查询向导,不可以创建( )。
A.单表查询 B.多表查询 C.带条件查询 D.不带条件查询
3.Access 2010中的基本查询类型是( )。
A.选择查询 B.交叉表查询 C.参数查询 D.操作查询
4.如果想要查询所有姓“李”的职工记录,在准则中应输入( )。
A.“LIKE李*” B.“LIKE李#” C.“LIKE李?” D.LIKE“李*”
5.通过信息让用户输入检索表中数据的条件,这时应该创建( )。
A.选择查询 B.参数查询 C.操作查询 D.SQL查询
6.下列关于条件的说法中,( )是错误的。
A.日期/时间类型数据的定界符为#。
B.文本类型数据的定界符为“”。
C.数据类型数据的定界符为[ ]。
D.同行之间为逻辑“与”关系,不同行之间为逻辑“或”关系。
7.若要查询成绩为80—90分之间(包括80和90)的学生信息,查询条件设置正确的是( )。
A.>=80 OR <=90 B.Between 80 and 90 C.>69 OR <90 D.IN(80,90)
8.若要查询成绩大于80的男生记录和成绩大于70的女生记录,查询条件设置正确的是( )。
A.男and >80 or女and>70
B.性别=“男”or >80 and性别=“女”or >70
C.性别=“男”and成绩>80 or性别=“女”and成绩>70
D.性别=“男”and >80 or性别=“女”and>70
9.操作查询不包括下面哪种查询( )。
A.追加查询 B.删除查询 C.更新查询 D.参数查询
10.主窗体和子窗体通常用于显示多个表或查询中的数据,这些表或查询中的数据一般应该具有( )关系。
A.一对一 B.一对多 C.多对多 D.关联
11.创建一个交叉表查询,在交叉表行上有且只能有一个的是( )。
A.行标题和值 B.列标题和值
C.行标题和列标题 D.行标题、列标题和值
12.SQL语句中,用来指定对选定的字段进行排序的子句是( )。
A.WHERE B.ORDER BY C.GROUP BY D.HAVING
13.在Access的“学生”表中有“学号”、“姓名”、“性别”和“入学成绩”四个字段。有以下SELECT语句:SELECT性别,AVG(入学成绩),FROM学生GROUP BY性别,其功能是( )。
A.计算并显示所有学生入学成绩的平均值
B.按性别分组计算并显示所有学生入学成绩的平均值
C.计算并显示所有学生的性别和入学成绩的平均值
D.按性别分组计算并显示男女学生入学成绩的平均值
14.下列关于SQL语句的说法中,错误的是( )。
A.INSERT语句可以向表中追加新记录
B.UPDATE语句可以更新数据表中已有的数据
C.DELETE语句用来删除数据表中已有的数据
D.DROP语句用来删除表中的某些字段
15.再查询中要统计记录的个数,应使用的函数是( )。
A.SUM B.COUNT C.AVG D.MAX
二、填空题
1.交叉表查询中,必须指定______和______,并需在______处显示其字段值。
2.要修改一个查询,需在______视图中进行。
3.要查询“出生日期”在1980年以前的职工,应输入表达式____________。
4.参数查询可以在执行时显示一个对话框以提示用户输入信息,这个提示信息必须要用______括起来。
5.操作查询的4种类型是______、______、______、______。
6.通过表中的出生日期要计算出学生的年龄,需输入表达式______。
7.在SQL的SELECT语句中,用来实现选择运算的短语是______。
8.创建交叉表查询,必须对行标题和______进行分组操作。
9.将表A中的记录追加到表B中,要求保持表B中原有的记录,可以使用的查询是_____________。
10.若要查找最近20天之内参加工作的职工记录,查询条件为______。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。