第4章Access2010查询.ppt
- 文档编号:17480493
- 上传时间:2023-07-26
- 格式:PPT
- 页数:85
- 大小:2.19MB
第4章Access2010查询.ppt
《第4章Access2010查询.ppt》由会员分享,可在线阅读,更多相关《第4章Access2010查询.ppt(85页珍藏版)》请在冰点文库上搜索。
第4章,查询是Access数据库的对象之一,使用查询对象可以将查询命令预先保存,在需要时只要运行查询对象即可自动执行查询中规定的查询命令,从而大大方便用户进行查询操作。
查询,第4章查询,本章主要内容,退出,4.1查询概述4.2创建选择查询4.3查询的运行和修改4.4查询条件的设置4.5设置查询的计算4.6交叉表查询4.7参数查询4.8操作查询4.9SQL查询,4.1查询概述,在Access数据库中,表是存储数据的最基本的数据库对象,而查询则是对表中的数据进行检索、统计、分析、查看和更改的又一个非常重要的数据库对象。
一个查询对象实际上是一个查询命令,实质上它是一个SQL语句。
运行一个查询对象实质上就是执行该查询中规定的SQL命令。
简单来说,表是将数据(根据规范化的要求)进行了分割,而查询则是从不同的表中抽取数据并组合成一个动态数据表。
查询可以从多个表中查找到满足条件的记录组成一个动态数据表,并以数据表视图的方式显示。
查询结果仅仅是一个临时的动态数据表,当关闭查询的数据表视图时,保存的是查询的结构,并不保存该查询结果的动态数据表。
表和查询都是查询的数据源,表和查询也是窗体、报表的数据源。
建立查询之前,一定要先建立表与表之间的关系。
4.1.1查询的类型,在Access中,提供有如下五种类型的查询:
选择查询参数查询交叉表查询操作查询SQL查询,1选择查询,选择查询是最常见的查询类型,它从一个或多个表中检索数据,并且在“数据表视图”中显示结果。
也可以使用选择查询来对记录进行分组,并且对记录作合计、计数、平均值等计算。
查询结果仅仅是一个临时的动态数据表。
例4-1在“学生管理系统”数据库的“学生”表里,查找出1986年后(含1986)出生的女学生的姓名、性别和出生日期。
使用查询的“设计视图”创建出该查询,其设计视图如图4-1所示。
当运行该查询时,以“数据表视图”方式显示出该查询的结果,如图4-2所示。
图4-2查询结果,图4-1“设计视图”,2参数查询,参数查询是这样一种查询,它在运行时先显示“输入参数值”对话框,提示用户在该对话框中输入查询条件的值,然后,根据用户输入条件去执行查询命令,检索出满足条件的记录。
例4-2在“学生管理系统”数据库的“修课成绩”表里,根据临时输入的“学号”查找出该学生的各课程的成绩。
使用查询的“设计视图”创建出该查询(该查询名为“例4-2”),当运行查询时,显示出“输入参数值”的对话框。
3交叉表查询,使用交叉表查询可以计算并重新组织数据的结构,这样可以更加方便地分析数据。
交叉表查询可以对记录作合计、平均值、计数等计算,这种数据可分为两组信息:
一类在数据表左侧排列,另一类在数据表的顶端。
例4-3在“学生管理系统”数据库的“学生”表中,统计出各班男、女学生的人数。
使用查询的“设计视图”创建出该查询,当运行查询时,以“数据表视图”方式显示出该交叉表查询的结果。
4操作查询,操作查询是这样一种查询,使用这种查询只需进行一次操作就可对许多记录进行更改和移动。
有如下四种操作查询:
生成表查询追加查询更新查询删除查询。
5SQL查询,SQL查询是用户使用SQL语句创建的查询。
可以用结构化查询语言(SQL)来查询、更新和管理Access这样的关系数据库。
在查询的“设计视图”中创建查询时,Access将在后台构造等效的SQL语句。
可以在“SQL视图”中查看和编辑SQL语句。
但是,在对SQL视图中的查询做更改之后,查询可能无法以以前在“设计视图”中所显示的方式进行显示。
有一些SQL查询,称为“SQL特定查询”,无法在“设计视图”的设计网格中进行创建,如传递查询、数据定义查询和联合查询,都必须直接在“SQL视图”中创建SQL语句。
图4-5例4-1查询的“SQL视图”,4.1.2创建查询的方法,在“创建”选项卡上的“查询”组中有“查询向导”和“查询设计”两个按钮,如图4-6所示,可用于创建查询。
单击“查询向导”按钮,则显出“新建查询”对话框。
图4-6“创建”选项卡上的“查询”组,图4-7“新建查询”对话框中四种创建查询向导,4.2创建选择查询,选择查询的功能是从一个或多个表中检索数据,并且在“数据表视图”中显示结果。
查询结果仅仅是一个临时的动态数据表。
4.2.1使用向导创建查询,Access提供了向导功能以帮助用户方便快速创建简单的查询对象。
使用向导创建查询对象的步骤如例4-4和例4-5所述。
单击“创建”选项卡上的“查询”组中的“查询向导”按钮,显出“新建查询”对话框。
例4-4在“学生管理系统”数据库中,用“学生”表创建一个名为“例4-4学生高考总分查询”的查询。
该查询只要求显示学号、姓名、性别和高考总分四个字段。
例4-5在“学生管理系统”数据库中,用“学生”表创建一个名为:
“例4-5男女学生平均高考总分查询”的查询。
4.2.2在设计视图中创建查询,单击“创建”选项卡上的“查询”组中的“查询设计”按钮,打开查询“设计视图”。
查询的“设计视图”分为上、下两部分,上半部分称为“字段列表”区,显示所选定的数据源表或查询(注意:
查询也可作为查询的数据源)的所有字段。
下半部分称为“设计网格”区,用于确定查询结果动态集所拥有的字段、排序和检索条件等。
在“设计网格”中需要设置如下内容:
(1)字段:
设置查询所涉及的字段。
(2)表:
字段所属的表。
(3)排序:
查询的排序准则(如升序或降序)。
(4)显示:
当复选框选中时,字段将在查询结果中显出,否则,在查询结果中不显出。
(5)条件:
设置检索记录的条件(也称为准则)。
(6)或:
设置检索记录的条件(也称为准则)。
在设计视图中创建查询(例4-6),例4-6在“学生管理系统”数据库中,使用“设计视图”创建一个名为“例4-6查询高考总分750分以上的女生”的查询。
查询要求是:
对“学生”表,检索高考总分750分以上(含750)的女学生的记录,并要求按高考总分降序进行排序,仅要求显示学号、姓名、班级号、性别和高考总分五个字段。
4.3查询的运行和修改,运行查询实际上就是打开该查询的“数据表视图”,以表格形式显出该查询结果的动态集记录数据。
修改查询实际上就是打开该查询的“设计视图”,对查询所涉及的字段及条件等进行设计修改。
4.3.1运行查询的基本方法,运行查询的六种基本方法:
(1)打开某查询的“设计视图”,单击“查询工具”下的“设计”选项卡的“结果”组中的“运行”按钮。
(2)打开某查询的“设计视图”,单击“查询工具”下的“设计”选项卡的“结果”组中的“视图”(默认是“数据表视图”)按钮。
(3)打开某查询的“设计视图”,右击该“设计视图”中的空白处,弹出快捷菜单,单击该快捷菜单中的“数据表视图”。
(4)双击“导航窗格”上的查询对象列表中要运行的查询名称。
(5)右击“导航窗格”上的查询对象列表中要运行的查询名称,弹出快捷菜单,单击该快捷菜单中的“打开”。
此外还有其他的运行查询方法,如在“宏”中运行查询的方法。
4.3.2修改查询设计,右击“导航窗格”上查询对象列表中的某个查询,弹出快捷菜单,单击该快捷菜单中的“设计视图”,打开该查询的“设计视图”,便可对该查询的结构设计进行各种更改。
如果所需的数据不在查询中,可以添加一个表或查询,或者如果决定不需要某个表或查询,也可以将其删除。
添加了所需的表或查询后,就可以在“设计网格”中添加要使用的字段,在决定不需要这些字段时可以将其删除。
可对字段排序分别进行排序设置。
也可通过把鼠标指针移到某字段“列选定器”的右边界,使鼠标指针变成双箭头时拖动鼠标的方法来调整查询的列宽等等。
例4-7(修改查询设计的例子),例4-7在“学生管理系统”数据库中,对已经创建好的名为“例4-6查询高考总分750分以上的女生”的查询对象进行“复制”操作、“粘贴”操作,产生出一个新的名为“例4-7查询高考总分750分以上的学生”查询。
然后对新建的“例4-7查询高考总分750分以上的学生”查询的设计按如下要求进行修改,该查询要求是:
检索高考总分750分以上(含750)的学生记录,并要求按“性别”升序、“高考总分”降序对查询结果的记录进行排序(即先按“性别”字段值升序排序,当“性别”字段值相同时再按“高考总分”字段值降序排序),并要求显示学号、姓名、班级名称、性别和高考总分五个字段。
例4-7(修改查询设计的例子),提示:
对于要求显示“班级名称”字段,故需要先在该查询的“设计视图”中添加“班级”表,然后,在“设计网格”区,把原来的“学生”表的“班级号”字段更改为“班级”表的“班级名称”字段。
其他更改按查询要求进行相应的设置。
例4-7(续),修改前,修改后,4.4查询条件的设置,创建查询时,通过对字段添加限制条件,使查询结果中只包含满足查询条件的数据。
4.4.1表达式,在查询的“设计视图”中,若要对“设计网格”区中的某个字段指定条件,就可在该字段的“条件”单元格中直接输入一个表达式。
表达式是运算符、常数、函数和字段名称等的任意组合。
表达式可执行计算,其计算结果为单个值。
对于较复杂的表达式,当光标处于该字段的“条件”单元格时,单击“查询工具”下的“设计”选项卡中的“查询设置”组上的“生成器”按钮,打开表达式生成器,在表达式生成器中构造表达式,如图4-31所示。
在输入表达式时,除了汉字以外,其他所有字符必须是在英文输入法状态下输入。
图4-31表达式生成器示例,4.4.2比较运算符,对于比较运算符来说,要比较的数据的数据类型必须匹配。
也就是说,文本只能与文本比较,数字只能与数字比较,等等。
可以使用函数临时将数据转换为其他数据类型,然后再作比较。
比较运算符的含义、示例等信息如表4-1所示。
表4-1比较运算符,4.4.3逻辑运算符,使用下表中列出的标准逻辑运算符,可以组合或修改搜索条件。
逻辑运算符的优先级从高到低依次是Not、And、Or。
逻辑运算符的含义、示例等信息如表4-2所示。
4.4.4特殊运算符,4.4.4特殊运算符(续),4.4.4特殊运算符(续),注意在设计网格区的条件单元格中,表达式BETWEEN#1986-1-1#AND#1987-12-31#等价于表达式:
=#1986-1-1#AND=#1987-12-31#,4.4.5常用字符串函数,4.4.5常用字符串函数(续),4.4.6常用日期时间函数,4.4.6常用日期时间函数(续)p85,4.4.7设置查询的组合条件,在查询的“设计视图”中的“设计网格”区,“条件”行、“或”条件行以及“或”行下边紧接着的若干空白行的单元格,均可用来设置查询条件的表达式。
在查询的“设计网格”区,用户可以在多个字段的“条件”单元格(包括“条件”行的单元格和“或”条件行的单元格等)中设置查询条件的表达式。
对于多个字段的“条件”单元格中的表达式,Access数据库管理系统会自动使用And运算符或者Or运算符去组合这些不同单元格中的表达式,构成一个组合条件,以满足复杂查询的需要。
1用And运算符组合条件,在查询的“设计网格”区,如果仅在同一条件行的不同单元格中设置了条件的表达式,表示这些在不同单元格中设置的条件都必须要同时满足的。
Access自动用And运算符去组合这一条件行中的不同单元格中的条件表达式,构成一个组合条件,表示要筛选满足该条件行所有(设置了条件的)单元格的条件的记录。
例4-9(用And运算符组合条件例子),例4-9查询高考总分750分以上(含750)的男学生的学号、姓名、性别和高考总分。
用And运算符组合条件,SQL视图,设计视图,2用Or运算符组合条件,在查询的“设计视图”的“设计网格”区,如果在每一条件行中仅有一个字段的“条件”单元格(包括“条件”行的单元格和“或”条件行的单元格等)设置了查询条件的表达式,那么,对于这些条件行来说,Access数据库管理系统会自动使用(一个或多个)Or运算符去组合这些不同条件行的表达式,构成一个组合条件,表示筛选只要满足任一条件行的“条件”单元格条件的记录。
注意,在查询的“设计视图”的“设计网格”区,可以在任一字段的“条件”行单元格设置条件的表达式,也可以在任一字段的“或”条件行单元格设置条件的表达式,还可以在任一字段的“或”行下边紧接着的若干空白行的单元格设置条件的表达式。
例4-10(用Or运算符组合条件例子),例4-10查询高考总分690分以下以及780分以上(含780)的学生的学号、姓名、性别和高考总分。
图4-35在同一个字段的不同条件行的条件单元格中设置查询条件,设计视图,用Or运算符组合条件,SQL视图,例4-11(用Or运算符组合条件例子),例4-11查询高考总分750分以上(含750)的学生以及全部女学生的学号、姓名、性别和高考总分。
图4-36在两个不同字段的不同条件行(一字段一条件行)的条件单元格中设置查询条件,设计视图,用Or运算符组合条件,SQL视图,3用And和Or两个运算符组合条件,在查询的“设计网格”区,如果对于若干不同字段的不同条件行的“条件”单元格(包括“条件”行的单元格和“或”条件行的单元格),设置了查询条件的表达式,Access数据库管理系统会自动使用(一个或多个)And运算符和(一个或多个)Or运算符去组合这些不同字段的不同条件行的“条件”单元格的表达式,构成一个组合条件,表示筛选只要满足任何一条件行的所有“条件”单元格条件的记录。
例4-12(用And和Or两个运算符组合条件),例4-12查询高考总分690分以下的男学生以及780分以上(含780)的女学生的学号、姓名、性别和高考总分。
图4-38在两个字段的两条件行的条件单元格中设置查询条件,设计视图,用Or运算符组合条件,用And运算符组合条件,用And运算符组合条件,SQL视图,4.5设置查询的计算,要在查询中执行计算,可以在查询设计中使用“预定义计算”或“自定义计算”形式来对查询中需要的计算进行相应的设置。
预定义计算是Access通过聚合函数对查询中的分组记录或全部记录进行“总计”计算,比如求合计、平均值、计数、最小值、最大值、标准偏差或方差等。
计算中可用的聚合函数全都可以在查询的“设计视图”的“设计网格”区的“总计”行的任一单元格的下拉列表中选择到。
4.5.1设置查询的总计计算(例4-13),例4-13在“学生管理系统”数据库中创建一个查询,统计全校学生人数。
分析:
本查询的运行结果实际上就是要统计出“学生”表中的全部记录个数。
在该查询的“设计视图”,单击“查询工具”下的“设计”选项卡的“显示/隐藏”组中的“汇总”按钮,在“设计网格”区显出“总计”行。
例4-13(续),图4-44“姓名”的“字段属性”对话框,图4-45字段改标题后的查询结果,图4-43字段改名前的查询结果,修改该字段标题,4.5.2设置查询的分组总计计算(例4-14),例4-14在“学生管理系统”数据库中创建一个查询,统计全校男学生的高考总分的平均分和女学生的高考总分的平均分。
分析:
本查询的运行结果实际上就是要分别统计出“学生”表中的“性别”字段的值为“男”的高考总分的平均分和“性别”字段的值为“女”的高考总分的平均分。
实际上就是要把“学生”表中的全部记录按“性别”字段的值进行分组,将全部“性别”为“男”的学生记录分为一组并统计出该组的高考总分的平均分,将全部“性别”为“女”的学生记录分为一组并统计出该组的高考总分的平均分。
例4-14(续),图4-47查询结果,图4-46“设计网格”区查询条件设置,4.5.2设置查询的分组总计计算(续)例4-15,例4-15在“学生管理系统”数据库中创建一个查询,统计每一个学生已修的学分数。
对于每个学生来说,某门课程的成绩大于等于60分才能计算该门课程的学分(若不及格,就不计算该门课程的学分数)。
要求在查询结果中显出“学号”、“姓名”和“学分”。
分析:
“学生”表中有“学号”和“姓名”两个字段,在“修课成绩”表中才有“成绩”字段,在“课程”表中才有“学分”字段,故在创建该查询时要添加“学生”、“修课成绩”和“课程”三个表。
例4-15(续),运行查询结果,设计视图,4.5.3设置查询的自定义计算,自定义计算是指使用一个或多个字段中的数据在每个记录上执行数值、日期或文本计算。
在“设计视图”中,对于自定义计算,可直接在设计网格中创建新的计算字段。
创建计算字段的方法是:
将表达式输入到查询设计网格中的空“字段”单元格中。
4.5.3设置查询的自定义计算(例4-16),例4-16在“学生管理系统”数据库中创建一个查询,计算每一个学生每一已修课程成绩的绩点数。
对于每个学生来说,某一课程的成绩大于等于60分才能计算该门课程成绩的绩点数(若不及格,就不计算该门课程成绩的绩点数)。
要求在查询结果中显出“学号”、“课程名称”、“成绩”和“绩点”,并按学号、课程代码排序。
绩点的计算公式为:
成绩/10-5。
分析:
在“修课成绩”表中有“学号”字段、“课程代码”字段和“成绩”字段。
在“课程”表中有“课程名称”字段,在任何表中都没有“绩点”字段,故要添加一个计算字段,即在“设计网格”区的空白的“字段”单元格输入:
绩点:
成绩/10-5另外,“课程代码”字段不需显示,在此例中添加进来仅是为了排序用途。
例4-16(续),运行查询结果,输入绩点:
成绩/10-5,设置不显示,设计视图,4.6交叉表查询,使用交叉表查询可以计算并重新组织数据的结构,这样可以更加方便地分析数据。
交叉表查询可以按分类对记录数据作合计、平均值、计数等计算,这种数据可分为两组信息:
一类在数据表左侧排列,另一类在数据表的顶端。
4.6.1使用向导创建交叉表查询(例4-17),例4-17在“学生管理系统”数据库中,对“学生”表创建的交叉表查询,计算各班级的男、女学生的人数。
该查询的名称为:
例4-17班级男女学生人数交叉表查询。
单击“创建”选项卡的“查询”组上的“查询向导”按钮,显出“新建查询”对话框,单击“交叉表查询向导”。
图4-54选定行标题(班级号),图4-55选定列标题(性别),例4-17(续),在“请确定为每个列和行的交叉点计算出什么数字:
”的“交叉表查询向导”对话框中,单击选择“函数”列表框中的“Count”。
图4-56指定计数函数Count,图4-58查询运行结果,4.6.2使用设计视图创建交叉表查询,例4-18在“学生管理系统”数据库中,对“修课成绩”表创建交叉表查询,计算各学生各学年度的修课数。
该查询的名称为:
例4-18查询学生各学年的修课数交叉表。
单击“查询工具”下的“设计”选项卡中的“查询类型”组上的“交叉表”按钮,立即在该查询的“设计网格”区添加上了“总计”行和“交叉表”行,如图4-59所示。
“字段”单元格下拉按钮,添加“总计”行和“交叉表”行,4.6.2使用设计视图创建交叉表查询(续例4-18),选“学号”为行标题,选“学年度”为列标题,选“计数”,选“值”,运行查询结果,4.7参数查询,参数查询是这样一种查询,它在运行时显示“输入参数值”的对话框,提示用户输入信息,用户可在该对话框中输入不同的条件参数值,即可检索到满足条件的记录内容。
可以设计参数查询来提示输入条件,检索要满足该条件值的记录,例如,可设计参数查询来提示输入一个“班级号”等。
可以设计多个参数查询来提示更多的内容,例如,设计两个参数的查询来提示输入两个日期,当运行时,检索出这两个日期之间的所有记录。
4.7.1在设计视图中创建单个参数的查询,例4-19在“学生管理系统”数据库中,创建一个单个参数的查询,根据提示输入某一个“班级号”,检索出该班级的成绩不及格的“班级号”、“学号”、“姓名”、“课程名称”和“成绩”字段。
该查询的名称为:
例4-19按班级号查询成绩不及格的学生名单。
分析:
“学生”表中有“班级号”、“学号”和“姓名”三个字段,在“修课成绩”表中才有“成绩”字段,在“课程”表中才有“课程名称”字段,故在创建该查询时一定要添加“学生”表、“修课成绩”表和“课程”表等三个表。
例4-19(续),图4-63含单个参数的查询的“设计视图”的设置,在“班级号”字段的“条件”行单元格中输入:
请输入要查询的班级号,例4-19(续),图4-64“输入参数值”对话框,图4-65参数查询结果,当运行该查询时显出:
运行查询结果,4.7.2在设计视图中创建多个参数的查询,例4-20在“学生管理系统”数据库中,创建一个含有两个参数的查询,提示输入两个日期,然后检索在这两个日期之间出生的所有学生的学号、姓名、性别、出生日期、班级名称、课程名称及成绩。
该查询的名称为:
例4-20查询两个日期之间出生学生的成绩。
提示:
创建本查询要添加“班级”表、“学生”表、“修课成绩”表和“课程”表。
例4-20(续),图4-66含两个参数查询的“设计视图”的设置,在“出生日期”字段的“条件”行单元格中输入:
Between请输入开始日期And请输入终止日期,例4-20(续),图4-67第一个“输入参数值”对话框,图4-69两个日期参数的查询结果,当运行该查询时显出:
图4-68第二个“输入参数值”对话框,运行查询结果,4.8操作查询,操作查询是仅在一个操作中就可以追加、更改或删除许多记录的查询操作查询。
有如下四种类型:
生成表查询追加查询更新查询删除查询,4.8.1生成表查询,生成表查询利用一个或多个表中的全部或部分数据创建新表。
利用生成表查询建立新表时,如果数据库中已有同名的表,则新表将覆盖该同名的表。
注意,利用生成表查询建立新表时,新表中的字段从生成表查询的源表中继承字段名称、数据类型以及“字段大小”属性。
但是不继承其它的字段属性以及表的主键。
例4-21(生成表查询例子),例4-21在“学生管理系统”数据库中,创建一个生成表查询,将2003-2004学年度成绩“不及格”的学生相关内容(包括“学号”、“姓名”、“课程名称”、“成绩”、“学年度”、“学期”、“班级名称”字段)生成到一新表。
该新表名为“成绩不及格的学生”。
该查询名为:
例4-21成绩不及格学生的生成表查询。
提示:
在创建本查询时要添加“班级”表、“学生”表、“修课成绩”表和“课程”表。
例4-21(续),单击“查询工具”下的“设计”选项卡中的“查询类型”组上的“生成表”按钮,显出“生成表”对话框。
设计视图,“生成表”对话框,例4-21(续),当运行“例4-21成绩不及格学生的生成表查询”时,显出提示“确实要执行这种类型的动作查询吗?
”对话框。
单击上述对话框中的“是”按钮,显出提示“确实要用选中的记录来创建新表吗?
”对话框。
4.8.2追加查询,追加查询是将一个或多个表中的一组记录添加到另一个已存在的表的末尾。
要被追加记录的表必须是已经存在的表。
这个表可以是当前数据库中的表,也可以是另外一个数据库中的表。
例4-22(追加查询例子),例4-22在“学生管理系统”数据库中,创建一个追加查询,将2004-2005学年度成绩“不及格”的学生相关内容(包括“学号”、“姓名”、“课程名称”、“成绩”、“学年度”、“学期”、“班级名称”字段)追加到“成绩不及格的学生”中。
该查询名为:
例4-22成绩不及格学生的追加查询。
提示:
在创建本查询时要添加“班级”表、“学生”表、“修课成绩”表和“课程”表,例4-22(续),单击“查询工具”下的“设计”选项卡中的“查询类型”组上的“追加”按钮,显出“追加”对话框。
设计视图,“追加”对话框,例4-22(续),当运行“例4-22成绩不及格学生的追加查询”时,显出提示“确实要执行这种类型的动作查询吗?
”对话框,单击上述对话框中的“是”按钮,显出提示“确实要追加选中行吗?
”对话框。
4.8.3更新查询,更新查询可以对表中的部分记录或全部记录作更改。
更新查询用在一次更新一批数据的操作中非常方便。
例4-23(更新查询例子),例4-23在“学生管理系统”数据库中,创建一个更新查询,将“修课成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Access2010 查询
![提示](https://static.bingdoc.com/images/bang_tan.gif)