1、1数据库与程序设计数据库操作一、创建数据库(page81 ) 【重点程序 page84】创建数据库采用 create database 语句,用来定义数据库名,确定数据库文件和数据库日志文件的属性(名称、位置、大小、最大容量、增长特性等) 。CREATE DATABASE 数据库名ON PRIMARY(NAME=文件名 ,FILENAME=系统路径+文件名.ndf,SIZE=文件大小,MAXSIZE=文件的最大容量 ,FILEGROWTH=每次增容时增加的容量大小)LOG ON(NAME=文件名 ,FILENAME=系统路径+文件名.ldf,SIZE=文件大小,MAXSIZE=文件的最大容量
2、,FILEGROWTH=每次增容时增加的容量大小)GO2、 修改数据库(page85)1.增加数据库文件 ALTER DATABASE 数据库名ADD FILE(NAME=文件名,FILENAME=系统路径+文件名.ndf,SIZE=文件大小,MAXSIZE=文件的最大容量 ,FILEGROWTH=每次增容时增加的容量大小)GO2.增加辅助日志文件ALTER DATABASE 数据库名ADD LOG FILE(NAME=文件名,FILENAME=系统路径+文件名.ldf,SIZE=文件大小,MAXSIZE=文件的最大容量 ,2FILEGROWTH=每次增容时增加的容量大小)GO3.删除数据库文
3、件ALTER DATABASE 数据库名REMOVE FILE 文件名GO4.修改文件USE 数据库名GOALTER DATABASE 数据库名MODIFY FILE(修改的程序语言)三、重命名数据库(page89 )ALTER DATABASE 数据库名MODIFY NAME=修改后的数据库名或者EXEC sp_renamedb数据库名,修改后的数据库名4、 删除数据库(page89)数据表基本操作1、 创建数据表(page90) 【重点程序 page94】1.创建数据表USE 数据库名GOCREATE TABLE 表名(列名+数据类型+是否空值+ 约束)2.查看结构EXEC sp_help
4、 表名2、 修改数据表(page96)1.修改表中某列USE 数据库名GOALTER TABLE 表名ALTER COLUMN 修改的内容32.添加一列USE 数据库名GOALTER TABLE 表名ADD 添加的内容3.删除某一列USE 数据库名GOALTER TABLE 表名DROP COLUMN 列名3、 删除数据表(page98)USE 数据库名GODROP TABLE 表名数据表的基本操作1、 添加记录(page99) 【重点程序 page100】1.插入一条记录USE 数据库名GOINSERT INTO 表名VALUES(插入的数值)2.插入子查询的结果USE 数据库GOINSER
5、T INTO 添加的位置SELECT 选择的数据2、 修改记录(page102 )USE 数据库名GOUPDATE 表名SET 列名+用于取代相应属性的表达式值WHERE 修改条件3、 删除记录(page103 )USE 数据库名4GODELETE FROM 表名WHERE 指定删除条件数据库完整性的实现1、 数据完整性(page104 )数据完整性是指数据的正确性、有效性和相容性,目的是为了防止错误的数据进入数据库。1.实体完整性,也称行完整性。要求表中的所有行有一个唯一的标识符,这种标识符一般称为主键值。主键值能否被修改或表中的数据是否能够被全部删除都要依赖于主键表和其他表之间要求的完整性
6、。2.参照完整性。参照完整性是保证参照表(外键所在的表)与被参照表(主键所在的表)中数据的一致性。如果被参照表中的一行被一个外键参考,那么这一行数据便不能直接被删除,用户也不能直接修改主键值。3.域完整性,也称为列完整性。指定一个数据集对某一个列是否有效和确定是否允许空值。域完整性通常是经过使用有效性检查来实现的,并且还可以通过限制数据的类型、格式或者可能取值范围来实现。二、约束(page105)1.PRIMARY KEY 约束( page106)主键约束作为表的一个属性,可以唯一标识表中的记录。在输入数据时,主键列不能为空且不能有重复值。每个表都应该有且只有一个主键。(1)建立 PRIMAR
7、Y KEY 约束USE 数据库名GOALTER TABLE 表名ADD CONSTRAINT PK_列名 PRIMARY KEY(列名)(2)删除 PRIMARY KEY 约束USE 数据库名GOALTER TABLE 表名DROP CONSTRAINT PK_列名2.FOREIGN KEY 约束( page107)外键约束标识表之间的关系,可以定义为一个列或多个列,这些列参照同一个表或另外的一个表中的 PRIMARY KEY 约束或 UNIQUE 约束列。(1)建立 FOREIGN KEY 约束USE 数据库名GO ALTER TABLE 表名ADD CONSTRAINT FK_表名_ 列名
8、FOREIGN KEY(列名) REFERENCES(参照的列名)(2)删除 FOREIGN KEY 约束5USE 数据库名GOALTER TABLE 表名DROP CONSTRAINT FK_表名_ 列名3.UNIQUE 约束唯一值约束规定表中某一列或多个列不能有相同的两行两行以上的数据存在。这种约束用来强制实体完整性。(1)建立 UNIQUE 约束USE 数据库名GOALTER TABLE 表名ADD CONSTRAINT IX_表名_列名UNIQUE(列名)(2)删除 UNIQUE 约束USE 数据库名GOALTER TABLE 表名DROP CONSTRAINT IX_表名_列名4.C
9、HECK 约束条件约束通过指定的逻辑表达式来限制列的取值范围,只有当逻辑表达式为真时,才满足列的取值要求。干约束用来加强域完整性。可以为每列指定多个 CHECK 约束。(1)建立 CHECK 约束USE 数据库名GOALTER TABLE 表名ADD CONSTRAINT CK_表名_列名 CHECK(约束条件)(2)删除 CHECK 约束USE 数据库名GOALTER TABLE 表名DROP CONSTRAINT CK_表名_列名三、默认(page112)1.创建 DEFAULT 约束USE 数据库名GOALTER TABLE 表名ADD CONSTRAINT DF_表名_ 列名DEFAU
10、LT 默认值 FOR 列名2.使用默认值USE 数据库名GOCREATE DEFAULT DF_列名 AS 默认值3.绑定默认值6USE 数据库名GOEXEC sp_bindefault DF_列名,表名.列名4.删除默认值USE 数据库名GODROP DEFAULT DF_表名_列名四、规则(page114)1.创建规则并绑定到列USE 数据库名GOCREATE RULE 要创建的规则名称 AS 指定规则的条件GOsp_bindruleR_列名,表名 .列名2.删除规则USE 数据库名GODROP RULE R_列名索引1、 索引的分类(page117 )1.按索引的顺序和表中记录的物理存储
11、顺序是否相同。(1)聚集索引(2)非聚集索引2.按索引值是否唯一(1)唯一索引(2)非唯一索引2、 创建索引(page117 ) 【重点程序 page119】USE 数据库名GOCREATE UNIQUECLUSTEREDNONCLUSTEREDINDEX IX_表名 _列名ON 表名(列名)3、 管理索引(page120 )1.查看索引7USE 数据库名GOEXEC sp_helpindex 表名2.重命名索引USE 数据库名GOEXEC sp_rename表名.IX_ 表名_列名,IX_表名 _列名,index3.删除索引USE 数据库名GODROP INDEX 表名.IX_表名_列名数据
12、管理1、 基本查询(page127 ) 【重点程序 page128】各参数说明如下:ALL:返回结果集中的所有行,是系统默认值。DISTINCT:指明结果集中如果有值相同的行,则指显示其中的一行。TOP:指明仅返回结果集中的前 n 行。PERCENT:指明仅返回结果集中的前百分之 n 行。1.查询指定的数据列(1)查询全部列USE 数据库名GOSELECT * FROM 表名(2)查询指定的列USE 数据库名GOSELECT 列名,列名 FROM 表名(3)消除取值重复的行USE 数据库名GOSELECT DISTINCT 列名 FROM 表名2.改变列标题USE 数据库名GOSELECT 列
13、标题=列名,列名 AS 列标题 FROM 表名3.数据运算USE 数据库名GOSELECT 列名 AS 列标题FROM 表名82、 条件查询(page130 )查询条件 谓词比较 =,=,!,!(5)空值USE 数据库名GOSELECT 列名 FROM 表名WHERE 列名 IS NOT NULL(6)多重条件USE 数据库名GOSELECT 列名 FROM 表名WHERE 条件 ANDORNOT 条件3、 排序(page134 )1.查询结果排序USE 数据库名9GOSELECT 列名 FROM 表名WHERE 条件ORDER BY 列名,列名 ASCDESC2.选取查询结果的前几行数据US
14、E 数据库名GOSELECT TOP 列名 FROM 表名WHERE 条件ORDER BY 列名,列名 ASCDESC4、 查询输出(page135 )1.存储到基本表中USE 数据库名GOSELECT 列名 INTO 基本表 FROM 表名WHERE 条件2.存储到临时表中USE 数据库名GOSELECT 列名 INTO #临时表 FROM 表名WHERE 条件5、 聚合查询(page136 )1.SELECT 子句中的聚合在 SELECT 子句中可以使用聚合函数进行运算,运算结果作为新列出现在结果集中。在聚合运算的表达式中可以包括列名、常量以及由算式运算符连接起来的函数。函数 功能COUN
15、T(DISTINCT|ALL*) 统计记录个数COUNT(DISTINCT|ALL) 统计一列中值的个数SUM(DISTINCT|ALL) 计算一列值的总和(此列必须是数值型)AVG(DISTINCT|ALL) 计算一列值的平均值(此列必须是数值型)MAX(DISTINCT|ALL) 求一列值中的最大值MIN(DISTINCT|ALL) 求一列值中的最小值USE 数据库名GOSELECT 函数(列名) AS 列标题 FROM 表名2.COMPUTE 子句中的集合在 SELECT 子句中出现聚合函数时,结果集中的数据全是聚合值,没有明细值。COMPUTE子句不仅可以使用聚合函数计算聚合值,而且可
16、以依然保持原有的明细值;新的聚合值作为附加的汇总列出现在结果集的最后。需要注意的是,COMPUTE 子句中不允许使用 DISTINCT 关键字。106、 分组查询(page138 )GROUP BY 子句对查询结果按照一定条件进行分组,分组子句通常与 SQL Server 提供的聚合函数一起使用。对查询结果分组的目的是为了细化聚合函数的作用对象,如果未对查询结果分组,则聚合函数将作用于整个查询结果,分组后聚合函数将作用于每一个组,每一个组都有一个函数值。SELECT 语句后的输出列只能是聚合函数和分组列。1.使用 GROUP BY 子句SELECT 列名 FROM 表名GROUP BY 列名2
17、.使用 WITH 选项(1)使用 CUBE 操作符SELECT 列名 FROM 表名GROUP BY 列名 WITH CUBE(2)使用 ROLLUP 操作符SELECT 列名 FROM 表名GROUP BY 列名 WITH ROLLUP3.使用 HAVING 子句SELECT 列名 FROM 表名GROUP BY 列名 HAVING 子句指定筛选条件7、 连接查询(page140 )一个查询同时涉及两个或者两个以上的表,并且每一个表中的数据往往作为一个单独的列出现在结果中,则需要用到连接查询。连接查询操作类型:INNER:内连接,指定返回两个表中所有匹配的行,此项是默认值。LEFTOUTER
18、:左外连接,返回连接查询左边的表中的相应记录,在右表中对应于左表中无记录的部分用 NULL 表示。RIGHTOUTER:右外连接,返回连接查询两个表中所有的相应记录,在左表中对应于右表中无记录的部分用 NULL 表示。FULLOUTER:完全外联结,返回连接查询两个表中所有的相应记录,对应于无记录的部分用 NULL 表示。JOIN:指示制定的连接操作应在制定的表源或视图之间执行。1.交叉连接(1)用谓词表示交叉连接SELECT 表名.列名,表名 .列名 FROM 表名,表名(2)用 JOIN 关键字表示交叉连接SELECT 表名.列名,表名 .列名 FROM 表名 CROSS JOIN 表名2
19、.内连接11用谓词表示等值连接SELECT 表名.列名,表名 .列名 FROM 表名,表名WHERE 表名.列名=表名.列名用 JOIN 关键字表示等值连接SELECT 表名.列名,表名 .列名 FROM 表名 INNER JOIN 表名 ON 表名.列名=表名.列名3.外连接左外连接SELECT 表名.列名,表名 .列名FROM 表名 LEFT OUTER JOIN 表名 ON 表名 .列名=表名.列名WHERE 条件右外连接SELECT 表名.列名,表名 .列名FROM 表名 RIGHT OUTER JOIN 表名 ON 表名 .列名=表名.列名WHERE 条件8、 嵌套查询(page14
20、5 )1.单值嵌套查询子查询的返回结果是一个值的嵌套查询称为单值嵌套查询。当能确切知道子查询返回的是单值时,可以用,=,等比较运算符将一个表达式的值与子查询返回的值进行比较运算。SELECT 列名,列名 FROM 表名WHERE 列名 =查询名称 AND 列名 比较运算符(SELECT 函数(列名) FROM 表名 WHERE 列名=查询名称)2.多值嵌套查询子查询的返回结果是一列值的嵌套查询。(1)使用NOTIN 运算符SELECT 列名,列名,列名FROM 表名WHERE 列名 NOT IN(SELECT 列名 FROM 表名 WHERE 条件)(2)利用谓词 ANY 或 ALLSELEC
21、T 列名,列名,列名FROM 表名WHERE 列名 比较运算符 ALL/ANY(SELECT 列名 FROM 表名 WHERE 条件)3.使用谓词 EXISTS 的子查询SELECT 列名 FROM 表名WHERE EXISTS (SELECT 列名 FROM 表名 WHERE 条件)9、 组合查询(page148 )两个查询语句之间可以进行集合运算。其中 UNION 运算符表示并集运算,EXCEPT 运算符表示差运算,INTERSECT 表示交运算。1.并运算(UNIONALL 用来将多个查询结果集合并起来,如果不加 ALL,系统自动去掉重复的记录,加上 ALL 系统会自动保留全部记录。 )
22、12SELECT 列名,列名 FROM 表名 WHERE 条件UNION SELECT 列名,列名 FROM 表名 WHERE 条件2.差运算(从左查询中返回右查询中没有找到的非重复值)SELECT 列名,列名 FROM 表名 WHERE 条件EXCEPTSELECT 列名,列名 FROM 表名 WHERE 条件3.交运算(返回左右两个查询语句都包含的所有非重复值)SELECT 列名,列名 FROM 表名 WHERE 条件INTERSECTSELECT 列名,列名 FROM 表名 WHERE 条件视图及其应用1、 视图的概述(page150 )1.视图的含义视图一经定义之后,就可以像基本表一样
23、被查询、添加、修改和删除。当对通过视图看到的数据进行添加、修改和删除时,相应的基本表中的数据也会发生变化;同时,当基本表的数据变化时,也会自动反映到视图之中。2.使用视图的优点数据保密简化用户权限的管理集中用户使用的数据简化查询操作保证数据的逻辑独立性2、 创建视图(page151 ) 【重点程序 page154】USE 数据库名GOCREATE VIEW VW_视图名称(列标题,列标题,列标题)ASSELECT 列名,列名,列名FROM 表名WHERE 条件GO3、 维护视图(page154 ) 【重点程序 page155】1.查看视图信息USE 数据库名GO 13EXEC sp_helpt
24、ext VW_视图名称GO2.修改视图的定义ALTER VIEW VW_视图名称ASSELECT 列名 AS 列标题,列名 AS 列标题,列名 AS 列标题FROM 表名WHERE 条件3.视图的重命名USE 数据库名GO EXEC sp_rename VW_视图名称, VW_修改后的视图名称4.视图的删除USE 数据库名GO DROP VIEW VW_视图名称4、 视图数据操作(page157)1.查询视图数据SELECT 列名FROM VW_视图名称WHERE 条件2.更新视图数据插入数据USE 数据库名GOINSERT INTO VW_视图名称VALUES(数据值 ,数据值 ,数据值,数
25、据值)修改数据UES 数据库名GOUPDATE VW_视图名称SET 修改的语句WHERE 条件删除数据USE 数据库名GODELETE FROM VW_视图名称WHERE 条件14存储过程1、 创建存储过程(page163) 【重点程序 page165】1.不适用参数,创建存储过程USE 数据库名GOCREATE RROC 存储过程名称ASSELECT 表名.列名,表名 .列名,表名.列名FROM 表名,表名,表名WHERE 条件GO2.执行存储过程USE 数据库名GO EXEC 存储过程名称GO3.使用参数,创建存储过程USE 数据库名GOCREATE PROC 存储过程名称 (变量 数据
26、类型, 变量 数据类型)ASSELECT 表名.列名,表名 .列名,表名.列名FROM 表名,表名,表名WHERE 含有变量的条件GO4.执行含有参数的存储过程USE 数据库名GOEXEC 存储过程名称 变量值,变量值5.使用默认参数,建立存储过程USE 数据库名GOCREATE RROC 存储过程名称( 变量 数据类型= 变量值,变量 数据类型=变量值)ASSELECT 表名.列名,表名 .列名,表名.列名FROM 表名,表名,表名WHERE 含有变量的条件GO6.执行使用默认参数的存储过程USE 数据库名GOEXEC 存储过程名称15GO7.使用返回参数【重点程序 page167】2、 存
27、储过程管理(page168)1.查看存储过程的源代码USE 数据库名GOEXEC sp_helptext 存储过程名称GO2.修改存储过程USE 数据库名GOALTER PROC 存储过程名称AS SELECT 表名.列名,表名 .列名,表名.列名FROM 表名,表名,表名WHERE 条件GO3.重命名存储过程USE 数据库名GOEXEC sp_rename 存储过程名称,修改后的存储过程名称4.删除存储过程USE 数据库名GODROP PROC 存储过程名称GO触发器1、 触发器概述(page170-page172 )2、 创建触发器(page172 ) 【重点程序 page174】USE
28、数据库名GOCREATE TRIGGER 触发器名称 ON 表名FOR INSERT,UPDATE,DELETEAS程序语句GO163、 触发器的管理1.查看触发器的定义信息USE 数据库名GOEXEC sp_helptext 触发器名称GO2.修改触发器USE 数据库名GOALTER TRIGGER 触发器名称 ON 表名FOR INSERT,UPDATE,DELETEAS程序语句GO3.删除触发器USE 数据库名GODROP TRIGGER 触发器名称GO4.禁止和启用触发器USE 数据库名GOALTER TABLE 表名ENABLE|DISABLE TRIGGER 触发器名称GO自定义函
29、数1、 自定义函数概述(page177)自定义函数的优点:1.允许模块化设计2.执行速度更快3.减少网络流量2、 自定义函数创建与管理(page178)1.创建用户自定义函数USE 数据库名GOCREATE FUNCTION 自定义函数名称 (用户自定义参数 数据类型)RETURNS 标量用户定义的返回值17ASBEGIN自定义函数语句RETURN 指定标量函数返回的标量值END2.使用用户自定义函数USE 数据库名GOSELECT dbo.自定义函数名称 (参数值)AS 列标题GO3.修改用户自定义函数USE 数据库GOALTER FUNCTION 自定义函数名称 (用户自定义参数 数据类型)RETURNS 标量用户定义的返回值ASBEGIN自定义函数语句RETURN 指定标量函数返回的标量值END4.删除用户自定义函数USE 数据库名GODROP FUNCTION 自定义函数名称GO