SQL - SERVER2000教程(6)

2019-01-12 13:42

SET @Var_Sum=0 --进行求和循环 LoopSum:

SET @Var_Sum=@Var_Sum+@Var_Number SET @Var_Number=@Var_Number+1 IF @Var_Number<100 GOTO LoopSum

PRINT '1+2+...+100='+CAST(@Var_Sum as char(10)) 输出结果:1+2+...+100=4950

第二十一节 使用CASE语句、SUM函数、AVG函数进行综合数据统计

DROP TABLE 成绩表 GO

CREATE TABLE 成绩表(班组 VARCHAR(10),姓名 VARCHAR(6),学科 VARCHAR(4),成绩 INT) GO

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('一班','王小明','数学',100) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('一班','王小明','语文',98)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('一班','王小明','英语',76) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('一班','李小东','数学',97)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('一班','李小东','语文',99) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('一班','李小东','英语',85)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','刘小刚','数学',100) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','刘小刚','语文',100)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','刘小刚','英语',96) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','张小英','数学',96)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','张小英','语文',88) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','张小英','英语',66)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','周小侠','数学',84) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','周小侠','语文',98)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('二班','周小侠','英语',76) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('三班','张大利','数学',99)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('三班','张大利','语文',100) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('三班','张大利','英语',100)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('三班','张冬杰','数学',50) INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('三班','张冬杰','语文',88)

INSERT INTO 成绩表(班组,姓名,学科,成绩) VALUES('三班','张冬杰','英语',46)

--竖表变横表 SELECT 班组, 姓名,

SUM(CASE 学科 WHEN '数学' THEN 成绩 ELSE 000 END) AS 数学, SUM(CASE 学科 WHEN '语文' THEN 成绩 ELSE 000 END) AS 语文, SUM(CASE 学科 WHEN '英语' THEN 成绩 ELSE 000 END) AS 英语, AVG(CASE 学科 WHEN '数学' THEN 成绩 ELSE 000 END+ CASE 学科 WHEN '语文' THEN 成绩 ELSE 000 END+

CASE 学科 WHEN '英语' THEN 成绩 ELSE 000 END) AS 平均成绩 INTO 成绩表横表 FROM 成绩表 GROUP BY 班组,姓名 ORDER BY 平均成绩 DESC

第二十二节 利用UNION对多条SQL查询语句合并生成表

--横表变竖表

SELECT 班组,姓名,'数学' AS 学科,数学 AS 成绩 INTO 成绩表竖表 FROM 成绩表横表 UNION

SELECT 班组,姓名,'语文' AS 学科,语文 AS 成绩 FROM 成绩表横表 UNION

SELECT 班组,姓名,'英语' AS 学科,英语 AS 成绩 FROM 成绩表横表 ORDER BY 班组

第二十三节 将具有相同字段的记录删除,只留下一条

在SQL Server中除了对拥有十几条记录的表进行人工删除外,实现删除重复记录一般都是写一段代码,用游标的方法一行一行检查,删除重复

的记录。因为这种方法需要对整个表进行遍历,所以对于表中的记录数不是很大的时候还是可行的,如果一张表的数据达到上百万条,用游标的方

法来删除简直是个噩梦,因为它会执行相当长的一段时间。在SQL Server中有一种更为简单的方法,它不需要用游标,只要写一句简单插入语句

就能实现删除重复记录的功能。为了能清楚地表述,我们首先假设存在一个产品信息表Products,其表结构如下:

CREATE TABLE Products ( ProductID int, ProductName nvarchar (40), Unit char(2), UnitPrice

money )

假设产品Chang和Tofu的记录在产品信息表中存在重复。现在要删除这些重复的记录,只保留其中的一条。 步骤如下:

第一步——建立一张具有相同结构的临时表

CREATE TABLE Products_temp ( ProductID int, ProductName nvarchar (40), Unit char(2), UnitPrice money )

第二步——为该表加上索引,并使其忽略重复的值 手动设置:方法是在企业管理器中找到上面建立的临时表Products _temp,单击鼠标右键,选择所有任务,选择管理索引,选 择新建。然后设置索引选项。

代码:CREATE UNIQUE INDEX [索引名] ON [表名]([索引字段名1], [索引字段名2]) WITH IGNORE_DUP_KEY ON [PRIMARY] IGNORE_DUP_KEY

控制当尝试向属于唯一聚集索引的列插入重复的键值时所发生的情况。如果为索引指定了 IGNORE_DUP_KEY,并且执行了创建重复

键的 INSERT 语句,SQL Server 将发出警告消息并忽略重复的行。如果没有为索引指定 IGNORE_DUP_KEY,SQL Server 会发出一 条警告消息,并回滚整个 INSERT 语句。 第三步——拷贝产品信息到临时表

insert into Products_temp Select * from Products

此时SQL Server会返回如下提示: 服务器: 消息 3604,级别 16,状态 1,行 1 已忽略重复的键。 它表明在产品信息临时表Products_temp中不会有重复的行出现。 第四步——将新的数据导入原表 将原产品信息表Products清空,并将临时表Products_temp中数据导入,最后删除临时表Products_temp。

truncate table Products insert into Products select * from Products_temp drop table Products_temp

这样就完成了对表中重复记录的删除。无论表有多大,它的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很

安全的。 注意:上述方法中删除重复记录取决于创建唯一索引时选择的字段,在实际的操作过程中读者务必首先确认创建的唯一索引字段是否正 确,以免将有用的数据删除。

第二十四节 使用table数据类型变量获得临时表

Table数据类型是一种特殊的数据类型,用于存储结果集以供后续处理。该数据类型主要用于临时存储一组行,这些行将作为表值函数的结果集返回

Table数据类型最主要的用途是作为多条数据记录的临时存储之处,此外还可以作为一个用户定义函数的返回值。

用户需要注意使用DECLARE @local_variable来声明table类型的变量 --声明TABLE变量@Var_tableGoods DECLARE @Var_tableGoods TABLE (

订单编号 [int] NOT NULL, 书籍编号 [int] NOT NULL, 单价 [money] NOT NULL, 数量 [smallint] NOT NULL,

折扣 [real] NOT NULL )

--将”作者表”中统计的数据添加到TABLE变量@Var_tableAuthor INSERT INTO @Var_tableGoods SELECT * FROM 订货表

--将TABLE变量@Var_tableAuthor中的内容显示出来 SELECT * FROM @Var_tableGoods Table变量有以下优点:

1)Table变量的行为类似于局部变量,定义有明确的作用域,该作用域为声明该变量的函数、存储过程或批处理的作用范围。

2)在其作用域内,table变量可像常规表那样使用。该变量可应用于SELECT、INSERT、UPDATE和DELETE语句中用到表或表的表达式的地方。

3)在定义table变量的函数、存储过程或批处理结束时,自动清除table变量 4)在存储过程中使用表变量与使用临时表相比,减少了存储过程的重新编译量。

5)涉及表变量的事务只在表变量更新期存在,这样就减少了表变量对锁定和记录资源的需求。

6)不支持在表变量之间进行赋值操作。另处,由于表变量作用域有限,并且不是持久数据库的一部分,因而不受事务回滚的影响。

第二十五节 从SQLSERVER2000中随机提取N条记录 select top N 字段名 from 表名 order by newid() N为本次要提取的记录数量 NEWID

创建 uniqueidentifier 类型的唯一值。 语法 NEWID ( ) 返回类型 uniqueidentifier

下面的SQL语句从表中提取前10条记录,记录按NEWID()函数产生的唯一值进行排序

select top 10 study_matter,study_data from study_english_小学英语 order by newid()

第六章 索引与视图

第一节 索引

1.1 索引的概述

索引是数据库的一种对象,利用索引可以快速检索表中的数据。索引经常被建立在表的主键,外 键或哪些经常访问的字段。一般对于记录较少的表格可不创立索引; 1.2 索引的分类

A.聚集索引:实际物理数据的行次序与索引次序相同。创建聚集时会对表中的数据重新排序每个表只有一个

聚集索引;使用主键或唯一性约束性该索引自动创立。

B.非聚集索引:是SQLServer中默认的索引类型。表的逻辑次序由索引指定。每个表可以有多个非聚集索引。

C.唯一性索引和组合索引:聚集索引和非聚集索引中又可以创建唯一性索引,可以确保表中索引的列值不重

复;还可将多个列组合在一起创建一个组合索引,组合索引效率更高一些。 1.2 索引的格式


SQL - SERVER2000教程(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:[最新推荐]大学生暑假兼职打工的心得体会-范文模板(3页)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: