《数据库技术及应用——sqlserver教学课件作者库波第6章》由会员分享,可在线阅读,更多相关《数据库技术及应用——sqlserver教学课件作者库波第6章(25页珍藏版)》请在金锄头文库上搜索。
1、第六章 数据的管理和查询,任务1 掌握基本表数据管理方法 对 FT数据库中的基本表插入数据、修改数据、 删除数据。 任务2 掌握SQL数据查询 对 FT数据库中的数据进行各种查询,6.1 数据更新,6.1.1 向表中添加数据,1. 使用企业管理器向表中添加数据,图6.1 “编辑前200行”命令,图6.2 输入记录,2. 使用T-SQL语句向表中添加数据 在Transact-SQL中使用INSERT语句插入数据记录,语法格式如下: INSERT INTO table_name column1,column2,columnN VALUES(value1,value2,valueN) 各项参数含义如
2、下: Table_name:插入数据记录的表的名称。 Column1,column2,columnN:表示要插入数据的列,多列之间用逗 隔开。该项内容可以省略,如果省略表示向数据表中插入整行数据。 Value1,value2,valueN:表示插入的数据记录的值。 在使用INSERT VALUES语句的时候,要注意以下几条原则: 插入的新行数据必须满足被插入记录表的约束关系,否则该操作将不 会成功; 使用VALUES子句指定需要插入的数据,其数据的类型和顺序必须和 column1,columnN中列的数据类型及顺序相对应,保持一致。 如果列存在默认值或允许空值,就可以在column1,colu
3、mn2,columnN中忽略该列。SQL-Server将自动插入。,6.1.1 向表中添加数据,6.1.2 修改表中的数据,1. 使用企业管理器修改表中的数据,图6.5 定位到要更改的记录,图6.6 修改记录的内容,2. 使用T-SQL语句修改表中的数据,利用Transact-SQL中的UPDATE语句可以对数据记录进行修改。该语句 可以一次更新一条或者多条数据记录,也可以一次更新数据表中的所有 数据记录。 UPDATE语句的语法格式如下: UPDATE table_name SET column1=value1, column2=value2, columnN=valueN WHERE co
4、ndition 各项参数含义如下: table_name:指定要修改数据的表的名称,一次只能修改一个表中 的数据。 column1:更新数据的字段名称。 value:更新后的数据。 WHERE condition:条件表达式,指定修改满足条件表达式的数据记录。 注意:如果省略WHERE condition条件表达式,数据表中的所有记录将被修改。,6.1.2 修改表中的数据,随着数据库的使用和对数据的修改,表中存在着一些无 用的数据,这些数据不仅占用空间,还会影响修改和查询的 速度,所以要及时删除它们。 1. 使用企业管理器删除表中的数据,图6.12 选择“删除”,图6.13 确认删除提示框,6
5、.1.3 删除表中的数据,(1)使用DELETE语句删除数据记录 T-SQL语言提供了DELETE语句用来从表或视图中删除一行或多行记录。其语句 语法如下: DELETE FROM table_name | view_name WHERE search_conditions 与UPDATE语句一样,若忽略WHERE子句,将删除表中所有的行。 注意: DELETE语句不能删除单个列的值(可用UPDATE),只能删除表中的整行记录; 同INSERT、UPDATE一样,从一个表中删除某行记录必须不违背数据库中的任 何约束,否则SQL Server将拒绝执行该操作。在修改数据库时,头脑中应该始 终不要
6、忘记这个潜在问题。 使用DELETE语句仅删除行记录,不删除表本身(可用DROP TABLE语句)。,(2)使用TRUNCATE TABLE语句删除数据 在SQL Server中,除了使用DELETE语句删除数据记录之外,还可以使用TRUNCATE TABLE语句删除数据。该语句的功能是删除数据表中的所有数据记录,因此也称为清除表数据语句。 TRUNCATE TABLE语句语法格式如下:TRUNCATE TABLE table_name,6.1.3 删除表中的数据,2. 使用T-SQL语句删除表中的数据,TRUNCATE TABLE语句与DELETE语句的对比如下: TRUNCATE TABL
7、E在功能上与不带WHERE子句的DELETE语句相同,二者均删除表中的全部行。 DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项,而TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE TABLE比DELETE速度快,且使用的系统和事务日志资源少,删除数据不可恢复,而DELETE语句操作可以通过事务回滚,恢复删除的操作。 需要说明的是,如果要删除的表被其他表建立了外键引用,则无法删除该表的数据。如果要删除记录,则要先删除引用表的FOREIGN KEY引用。,6.2 数据的查询,6.2.1 SELECT查询语句
8、,SELECT ALL | DISTINCT TOP n表达式列表 INTO 新表名 FROM 基本表 | 视图名列表 WHERE 查询条件 GROUP BY 分组列名表 HAVING 逻辑表达式 ORDER BY 排序列名表ASC | DESC SELECT子句:指定由查询结果返回的列。 ALL:表示返回查询的所有记录。 DISTINCT:表示在返回查询结果时,去掉重复的数据记录。 TOP n:返回查询结果集中的前N行。 INTO子句:将查询结果存储到新表或视图中。 FROM子句:用于指定数据源,即引用的列所在的表或视图。如果对象不止一个,那么 它们之间必须用逗号分开。 WHERE子句:指定
9、用于限制返回的行的搜索条件。如果SELECT语句没有WHERE子句,DBMS 假设目标表中的所有行都满足搜索条件。 GROUP BY子句:指定用来放置输出行的组,并且如果SELECT子句表达式列表中包含聚合 函数,则计算每组的汇总值。 HAVING子句:指定组或聚合函数的搜索条件。HAVING通常与GROUP BY 子句一起使用。 ORDER BY子句:指定结果集的排序方式。ASC关键子表示升序排列结果,DESC关键字表 示降序排列结果。如果没有指定任何一个关键字,那么ASC就是默认的关键字。如果没 有ORDER BY子句,DBMS将根据输入表中数据的存放位置来显示数据。,注意: 在这一系列的
10、子句中,SELECT子句和FROM子句是必 需的,其他的子句根据需要都是可选的。 在SELECT语句中,子句的顺序非常重要。即当执行SELECT语句时,DBMS的执行步骤如下:SELECT,INTO,FROM ,WHERE,GROUP BY,HAVING,ORDER BY。,1、查询指定列,2、查询所有列,3、使用运算列,4、改变列标题显示,5、为结果集消除重复列,6.2.2 简单查询,6、限制返回行数,大多数查询都不希望得到表中所有的记录,而是一些满足条件的记 录,这时就要用到WHERE子句。在SELECT查询语句中,WHERE子句是可选的,用于指定查询条件,使得SELECT语句的结果表中只
11、包含那些满足查询条件的记录。使用WHERE子句时,WHERE子句必须紧跟在FROM子句后面。 语法格式如下: SELECT ALL | DISTINCT TOP n表达式列表 FROM 基本表 | 视图名列表 WHERE 条件表达式 条件表达式是通过运算符连接起来的逻辑表达式,常用的运算符见表6.1。 6.1 常用的运算符,6.2.3 单表有条件查询,用户可以利用ORDER BY子句对查询结果按照一个或多个字段进行升序( ASC)或降序(DESC)排序,默认值为升序。语法格式如下: SELECT ALL | DISTINCT TOP n 表达式列表 FROM 基本表 | 视图名列表 WHERE
12、 查询条件 ORDER BY 排序列名表ASC | DESC 注意: 当指定ASC选项时,将最后显示属性列为空值的记录。当指定DESC选项时,将最先显示属性列为空值的记录。 如果有多个列名,各列在ORDER BY子句中的顺序决定了排序过程中的优先级,即查询结果首先以第一列值的顺序进行排序,而只有当第一列出现相同的值时,这些数据行再按第二列值的顺序进行排序,以此类推。 Ntext、text、image或xml类型的列,不能用于ORDER BY子句。 除非同时指定TOP,否则ORDER BY子句在视图、内联函数、派生表和子查询中无效。 如果指定了SELECT DISTINCT,那么ORDER BY
13、子句中的项就必须出现在选择列表中。 ORDER BY子句一定要放在以上所有子句的最后。,6.2.4 排序子句,1、聚合函数 SQL Server的聚合函数是综合信息的统计函数,也称为聚集函数或集函数,是T-SQL所提供的系统函数,可以返回一列、几列或全部列的汇总数据,用于计数或统计。常用的聚合函数如表6.3所示。 表6.3聚合函数的具体用法及含义,6.2.5 分组与汇总,聚合函数对一组值执行计算,并返回单个值。如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。如果不指定DISTINCT短语或指定ALL短语(ALL为默认值),则表示不取消重复值。除了COUNT以外,聚合函数都会
14、忽略空值。,2、分组汇总 使用聚合函数只返回单个汇总,而在实际应用中,更多 的是需要进行分组汇总数据,如汇总每个同学的平均分、总 分等。使用GROUP BY 子句可以进行分组汇总,为结果集中 的每一行产生一个汇总值。 GROUP BY子句与聚合函数有密切关系,在某种意义上说,如果没有聚合函数,GROUP BY子句也没有多大用处了。 语法格式如下: SELECT ALL | DISTINCT TOP n表达式列表 FROM 基本表 | 视图名列表 WHERE 查询条件 GROUP BY 分组列名表,6.2.5 分组与汇总,3、分组筛选 如果使用GROUP BY子句分组,则还可用HAVING子句对
15、分组后的结果进 行过滤筛选。HAVING子句通常与GROUP BY子句一起使用,用于指定组或合计的搜索条件,其作用与WHERE子句相似,二者的区别如下: (1)作用对象不同:WHERE子句作用于表和视图中的行,而HAVING子句作用于形成的组。WHERE子句限制HAVING子句限制查找的组。 (2)执行顺序不同。若查询语句中同时有WHERE子句和HAVING子句,执行时,先去掉不满足WHERE条件的行,然后分组,分组后再去掉不满足HAVING条件的组。 (3)WHERE子句中不能直接使用聚合函数,但HAVING子句的条件中可以包含聚合函数。 HAVING子句的语法如下: SELECT ALL
16、| DISTINCT TOP n表达式列表 FROM 基本表 | 视图名列表 WHERE 查询条件 GROUP BY 分组列名表 HAVING 逻辑表达式,6.2.5 分组与汇总,4、明细汇总 使用GROUP BY子句对查询数据进行分组汇总,为每一个组产生一个汇总结果, 每个组只返回一行,无法看到详细信息。使用COMPUTE和COMPUTE BY子句既能够看 到统计汇总的结果又能够浏览详细数据。语法如下: SELECT ALL | DISTINCT TOP n表达式列表 FROM 基本表 | 视图名列表 WHERE 查询条件 ORDER BY 排序列名表ASC | DESC COMPUTE 集函数 BY 列名,注意: