商务信息技术第十三讲9.1查询的概述•查询——依据一定的查询条件,对数据库表中的数据信息进行查找•与表一样,都是数据库的对象•允许用户依据准则或查询条件抽取表中的记录与字段•查询是数据处理和数据分析的工具,在指定的(一个或多个)表中根据给定的条件从中筛选所需要的信息,供用户查看、更改和分析。Access不仅能存储数据,更在于它能处理数据,其强大的查询功能,使用户能够很方便的从海量数据中查找针对特定需求的数据9.1查询的概述查询的功能•选择字段在查询中,可以只选择表中的部分字段。•选择记录根据指定的条件查找所需记录并显示。•编辑记录包括添加记录、修改记录和删除记录。•实现计算在建立查询的过程中进行各种统计计算。•建立新表利用查询的结果建立一个新表。9.1查询的概述查询和数据表的关系•表和查询都可以作为数据库的“数据来源”的对象,可以将数据提供给窗体、报表、数据访问页或另外一个查询,所以一个数据库中的数据表和查询名称不可重复。•与表不同的是,查询本身并不保存数据,它保存的是如何去取得信息的方法与定义(亦即相关的sql语句)。当运行查询时,这些信息便会取出,但查询所得的信息并不会存储在数据库中。•因此二者的关系颗粒理解为:数据表负责保存记录,查询负责取出记录。但都是将记录以表格的形式显示在屏幕上。9.1查询的概述----查询类型查询的类型查询分为5类:选择查询、参数查询、交叉表查询、操作查询、SQL查询1、选择查询•选择查询是最常用的、最基本的查询类型•它从一个或多个表中检索数据。也可以使用选择查询来对记录进行分组,并且对记录作总计、计数、平均值以及其他类型的总和计算。9.1查询的概述-----查询类型2、参数查询•在执行时,显示对话框,提示用户输入查询参数或准则,进而进行查询。•与其他查询不同,参数查询的查询准则是可以因用户的要求而改变的,而其他查询的准则是事先定义好的。9.1查询的概述---查询类型3、交叉表查询•使用交叉表查询可以计算并重新组织数据的结构,这样可以更加方便地分析数据。•交叉表查询计算数据的总计、平均值、计数或其他类型的总和•数据可分为两组信息:一类在数据表左侧排列,另一类在数据表顶端排列。9.1查询的概述---查询类型销售记录——数据库表1月2月3月4月销售A组234156299328销售B组372268265282销售C组322298289263姓名所属部门销售时间销售数量张三销售A组1月3日5李四销售B组3月12日19王五销售A组3月18日8……交叉表行标题列标题销售数量统计值9.1查询的概述---查询类型4、操作查询使用操作查询可完成对表或表中记录的操作,只需进行一次操作就可对许多记录进行更改和移动。有4种操作查询方式:•生成表查询:生成表查询利用一个或多个表的全部或部分数据创建新表。例如,在客户管理系统中,可以用生成表查询来生成一个估计客户表。•删除查询:删除查询可以从一个或多个表中删除记录。•更新查询:更新查询可对一个或多个表中的一组记录进行全部更改。•追加查询:追加查询可将一个或多个表中的一组记录追加到一个或多个表的末尾。9.1查询的概述---查询类型5、SQL查询SQL是结构化查询语言(StructuredQueryLanguage)的缩写。它是现代数据库中用来描述查询的语言,SQL查询是用户使用SQL语句创建的查询。实际上在Access2003数据库系统中,所有的查询最终都是由SQL查询实现的。9.2选择查询•从一个或多个数据源中获得数据的查询称为选择查询。•创建选择查询有两种方法,使用查询向导和在设计视图中创建查询。–使用“查询向导”–使用“设计”视图9.2.1使用“查询向导”•使用“查询向导”是一种最简单的创建查询的方法。•用户可以在向导指示下选择表和表中字段,但不能设置查询条件。•在数据库窗口中使用简单查询向导不仅可以对单个表进行创建查询的操作,也可以对多个表进行创建查询的操作。9.2.1使用“查询向导”1.从单个表中查询所需的数据【例9-1】从“客户”表中查找“公司名称”、“联系人姓名”、“地址”、“电话”字段2.从多个表查询所需要的数据【例9-2】从“订单”、“产品”、“订单明细”、“客户”、“运货商”表中,查询发货信息。(“订单”表中的“订单ID”、“订购日期”、“到货日期”、“发货日期”字段“订单明细”表中的“数量”、“单价”字段“运货商”表中“公司名称”、“电话”字段“客户”表中“公司名称”、“地址”字段)9.2.2使用“设计”视图•使用“查询向导”虽然可以快速、方便地创建查询,但它只能创建不带条件的查询,而对于有条件的查询需要通过使用查询“设计”视图完成。•打开查询“设计”视图的方法•查询“设计”视图的组成查询“设计”视图窗口分为上下两部分:上面是“字段列表”区,下面是“设计网格”区。“字段列表”区显示所选表的所有字段;“设计网格”区中的每一列对应查询动态集中的一个字段,每一行对应字段的一个属性或要求。9.2.2使用“设计”视图“设计网格”区各行的作用:•【字段】:用于设置查询所涉及到的字段;•【表】:用于指明字段所归属的表;•【排序】:用于设置查询的排序准则;•【显示】:应用确定相关字段是否在动态集中出现;•【条件】:用于设置查询的筛选条件,同一行中的条件构成逻辑与的条件关系•【或】:用于设置查询的筛选条件,与【条件】行构成逻辑或的条件关系。【或】行可以有多行。9.2.2使用“设计”视图【例9-3】使用设计视图创建查询,创建不带条件的查询,查询所有订单的订单ID、产品名称、订货的数量以及供货商的公司名称和地址9.2.2使用“设计”视图【例9-4】使用设计视图,创建带条件的查询查询,1997年一年中产品“绿茶”的订购信息,查询结果包括“订单ID”、“客户名称”、“产品名称”、“数量”、“订购日期”字段。9.2.2使用“设计”视图3.利用查询的设计视图对查询进行修改(1)打开已创建的查询(打开查询的设计视图)(2)运行已创建的查询(打开查询的数据表视图)(3)编辑字段1)添加字段2)删除字段3)移动字段4)插入字段(4)编辑查询中的数据源1)添加表或查询2)删除表或查询(5)排序查询的结果9.1.2查询条件设置•查询常常需要指定一定的条件。•查询条件(即:表达式)是运算符、常量、字段值、函数以及字段名和属性等任意组合,能够计算出一个结果。•查询条件在创建带条件的查询时非常重要。[工资]*12字段常量运算符9.1.2查询条件设置1、运算符–运算符是构成查询条件的基本元素–Access提供了关系运算符、逻辑运算符、特殊运算符9.1.2查询条件设置关系运算符及含义关系运算符说明举例=等于不等于”教授”小于#1985-12-25#大于=小于等于=大于等于9.1.2查询条件设置逻辑运算符及含义逻辑运算符说明举例Not逻辑非Not“教授”And逻辑与=85and=75Or逻辑或“北京”or”天津”9.1.2查询条件设置特殊运算符及含义特殊运算符说明In用于指定一个字段值的列表。常用类型:文本型例如:in(“教授”,”副教授”)Between…and用于指定一个字段值的范围。常用类型:数字型Like用于指定查找文本字段的字符模式。在所定义的字符模式中,用,“?”表示该位置可匹配任何一个字符;用“*”表示该位置可匹配任何多个字符;用“#”表示该位置可匹配一个数字;用方括号描述一个范围,用于可以匹配的字符范围。例如:like张*like张?Like张#like[张刘]*IsNull用于指定一个字段为空IsNotNull用于指定一个字段为非空9.1.2查询条件设置2、函数Access提供了大量的内置函数,也称为标准函数或函数,包括算术函数、字符函数、日期/时间函数和统计函数等。这些函数为更好地构造查询条件提供了极大的便利,也为更准确地进行统计计算、实现数据处理提供了有效的方法。Access中大部分函数与Excel函数相似,也有功能不同的函数,例如:Date()9.1.2查询条件设置函数功能Count(字符表达式)返回字符表达式中值的个数(即数据计数),通常以星号(*)作为Count()的参数,字符表达式可以是一个字段名,也可以是含有字段名的表达式,但所含的字段必须是文本数据类型的字段。Min(字符表达式)返回字符表达式值中的最小值Max(字符表达式)返回字符表达式值中的最大值Avg(数值表达式)返回表达式中值的平均值Sum(数值表达式)返回表达式中值的总和Day(日期)返回值介于1~31,代表所指定日期中的日子Month(日期)返回值介于1~12,代表所指定日期中的月份Year(日期)返回值介于100~9999,代表所指定日期中的年份Weekday(日期)返回值介于1~7(1代表星期天,7代表星期六),代表所指定日期是星期几Hour(日期/时间)返回值介于0~23,代表所指定日期时间中的小时部分Date()返回当前的系统日期Time()返回当前的系统时间Now()返回当前的系统日期和时间Dateadd()以某一日期为准,向前或向后加减Datediff()计算两日期相差的天数Len()返回字符表达式的字符个数IIf(判断式,为真的值,为假的值)以判断式为准,在其结果为真或假时,返回不同的值9.1.2查询条件设置3、查询条件应用字段名条件功能产品名称薯条查询产品名称为薯条的订单明细薯条Or饼干查询产品名称为薯条或饼干的订单明细Right([产品名称],2)=奶酪查询产品名称为各种奶酪联系人姓名In(李四,张三)查询姓名为“李四”或“张三”的记录李四Or张三Not李四查询姓名不为“李四”的记录Left([姓名],1)=李Like李*查询姓“李”的记录Len([姓名])=2查询姓名为2个字的记录订单IDRight([订单ID],2)=“99“查询“订单ID”值以99结尾的订单Mid([订单ID],5,2)=“03”查询“订单ID”值第5和第6个字符为03的记录InStr([订单ID],“03”)=“5“使用文本值作为查询条件示例9.1.2查询条件设置字段名条件功能订购日期Year([订购日期])=1997查询1997年的订单Between#1997-01-01#And#1997-12-31#Date()-15查询15天前的订单BetweenDate()AndDate()-40查询40天之内订单Year([订购日期])=1997AndMonth([订购日期])=7查询1997年7月的订单雇佣日期Year([雇佣日期])=1993查询1993年雇佣的雇员使用处理日期结果作为查询条件示例9.1.2查询条件设置使用空值或空字符串作为查询条件的示例字段名条件功能传真IsNull查询没有传真(传真为Null(空值))的供应商记录IsNotNull查询有传真的(不为空值)供应商记录联系电话查询没有联系电话的记录举例:(创建带条件的查询)•在“教学信息管理”数据库中:1.查找1988年出生的2年级男学生,并显示“姓名”、“性别”和“生日”字段。2.查找姓张或姓刘的教师的任课情况。3.在查询中使用函数:查看本月生日的学生,查询结果按“生日”的降序排序。4.在查询中使用函数:查看本月生日的学生,查询结果按“生日”的降序排序。5.查看“学生”表中每个学生的年龄,结果按“年龄”的升序排序9.2.2使用“设计”视图Access可以在查询数据表中,显示包含上限或下限值字段的记录,或显示包含最大或最小百分比值字段的记录。【例9-5】查询十种最贵的产品9.2.3用查询执行计算1、预定义计算系统预先提供的、用于对查询中的记录组或全部记录进行计算:包括总和、平均值、计数、最小值、最大值、标准偏差或方差等等。为了进行总计计算,需要在工具栏上单击“总计”按钮,则在查询设计网格中增加“总计”行,这时单元格中显示“分组”。然后可以对每个字段,在“总计”行的单元格中选择一种计算类型进行计算。【例9-7】统计青岛市的客户数目【例9-8】分组统计:统计各城市的客户数目。统计各类职称的教师人数。在实际应用中,常需要