4.6 SQL查询
4.6.1 SQL语言概述
SQL是Structure Query Language的英文简写,意思是结构化查询语言。SQL是在数据库系统中应用广泛的数据库查询语言,它包含了数据定义、查询、操纵和控制4种功能。SQL语言的功能强大,使用方便灵活,语言简单易学。
在Access中,创建和修改查询最便利的方法是使用查询设计视图。但是,在创建查询时并不是所有的查询都可以在系统提供的查询设计视图中进行,有些查询只能通过SQL语句来实现。例如,查询“学生成绩表”中总分最高的前3名学生的情况,此查询只能用SQL语句实现。
常用的SQL查询语句包括Select、Insert、Update、Delete、Create、Drop等。其中最常使用的是Select语句,它是SQL语言的核心语句,Select语句的基本结构是Select…From…Where。Select语句的语法格式如下:
Select [谓词] <;字段列表>|<;目标表达式>|<;函数> [As 别名]
From 表名
[Where 条件…]
[Group By 字段名]
[Having 分组的条件]
[Order By 字段名[Asc|Desc]];
其中方括号[ ]中的内容为可选项,尖括号<>中的内容为必选项。常用的sql查询语句有哪些
Select语句各个部分的含义如下:
(1)谓词:经常使用的是All、Distinct和Top,可用谓词来限制返回的记录数量。如果没有指定谓词,则默认值为All。Top n可以列出最前面的n条记录。Distinct可以去掉查询结果中指定字段的重复值,只显示不重复的值。
(2)字段列表:当为多个字段时,各字段之间用“,”分隔。可以使用“*”代表从特定的表中指定全部字段;如果字段在不同的表中使用相同的字段名,则显示的字段名前要加上表名,以说明来自于哪张表。
(3)函数:进行查询计算的合计函数。
(4)别名:用来作为列标题,以代替表中原有的列名。
(5)From:指出要获取的数据来自于哪些表。如果从多个表中读取数据,要写出每个表的表名,表名之间用“,”分隔。
(6)Where:指明查询的条件。Where是可选的,如果不写表示选择全部记录,在使用时必须接在From之后。
(7)Group By:将查询结果按指定的列进行分组。
(8)Having:用来指定分组的条件,Having子句是可选的,如果有Having则必须放在Group By子句后面。
(9)Order By:按照递增或递减顺序在指定字段中对查询的结果记录进行排序。其中,Asc 代表递增,Desc代表递减,默认为递增。
Access没有提供直接进入SQL视图的方法,如果要进入SQL视图,需要先进入查询设计视图。具体方法如下:
(1)在数据库窗口中,单击“查询”对象。
(2)双击“在设计视图中创建查询”选项,关闭弹出的“显示表”对话框。
(3)单击工具栏中SQL视图按钮,在弹出的编辑框中输入SQL语句。
此外,用户还可以通过打开某个已经创建的查询的设计视图,选择视图按钮右边的向下
的箭头,然后选择“SQL视图”选项,在“SQL视图”中编辑、查看SQL语句或对SQL语句进行简单的修改。
4.6.2 创建SQL查询
SQL查询是用户使用SQL语句直接创建的一种查询。实际上,Access的所有查询都可以认为是一个SQL查询,因为Access查询就是以SQL语句为基础来实现查询功能的。如果用户比较熟悉SQL语句,那么使用它创建查询、修改查询的条件将比较方便。
1.基于单一数据源的查询
【例4.26】显示“学生信息表”中的所有“班级名称”。
【分析】从理论上说,数据表都有主键,它们的记录不应该重复,但当只输出部分字段时,某些字段的值可能是重复的。此查询需要使用Distinct消除重复的记录。
操作步骤:
(1)在“SQL视图”中输入以下语句,如图4.75所示。
图4.1添加Distinct前的“SQL视图”图4.2添加Distinct前的结果(2)单击工具栏上的运行按钮,查看运行结果如图4.76所示。其中每个班级均有重复,不能恰当地描述“班级”名称。
(3)在查询语句中添加Distinct(如图4.77所示),消除重复的记录。查询结果如图4.78所示,查询结果中已经去掉了重复的记录。
(4)单击工具栏中的保存按钮保存查询。
图4.3 添加Distinct后的“SQL视图”图4.4添加Distinct后的结果
【提示】Distinct必须紧挨着Select,放在Select后面的目标字段的前面。
【例4.27】查询1990年出生的女学生信息,显示“学号”、“姓名”、“性别”、“出生日期”和“班级”。
【分析】此查询为带条件的查询需要在Where中设置并列的2个条件:性别="女"和Year(出生时间)=1990
操作步骤:
(1)在“SQL视图”中输入以下语句:
Select 学号, 姓名, 性别, 出生日期, 班级
From 学生信息表
Where 性别="女" And Year(出生日期)=1990;
(2)单击工具栏上的运行按钮查看运行结果,如图4.79所示。
图4.5 1990年出生的女学生的查询结果
【例4.28】创建一个查询,按“性别”的升序和“职称”的降序显示“教师编号”、“姓名”、“性别”和“职称”。
【分析】此查询需要使用Order By子句将筛选出的记录排序输出。
操作步骤:
(1)在“SQL视图”中输入以下语句:
Select教师编号,姓名, 性别, 职称
From 教师信息表
Order By 性别, 职称Desc;
(2)单击工具栏上的运行按钮查看运行结果,如图4.80所示。
图4.6 排序查询后的结果
【提示】Order By子句必须是SQL-Select命令中的最后一个子句。
【例4.29】显示学生的学号、姓名、班级和年龄。
【分析】“学生信息表”没有“年龄”字段,需要通过计算得到。如果将通过计算得到的字段重新命名需要使用As子句。
操作步骤:
(1)在“SQL视图”中输入以下语句:
Select 学号,姓名,班级,Year(Date())-Year(出生日期) As 年龄
From 学生信息表;
(1)单击工具栏上的运行按钮查看运行结果,如图4.81所示。
图4.7 使用As重新命名字段查询结果
【提示】
(1)As是给表达式Year(Date())-Year(出生日期)重新命名。
(2)As子句仅在设计表时没有指定各字段的标题时有效。
【例4.30】查询课程号为101的成绩从高到低排序的前3名学生的“学号”、“课程号”和“成绩”。
【分析】Top谓词用于输出排列在前面的若干条记录。要查前3名学生的学生成绩需要按成绩的降序排列,排序后使用Top 3显示前3名学生。
操作步骤:
(1)在“SQL视图”中输入以下语句:
Select Top 3 学号,课程号,成绩
From 学生成绩表
Where 课程号="101"
Order By 成绩Desc
(2)单击工具栏上的运行按钮查看运行结果,如图4.82所示。
图4.8使用Top的查询结果
【例4.31】查选修101或301课程的学生的“学号”、“课程号”和“成绩”。
【分析】此查询需要使用特殊运算符In,检查一个属性值是否属于一组值。
操作步骤:
(1)在“SQL视图”中输入以下语句:
Select 学号,课程号,成绩
From 学生成绩表
Where 课程号In("101","301");
(2)单击工具栏上的运行按钮查看运行结果,如图4.83所示。
图4.9使用In的查询结果
【提示】“课程号In("101","301")”指课程号等于“101”或者“301”。
【例4.32】查学号的前4位为“0975”的学生的基本情况。
【分析】此查询需要使用通配符。Select子句中“*”代表从指定的表中选择全部字段。
操作步骤:
(1)在“SQL视图”中输入以下语句:
Select *
From 学生信息表
Where 学号Like "0975*"
(2)单击工具栏上的运行按钮查看运行结果,如图4.84所示。
图4.10 使用通配符的查询结果
【提示】还可以将Where子句改写为:Where Left(学号,4)="0975"。
2.使用聚合函数
聚合函数也叫做合计函数,在SQL语句中使用聚合函数可以实现数据统计等功能。
【例4.33】统计各门课程的平均分、最高分和最低分。
【分析】根据题意需要按课程号对记录分组,相同课程放在一组,在同一组中使用聚合函数进行计算。
操作步骤:
(1)在“SQL视图”中输入以下语句:
Select 课程号,Avg(成绩) As 平均分,Max(成绩) As 最高分,Min(成绩) As 最低分
From 学生成绩表
Group By 课程号;
(2)单击工具栏上的运行按钮查看运行结果,如图4.85所示。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。