,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,*,页,SQL Server 2005,基础教程,清华大学出版社,第,7,章 操纵数据,SQL Server 2005,基础教程,清华大学出版社,教学目标,教学过程,11/16/2024,1,教学目标,理解操纵数据需要解决的问题,掌握使用,INSERT,语句插入数据,掌握使用,UPDATE,语句更新数据,掌握使用,DELETE,语句删除数据,掌握使用,SELECT,语句检索数据,理解分组、子查询、连接、集合运算、,CTE,等检索特点,理解数据加密的方式和特点,11/16/2024,2,教学过程,7.1,概述,7.2,插入数据,7.3,更新数据,7.4,删除数据,7.5,检索操作概述,7.6,使用,SELECT,子句检索数据,7.7,排序,7.8,使用,WHERE,子句选择数据,7.9,聚合技术,7.10,分组技术,7.11,连接技术,7.12,子查询技术,7.13,集合运算技术,7.14,公用表表达式,7.15 PIVOT,和,UNPIVOT,7.16,加密表中数据,11/16/2024,3,7.1,概述,表创建之后,表只是一个空表。,如何向表中添加数据呢?如果表中已有数据了,但是数据不合适或不正确,那么如何更新这些数据呢?如果表中的数据不再需要了,那么如何删除这些过时的数据呢?如何按照用户需要,将表中的数据检索出来呢?这些问题都是数据操纵问题。,用户可以使用,INSERT,、,UPDATE,、,DELETE,、,SELECT,等语句来解决这些数据操纵问题。,11/16/2024,4,7.2,插入数据,表创建之后往往只是一个空表,因此向表中插入数据是在表结构创建之后,首先需要执行的操作。向表中插入数据,应该使用,INSERT,语句。该语句包括了两个子句,即,INSERT,子句和,VALUES,子句。,INSERT,子句指定要插入数据的表名或视图名称,它可以包含表或视图中列的列表。,VALUES,子句指定将要插入的数据。,一般地,使用,INSERT,语句一次只能插入一行数据。,INSERT,语句的基本语法形式如下所示:,INSERT INTO,table_or_view_name,(,column_list,),VALUES(expression),11/16/2024,5,7.3,更新数据,可以使用,UPDATE,语句更新表中已经存在的数据。,UPDATE,语句既可以一次更新一行数据,也可以一次更新许多行,甚至可以一次更新表中的全部数据行。,在,UPDATE,语句中,使用,WHERE,子句指定要更新的数据行满足的基本条件,使用,SET,子句给出新的数据。新数据既可以是常量,也可以是指定的表达式。,UPDATE,语句的基本语法形式如下:,UPDATE,table_or_view_name,SET,column_name,=expression,WHERE,search_condition,11/16/2024,6,7.4,删除数据,当表中的数据不再需要时,可以删除。一般情况下,使用,DELETE,语句删除数据。,DELETE,语句可以从一个表中删除一行或多行数据。,删除数据的,DELEE,语句的基本语法形式如下:,DELETE,FROM,table_or_name,WHERE,search_condition,11/16/2024,7,7.5,检索操作概述,如果我们希望检索表中数据,可以使用,SELECT,语句。在,SELECT,语句中,有三个基本的组成部分:,SELECT,子句、,FROM,子句和,WHERE,子句。,SELECT,子句用于指定将要检索的列名称,,FROM,子句指定将要检索的对象,,WHERE,子句则用于指定数据应该满足的条件。,11/16/2024,8,7.6,使用,SELECT,子句检索数据,在,SELECT,语句中,可以在,SELECT,子句中选择指定的数据列、使用文字串、改变列标题、执行数据运算、使用,ALL,关键字、使用,DISTINCT,关键字等。,11/16/2024,9,选择指定的数据列,选择指定的数据列是指可以在,SELECT,子句中指定将要检索的列名称。选择指定的列名称要注意几点,第一,这些列名称应该与表中定义的列名称一致,否则就可能出错或者得到意想不到的结果;第二,列名称之间的顺序既可以与表中定义的列顺序相同,也可以不相同;第三,,SELECT,语句的检索结果只是影响数据的显示,对表中数据的存储没有任何的影响。,11/16/2024,10,使用文字串,通常,直接阅读,SELECT,语句的检索结果,是一件头疼的事情,因为显示出来的数据,只是一些不连贯的、阅读性不强的信息。为了提高,SELECT,语句检索结果的可读性,可以通过在,SELECT,关键字后面增加文字串。通常情况下,使用单引号将文字串引起来。,11/16/2024,11,改变列标题,在默认情况下,在数据检索结果中所显示出来的列标题就是在定义表时使用的列名称。但是,在检索过程中可以根据用户的需要改变显示的列标题。实际上,改变列标题也就是为指定的列定义一个别名。改变列标题有两种方法,一种方法是使用等号,(=),,另一种方法是使用,AS,关键字。,11/16/2024,12,数据运算,数据运算就是指对检索的数据进行各种运算。也就是说,可以在,SELECT,关键字后面列出的列项中使用各种运算符和函数。这些运算符和函数包括算术运算符、数学函数、字符串函数、日期和时间函数、系统函数等。,11/16/2024,13,使用,ALL,和,DISTINCT,关键字,在,SELECT,语句中,可以在,SELECT,子句中通过使用,ALL,或,DISTINCT,关键字控制查询结果集的显示样式。,ALL,关键字表示检索所有的数据,包括重复的数据行。,DISTINCT,关键字表示仅仅显示那些不重复的数据行,重复的数据行只是显示一次。由于,ALL,关键字是默认值,所以当没有显式使用,ALL,或,DISTINCT,关键字时,隐含着使用,ALL,关键字。,11/16/2024,14,7.7,排序,在使用,SELECT,语句时,排序是一种常见的操作。排序是指按照指定的列或其他表达式对结果集进行排列顺序的方式。,SELECT,语句中的,ORDER BY,子句负责完成排序操作。,在排序时,既可以按照升序排列,也可以按照降序排列。关键字,ASC,表示升序,,DESC,表示降序,默认情况下是升序。,11/16/2024,15,7.8,使用,WHERE,子句选择数据,在,SELECT,语句中,,WHERE,子句指定将要搜索的数据行的条件。也就是说,只有满足,WHERE,子句条件的数据行才会出现在结果集中。,这些搜索条件可以分为,简单搜索条件,模糊搜索条件,复合搜索条件,11/16/2024,16,简单搜索条件,在,WHERE,子句中,简单搜索条件是指使用比较运算符、范围、列表、合并以及取反等运算方式形成的搜索条件。,11/16/2024,17,模糊搜索条件,在检索字符数据时,通常提供的检索条件是不十分准确的,例如这种搜索条件仅仅是包含、类似某种样式的字符。在,WHERE,子句中,可以使用,LIKE,关键字实现这种灵活的模糊搜索条件。,LIKE,关键字用于检索与特定字符串匹配的字符数据。,LIKE,关键字后面可以跟一个列值的一部分而不是一个完整的列值,从而形成,LIKE,子句。,LIKE,子句的语法形式如下:,match_expression,NOT LIKE pattern ESCAPE,escape_character,11/16/2024,18,复合搜索条件,在,WHERE,子句中可以使用逻辑运算符把若干个搜索条件合并起来,组成复杂的复合搜索条件。,这些逻辑运算符包括,AND,,,OR,和,NOT,。,11/16/2024,19,7.9,聚合技术,聚合技术是指对一组数据进行聚合运算得到聚合值的过程。在聚合运算中主要是使用聚合函数。在,Microsoft SQL Server 2005,系统中,一般情况下,可以在三个地方使用聚合函数,即,SELECT,子句、,COMPUTE,子句和,HAVING,子句。本节主要讲述如何在,SELECT,子句和,COMPUTE,子句中使用聚合函数,有关,HAVING,子句使用聚合函数的内容在下一节介绍,11/16/2024,20,SELECT,子句中的聚合,在,SELECT,子句中可以使用聚合函数进行运算,运算结果作为新列出现在结果集中。在聚合运算的表达式中,可以包括列名、常量以及由算术运算符连接起来的函数。,例如,在如图,7-34,所示的示例中,在,SELECT,子句中使用聚合函数计算了,Production.Product,表中的数据量以及有关标准成本的最大值、最小值、平均值、标准偏差、方差等。注意,COUNT,函数的特点。,11/16/2024,21,COMPUTE,子句中的聚合,需要指出的是,当在,SELECT,子句中出现聚合函数时,结果集中的数据全是聚合值,没有明细值。这是使用,SELECT,子句计算聚合值的缺点。能否解决这种问题呢?能,解决问题的方法就是使用,COMPUTE,子句。,11/16/2024,22,7.10,分组技术,聚合函数只能产生一个单一的汇总数据,使用,GROUP BY,子句,则可以生成分组的汇总数据。,GROUP BY,子句把数据组织起来分成组。一般情况下,可以根据表中的某一列进行分组,通过使用聚合函数,对每一个组可以产生聚合值。,如果希望过滤某些分组,可以使用,HAVING,子句排。分组技术是指使用,GROUP BY,子句完成分组操作的技术。,如果在,GROUP BY,子句中没有使用,CUBE,或,ROLLUP,关键字,那么表示这种分组技术是普通分组技术。,11/16/2024,23,普通分组技术,GROUP BY,子句、,HAVING,子句和聚合函数一起完成对每一个组生成一行和一个汇总值。,在使用,GROUP BY,子句和,HAVING,子句的过程中,要求考虑一些条件,11/16/2024,24,ROLLUP,和,CUBE,关键字,在,GROUP BY,子句中,可以使用,ROLLUP,或,CUBE,关键字获得附加的分组数据,这些附加的分组数据是通过各组之间的组合得到的。使用,ROLLUP,关键字可以得到各组的单项组合,但是,CUBE,关键字可以得到各组之间的任意组合。在结果集中,通过组组合起来的组名称是,NULL,,可以使用,GROUPING,函数来判断该组是否是经过组合得到的。实际上,使用,CUBE,关键字可以生成多维数据。,下面,通过一个示例讲述这两个关键字的特点。,11/16/2024,25,7.11,连接技术,在设计表时,为了提高表的设计质量,经常把相关数据分散在不同的表中。但是,在使用数据时,需要把这些数据集中在一个查询语句中。连接技术可以满足这种客观需求。,在,Microsoft SQL Server 2005,系统中,这种连接操作又可以细分为交叉连接、内连接、外连接等。下面分别研究这些连接技术。,11/16/2024,26,交叉连接,交叉连接也被称为笛卡尔乘积,返回两个表的乘积。在检索结果集中,包含了所连接的两个表中所有行的全部组合。,例如,如果对,A,表和,B,表执行交叉连接,,A,表中有,5,行数据,,B,表中有,12,行数据,那么结果集中可以有,60,行数据。,11/16/2024,27,内连接,内连接把两个表中的数据连接生成一个第,3,个表,在这个第,3,个表中,仅包含那些满足连接条件的数据行。在内连接中,使用,INNER JOIN,连接运算符,并且使用,ON,关键字指定连接条件。,内连接是一种常用的连接方式,如果在,JOIN,关键字前面没有明确指定连接类型,那么默认的连接类型是内连接。,11/16/2024,28,外连接,在外连接中,不仅包括那些满足条件的数据,而且某些表