您现在的位置是:首页 >技术交流 >SQL Server 2016版 实用教程 知识复习网站首页技术交流
SQL Server 2016版 实用教程 知识复习
一 、基本概念
数据
数据是格式化的信息
数据库
数据库是按照某种数据模型组织数据的文件
数据库删除后不能恢复
数据库管理系统
数据库管理系统是对数据库进行管理的软件
数据库系统
数据库系统=数据+数据库+数据管理系统与操作数据库的应用程序
采用关系数据库管理系统 ,SQL命令等操作关系数据库
实体
每一类数据对象的个体成为“实体”
属性
每个实体集涉及的信息项成为属性
表
数据存放在表中
表结构
组成表的各列的名称及数据类型,统称为表结构。
记录
每个表包含若干行数据,它们是表的值,表中的一行称为一个记录。表是记录的有限集合。
字段
每个记录有若干个数据项构成,将构成记录的每个数据项称为字段。例如,学生表(表结构:学号,姓名,出生时间,专业,总学分,备注),包含7个字段,由5个记录组成。(5条数据)
空值
空值(NULL),通常表示未知,不可用或在以后添加数据。
若一个列允许为空值,则向表中输入记录时可不为该列给出具体值;
而一个列若不允许为空值,则在输入时必须给出具体值;
关键字
若表中记录的某一字段或字段组合成唯一标识记录,则称该字段或字段组合为候选关键字(Candidate key)
需注意数据类型
整数型
int 整数 10精度 4字节
smalint 短整数 5精度 2字节
tinyint 微短整数 3精度 1字节
bigint 大整数 19精度 8字节
字符型
字符型数据用于存储字符串,字符串中可包括字母,数字,符号。
在输入字符串时,需将串中的符号用单引号或双引号括起来,如‘abc’,‘c语言’。
定长字符数据类型
char[(n)] : 其中n定义字符数据的长度,n在1~8000之间。默认n=1.若实际存储的串长度不足n时,则在串的尾部添加空格以达到长度n,若输入的字符个数超过n,则超出的部分被截断。
变长字符数据类型
varchar[(n)] :n表示的是字符串可达到的最大长度。实际长度为输入字符串的实际个数,而不一定是n,当列中的字符数据值长度接近一致时,此时可用char,当列中的数据值长度显著不同时,使用varchar较为恰当,可以节省存储空间。
文件组
文件组是SQL Server用于组织多个行数据文件和日志文件
视图
视图是一个或多个基于表中生成的引用表
索引
索引可以对表的记录按某个或某些字段或他们的组合进行逻辑排序。
通过搜索索引表达式的值,可以实现对数据记录的快速访问。
约束
约束用于保障数据的一致性和完整性
存储过程
存储过程是一组为了完成特定功能的SQL语句集合
触发器
触发器是基于一个表的操作(插入、删除、修改)创建,编写若干条T-SQL语句,当该操作发生是,这些T-SQL语句被执行。返回假,当前表的操作不能被执行。
数据库对象
表 视图 索引 约束 存储过程 触发器
语句
FROM
指定数据源
WHERE
指定条件
GROUP BY
指定分组条件
ORDER BY
为输出记录排列顺序
数据完整性
数据完整性是指数据库中的数据在逻辑上的一致性和准确性。数据完整性一般包括实体完整性、域完整性和参照完整性。
二 、数据库及内部表 处理
创
数据库的创建 CREATE DATABASE.mdf / .ldf
--示例 包含1个数据文件和1个日志文件
--创建一个名为text1的数据库,初始大小为5MB,最大为50MB,允许数据库自动增长,增长方式是按10%比例增长。日志文件初始为2MB,最大可增长到5MB,按1MB增长。
CREATE DATABASE test1
ON
(
NAME="test1",
FILENAME="E:MYDB est1.mdf" //filename
SIZE=5MB,
MAXSIZE=50MB,
FILEGROWTH=10% // GROWTH=growth
)
LOG ON
(
NAME="test1_log",
FILENAME="E:MYDB ext1.ldf",
SIZE=2MB,
MAXSIZE=5MB,
FILEGROWTH=1MB
)
表的创建 CREATE TABLE
--示例在数据库cpxs中创建
--产品表(cpb):产品编号,产品名称,单价,库存量
USE cpxs
GO
CREATE TABLE cpb
(
产品编号 char(6) NOT NULL PRIMARY KEY /*l列约束,列的完整性约束,指定列为主键则使用PRIMARY KEY 关键字*/
产品名称 char(12) NOT NULL
单价 float(6.2) Null DEFAULT 0.0,
库存量 int NULL DEFAULT 0,
)
GO
增
数据库文件的增加 ALTER—ADD .ndf
--示例
--为数据库test1增加数据文件test1bak
ALTER DATEBASE test1
ADD
(
NAME="test1bak",
FILENAME="E:MYDB est1bak.ndf",
SIZE=10MB,
MAXSIZE=50MB,
FILEGROWTH=10%
)
表结构的增加 ALTER—ADD
--示例
/*1,增加列 在xsb1表中增加“入学时间”列*/
ALTER TABLE xsb1
ADD 入学时间 date
表数据的增加(插入)INSERT INTO
单条插入
--示例
--向表xsb1中插入记录
(1)插入一行
INSERT INTO xsb1
VALUES('231301','王一平',1,'1990-02-10','工程管理',50,NULL)
(1-2)另一种方法
INSERT INTO xsb1(学号,姓名,性别,出生时间,专业,总学分)
VALUES('191301','王林',1,'1990-02-10','工程管理',50,NULL)
多条插入
--示例
--一次向表中插入2条记录
INSERT INTO xsb1
VALUES
('231301','王一平',1,'1990-02-10','工程管理',50,NULL),
('201302','李意娜',0,'1991-04-12','软件工程',52,NULL)
从其他表插入
--示例
--从xscj数据库表xsb1中生成软件工程专业的学生表(xsb2)
--(1)根据相同的表结构创建表xsb2
--(2)插入数据
INSERT INTO xsb2
SELECT *
FROM xsb1
WHERE 专业='软件工程'
删
数据库的删除 DROP DATABASE
--删除数据库test1
DROP DATABASE test1
数据文件的删除 ALTER–REMOVE FILE
--示例
--删除数据文件test1bak
ALTER DATABASE test1
REMOVE FILE test1bak
表数据的删除
表结构的删除 ALTER-DROP COULUMN
--示例
--删除列:删除入学时间和年龄列
ALTER TABLE xsb1
DROP COULUMN 入学时间、年龄
表记录的删除 DELETE
--示例 删除符合条件记录
--在xsb1表中删除软件工程专业的学生
DELETE
FROM xsb1
WHERE 专业='软件工程'
-----------------------------------------------------
--示例 删除数据库xscj中xsb1和xsb2表中所有记录
USE xscj
DELETE xsb1 /*语法1*/
TRUNCATE TABLE xsb2 /*语法2*/
GO
改
数据库的修改 ALTER DATABASE
--示例 修改文件大小和增长方式
/*修改数据库text1现有的数据文件text1_data的属性,将主数据文件的最大容量改为100MB,增长方式改为按每次5MB增长。*/
ALTER DATABASE test1
MODIFT FILE
(
NAME="test1_data",
MAXSIZE=100MB, /*将主数据文件的最大容量改为100MB*/
FILEGROWTH=5MB /*将主数据文件的增长方式改为按每次5MB增长*/
)
表的修改
表结构的修改 ALTER TABLE
--示例 修改xscj数据库中xsb1表结构
/*1,修改列:修改表xsb1中已有的列的属性:将名为“姓名”的列长度由原来的8改为10,将名为“入学时间”的列的数据类型由原来的date改为 small datetime*/
ALTER TABLE xsb1
ALTER COLUMN 姓名 char(10)
ALTER TABLE xsb1
ALTER COLUMN 入学时间 smalldatetime
表记录的修改 UPDATE
--示例
--将表xsb1表中学号为“231301”的学生备注值改为“外校互认学分课程”,同时将总学分+3
UPDATE xsb1
SET 备注='外校互认学分课程'
总学分=总学分+3
WHERE 学号='231301'
查
表记录的查询
--示例
--使用SELECT语句查询xsb1和xsb2表中的记录
SELECT *
FROM xsb1
GO
SELECT *
FROM xsb2
GO
三 、查询和视图
查询 SELECT
选择查询结果输出列
选择所有列与指定列
--示例 选择所有列 用 '*'
--查询xscj数据库中的xsb表的所有记录
USE xscj
SELECT *
FROM xsb
--示例选择指定列,各列名之间要以逗号分隔
--查询xsb表中计算机专业学生的学号,姓名和总学分
SELECT 学号,姓名,总学分
FROM xsb
WHERE 专业='计算机'
定义列别名
--示例 使用列别名 用 AS 或 = ,有空格时必须用引号
--查询xsb表中计算机系同学的学号,姓名,总学分,查询结果中各列的标题分别指定为number,name,mark
SELECT 学号 AS number,姓名 AS name,总学分 AS mark
FROM xsb
WHERE 专业='计算机'
/*-----------------------------------------------------*/
SELECT number=学号,name=姓名,mark=总学分/*注意这里顺序与q前面不一样*/
FROM xsb
WHERE 专业='计算机'
/*-----------------------------------------------------*/
SELECT 'Student number'=学号,姓名 AS name,mark=总学分
FROM xsb
WHERE 专业='计算机'
替换查询结果中的数据
--示例 对查询结果中数据进行替换方便统计
--查询xsb表中计算机系各同学的学号、姓名和总学分,对其总学分按以下规则进行替换,列标题更改为“等级”
-- 若总学分为空值,则替换为“尚未选课”
-- 若总学分小于50,则替换为“不及格”
-- 若总学分位于50-52之间,则替换为“合格”
-- 若总学分大于52,则替换为“优秀”
SELECT 学号,姓名,等级=总学分
CASE
WHEN 总学分 IS NULL THEN "尚未选课"
WHEN 总学分 < 50 THEN "不及格"
WHEN 总学分 >=50 AND <=52 THEN "合格"
ELSE 优秀
END
FROM xsb
WHERE 专业='计算机'
计算列值
--示例 SELECT 输出表达式
--查询通信工程专业学生的年龄
SELECT 学号,姓名,专业,出生时间,year(get date())-year(出生时间) AS 年龄
FROM xsb
WHERE 专业='通信工程'
消除结果中的重复行
--示例 对表只选择其某些列时,可能会出现重复行。可以使用 DISTINCT关键字消除 结果集 中的重复行
对xscj数据库的xsb表只选择专业,消除 结果集 中的重复行
SELECT DISTINCT 专业
FROM xsb
/*===============================================*/
--保留所有重复行
SELECT ALL 专业
FROM xsb
限制结果集返回行数
--示例 如果查询结果集的行数非常多,那么可以使用TOP选项限制其返回的行数
对xscj数据库的xsb表选择姓名、专业、总学分,返回结果集的前六行
SELECT TOP 6 姓名,专业,总学分
FROM xsb
聚合函数
求和与平均值
--示例 求和: SUM 求平均值: AVG
--求所有课程的总学分和选修101课程的学生的平均成绩
SELECT SUM(学分) AS '总学分'
FROM kcb
SELECT AVG(成绩) AS '计算机基础平均成绩'
FROM cjb
WHERE 课程号 = '101'
最大最小值
--示例 最大值: MAX 最小值: MIN
求选修101课程的学生的最高分和最低分
SELECT
MAX(成绩) AS '计算机基础最高分',
MIN(成绩) AS '计算机基础最低分'
FROM cjb
WHERE 课程号='101'
项数统计
--示例 COUNT :用于统计组中满足条件的行数或总行数
--求学生的总数、专业个数,总分50分以上的学生数
SELECT
COUNT(*) AS '学生总数',
COUNT(DISTINCT 专业) AS '专业个数'
FROM xsb;
GO
SELECT
COUNT(总学分) AS '总学分>50分人数'
FROM xsb
WHERE 总学分>50;
GO
选择查询条件
表达式比较
--示例 9个比较运算符 =,<,>,<=,>=,<>不等于,!= 不等于,!<,!>
--查询xsb表中通信工程专业总学分大于等于42的同学
SELECT *
FROM xsb
WHERE 专业='通信工程' AND 总学分>=42
模式匹配
--示例 LIKE 谓词用于指出字符串是否与指定的字符串相匹配,返回逻辑值TRUE或FALSE
--通配符: % 代表倒数 ,从后往前数不是对数字求逆
-- _ 代表单个字符,
-- [] 指定范围 如[a-f] [0-9] 或集合中的任何单个字符 如[abcdef],
-- [^] 指定不属于范围 如[^a-f],与上例相反
/*======================================================================*/
--查询xsb表中姓王且单名的学生情况
SELECT *
FROM xsb
WHERE 姓名 LIKE '王_'
/*========================================================================*/
--查询xsb表中学号倒数第五个数字为9,且倒数第一个数在1~5之间的学生学号,姓名,及专业
SELECT 学号,姓名,专业
FROM xsb
WHERE 学号 LIKE '%9 _ _ _[1-5]'
范围比较
--示例 BETWEEN : 指出查询范围,包含在范围返回 TRUE 不包含在范围返回 FALSE(可使用 NOT 则返回值逻辑相反)
-- IN ;指定一个值表,列出所有可能的值,与值表中任一个匹配,返回 TRUE 否则返回 FALSE
/*==============================================================================================*/
--查询xsb表中专业为“软件工程” 或 “通信工程”学生情况
SELECT *
FROM xsb
WHERE 专业 IN('软件工程','通信工程')
--等价命令
SELECT *
FROM xsb
WHERE 专业='软件工程' OR 专业='通信工程'
/*==============================================================================================*/
--查询xsb表中不在1995年出生的学生的情况
SELECT 学号,姓名,专业,出生时间
FROM xsb
WHERE 出生时间 NOT BETWEEN '1995-01-01' AND '1995-12-31'
--等价命令
SELECT 学号,姓名,专业,出生时间
FROM xsb
WHERE WHERE year(出生时间)!=1995
空值比较
--示例 IS NULL 返回 TRUE 或 FALSE
--查询总学分尚不定的学生情况
SELECT *
FROM xsb
WHERE 总学分 IS NULL
子查询
IN 子查询
--示例 IN 子查询用于进行一个给定值是否在 子查询 结果集 中的判断
--查询选修了课程号为206的课程的学生情况
SELECT *
FROM xsb
WHERE 学号 IN
( SELECT 学号
FROM cjb
WHERE 课程号='206'
)
/*=================================================================*/
--嵌套查询
--查询未选修离散数学的学生学号和姓名
SELECT 学号,姓名
FROM xsb
WHERE 学号 NOT IN
(
SELECT 学号
FROM cjb
WHERE 课程号 IN
(
SELECT 课程号
FROM kcb
WHERE 课程名='离散数学'
)
)
比较子查询
--示例 表达式的值与子查询的结果进行比较运算
ALL : 每个值都满足比较关系时返回 TRUE
SOME 和 ANY :满足一个或以上就返回 TRUE
/*==============================================================================================*/
--查询选修了离散数学的学生学号和姓名
SELECT 学号,姓名
FROM cjb
WHERE 课程号 =
(
SELECT 课程号
FROM kcb
WHERE 课程名='离散数学'
);
/*==============================================================================================*/
--查询比所有计算机系的学生年龄都大的学生
SELECT *
FROM xsb
WHERE 出生时间 < ALL
(
SELECT 出生时间
FROM xsb
WHERE 专业='计算机'
) /*==============================================================================================*/
--查询206课程号成绩不低于101课程最低成绩的学生
SELECT 学号
FROM cjb
WHERE 课程号='206' AND 成绩 !< ANY
(
SELECT 成绩
FROM cjb
WHERE 课程号='101'
)
EXISTS 子查询
--示例 EXISTS 谓词用于测试子查询的结果是否为空表,若子查询的结果集不为空,返回 TRUE
--查询选修206课程的学生的姓名
/*==============================================================================================*/
SELECT 姓名
FROM xsb
WHERE EXISTS
(
SELECT *
FROM cjb
WHERE 学号=xsb.学号 AND 课程号 = '206'
)
指定查询对象
表或视图名
--示例
--查询191301号学生的计算机基础课的成绩
SELECT 成绩
FROM cjb,kcb
WHERE cjb.课程号=kcb.课程号
AND 学号='191301'
AND 课程名='计算机基础'
连接
连接谓词
--示例 在 SELECT 语句的 WHERE 子句中使用比较运算符给出连接条件对表进行连接,称为连接谓词表示形式
--查询xscj数据库每个学生的情况以及选修课程的情况
USE xscj
GO
SELECT xsb.*,cjb.*
FROM xsb,cjb
WHERE xsb.学号=cjb.学号
自然连接
--示例 它在目标列中去除相同的字段名
SELECT xsb.*,cjb.课程号,cjb.成绩
FROM xsb,cjb
WHERE xsb.学号=cjb.学号
/*==============================================================================================*/
--上例中结果包含xsb的使用字段和课程号、成绩。若选择的字段名在各个表中是唯一的,则省略字段名前的表名
--等价代码
SELECT xsb.*,课程号,成绩 /*省略表名*/
FROM xsb,cjb
WHERE xsb.学号=cjb.学号
/*==============================================================================================*/
--查询选修了206课程且成绩在80分以上的学生的名单
SELECT 姓名,成绩
FROM xsb,cjb
WHERE xsb.学号=cjb.学号 AND 课程号='206' AND 成绩 >= 80
多表连接
--示例 用户所需要的字段来自两个以上的表,那么就要对两个以上的表进行连接,称之为多表连接。
--查询选修了“计算机基础”课程且成绩在80分以上的学生的学号、姓名、课程名、成绩。
SELECT xsb.学号,姓名,课程名,成绩
FROM xsb,kcb,cjb
WHERE xsb.学号=cjb.学号
AND kcb.课程号=cjb.课程号
AND 课程名='计算机基础'
AND 成绩 >= 80
指定查询结果分组方法
--示例 GROUP BY 子句主要用于根据字段进行分组
-- ROLLUP : 生成简单的 GROUP BY 聚合行、小计行或超聚合行,还生成一个总计行,
-- CUBE : 生成简单的 GROUP BY 聚合行、ROLLUP超聚合行和交叉表格行。
-- GROUPING SETS:在一个查询中指定数据的多个分组
/*==============================================================================================*/
--在xscj数据库xsb表中分别用 GROUP BY ROLLUP 、 GROUP BY CUBE 和 GROUP BY GROUP BY GROUPING SETS对(专业、性别)产生一个结果集。
SELECT 专业 ,性别, COUNT(*) AS '人数'
FROM xsb
GROUP BY ROLLUP (专业,性别)
/*-------------------------------------------*/
SELECT 专业,性别, COUNT(*) AS '人数'
FROM xsb
GROUP BY CUBE (专业,性别)
/*-------------------------------------------*/
SELECT 专业,性别, COUNT(*) AS '人数'
FROM xsb
GROUP BY GROUPING SETS(专业,性别)
指定查询结果分组后筛选
--示例 指定 GROUP BY 子句和聚合函数对数据进行分组后,还可以使用 HAVING 子句对分组数据进一步筛选。
/*-------------------------------------------*/
--查询平均成绩在85分以上的学生的学号和平均成绩
SELECT 学号, AVG (成绩) AS '平均成绩'
FROM cjb
GROUP BY 学号
HAVING AVG(成绩)>=85
/*-------------------------------------------*/
--查询选修课程超过两门且成绩都在80分以上的学生的学号
SELECT 学号
FROM cjb
WHERE 成绩>=80
GROUP BY 学号
HAVING COUNT(*)>2
/*-------------------------------------------*/
--查询通讯工程专业平均成绩在85分以上的学生的学号和平均成绩
SELECT 学号, AVG(成绩) AS '平均成绩'
FROM cjb
WHERE 学号 IN
(
SELECT 学号
FROM xsb
WHERE 专业='通信工程'
)
GROUP BY 学号
HAVING AVG(成绩)>=85
指定查询结果排序顺序
--示例 ORDER BY
--将通信工程专业的学生按出生时间先后顺序排序
SELECT *
FROM xsb
WHERE 专业='通信工程'
ORDER BY 出生时间
/*-------------------------------------------*/
--将计算机专业学生的“计算机基础”课程成绩按降序排列
SELECT 姓名,课程名,成绩
FROM xsb,kcb,cjb
WHERE xsb.学号=cjb.学号
AND cjb.课程号=kcb.课程号
AND 课程号='408'/*示例用*/
AND 专业='计算机'
ORDER BY 成绩 DESC
SELECT 其他语法
INTO
--示例 使用 INTO 子句可以将 SELECT 查询所得的结果保存到一个新建的表中。
/*-------------------------------------------*/
--由xsb表创建“计算机学生”表,包括学号和姓名
SELECT 学号,姓名
INTO 计算机学生
FROM xsb
WHERE 专业='计算机'
UNION
--示例 使用 UNION 子句可以将两个或多个 SELECT查询的结果合并成一个结果集。
--使用规则: 1,所有查询中的列数和列的顺序必须相同
2,数据类型必须兼容
/*-------------------------------------------*/
--在“计算机学生”表和“通信工程学生”表中查询学号为191301和学号为221301 的两位同学的姓名
SELECT *
FROM 计算机学生
WHERE 学号='191301'
UNION ALL
SELECT *
FROM 通信工程学生
WHERE 学号='221301'
视图
创建视图
--示例 创建视图: CREATE VIEW
/*-------------------------------------------*/
--创建ccj视图,包括计算机专业个学生的学号、其选修的课程号及成绩。要保证对该视图的修改都符合专业为计算机的这个条件。
CREATE VIEW ccj WITH ENCRYPTION /*ENCRYPTION:在系统表syscomments中存储CREATE VIEW语句时进行加密*/
AS
SELECT xsb.学号,课程号,成绩
FROM xsb,cjb
WHERE xsb.学号=cjb.学号 AND 专业='计算机'
WITH CHECK OPTION
/*-------------------------------------------*/
--创建ccj视图,包括计算机专业个学生的学号、其选修的课程号及成绩。要保证对该视图的修改都符合专业为计算机的这个条件。
CREATE VIEW ccj WITH ENCRYPTION
AS
SELECT xsb.学号,课程号,成绩
FROM xsb,cjb
WHERE xsb.学号=cjb.学号 AND 专业='计算机'
WITH CHECK OPTION /*指出在视图上所进行的修改都要符合SELECT语句所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据*/
/*-------------------------------------------*/
--创建计算机专业学生的平均成绩视图ccj_avg,包括学号(在视图中列名为num)和平均成绩(在视图中列明为score_avg)
CREATE VIEW ccj_avg(num,score_avg)
AS
SELECT 学号,AVG(成绩)
FROM ccj
GROUP BY 学号
视图的优点
创建视图可以向最终用户隐藏复杂的表链接,简化了用户的SQL程序设计,通过在创建视图时指定限制条件和指定列来限制用户对基本表的访问。
例如,若限定某用户只能查询视图cxs,实际上就是限制了它只访问xsb表的专业字段值为‘计算机’的行。在长建视图时可以指定列,实际上就是限制了用户只能访问这些列,从而视图也可看成数据库的安全措施。
分区视图
略
更新视图
可更新视图的条件
(1),满足以下条件的视图。
创建视图的SELECT语句中没有聚合函数,且没有TOP,GROUP BY,UNION子句及DISTINCT关键字
创建视图的SELECT 语句不包含从基本表列通过计算所得的列
创建视图的SELECT语句的FROM子句中至少要包含一个基本表
(2),可更新的分区视图
(3),通过INSTEAD OF触发器创建的可更新视图
插入数据
--示例 向cxs视图中插入一下记录:'191315','刘明仪',1,'1996-3-2',50
/*-------------------------------------------*/
INSERT INTO cxs
VALUES('191315','刘明仪',1,'1996-3-2',50)
修改数据
依赖一个基本表
--示例 将cxs视图中所有学生的总学分增加1
UPDATE cxs
SET 总学分=总学分+1
/*-------------------------------------------*/
--该语句实际上是将cxs视图所依赖的基本表xsb中所有专业为计算机的记录总学分字段值在原来的基础上增加1
依赖多个基本表
--示例 一个视图依赖于多个基本表时,则一次修改该视图只能变动一个基本表的数据。
--将ccj视图中学号为191301的学生的101课程成绩改为 90
UPDATE ccj
SET 成绩=90
WHERE 学号='191301' AND 课程号='101'
删除数据
--示例 使用 DELETE 语句可以通过视图删除基本表数据,但是注意,对于依赖于多个基本表的视图,不能使用DELETE语句
--删除cxs中女同学的记录
DELETE
FROM cxs
WHERE 性别=0
修改视图
--示例 修改视图定义
--将cxs视图修改为只包含计算机专业学生的学号、姓名和总学分
ALTER VIEW cxs
AS
SELECT 学号,姓名,总学分
FROM xsb
WHERE 专业='计算机'
/*-------------------------------------------*/
--修改使用ENCRYPTION属性定义的视图
--视图ccj是加密存储视图,修改其定义:包括学号,姓名,选修的课程号,课程名和成绩。
ALTER VIEW ccj WITH ENCRYPTION
AS
SELECT xsb.学号,xsb.姓名,cjb.课程号,kcb.课程名,成绩
FROM xsb,cjb,kcb
WHERE xsb.学号=cjb.学号
AND cjb.课程号=kcb.课程号
AND 专业='计算机'
WITH CHECK OPTION
删除视图
--示例 使用DROP VIEW 可删除一个或多个视图。
DROP VIEW cxs,ccj