SQL复习资料文档格式.docx

上传人:b****3 文档编号:16720419 上传时间:2022-11-25 格式:DOCX 页数:13 大小:21.46KB
下载 相关 举报
SQL复习资料文档格式.docx_第1页
第1页 / 共13页
SQL复习资料文档格式.docx_第2页
第2页 / 共13页
SQL复习资料文档格式.docx_第3页
第3页 / 共13页
SQL复习资料文档格式.docx_第4页
第4页 / 共13页
SQL复习资料文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

SQL复习资料文档格式.docx

《SQL复习资料文档格式.docx》由会员分享,可在线阅读,更多相关《SQL复习资料文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

SQL复习资料文档格式.docx

5确定索引的最佳存储位置

事务的属性

原子性一致性隔离持久性

简述各类数据完整性及其对应的约束实现

实体完整性将行定义为特定表的唯一实体

域完整性指特定列的项的有效性

输入或删除行时,引用完整性保留表之间定义的关系

用户定义完整性使您可以定义不属于其他任何完整性类别的特定业务规则

对应的约束实现是:

1实体完整性约束

2域完整性约束

3参照完整性约束

4用户自定义完整性约束

索引的作用

与书中的索引一样,数据库中的索引使您可以快速找到表或索引视图中的特定信息。

索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。

通过创建设计良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。

索引可以减少为返回查询结果集而必须读取的数据量。

索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性。

DML触发器的用途

DML触发器全名:

DATAMANIPULATIONLANGUAGE(数据操纵语言)触发器

强制参照完整性创建审计跟踪执行与CHECK约束类似的功能,但是跨表、跨数据库甚至是跨服务器使用

用自己的语句代替用户的操作语句

更新汇总信息

为报表提供非规范化表

设置条件标志

SQL分为几类,每类常用的命令有哪些?

存储过程的优点

使得需要过程式动作的进程可调用

安全性

性能

四、计算题(4分)

一个数据表使用单一扩展盘区或混合扩展盘区存储时占用磁盘空间的估算。

五、操作题(共45分)

所有操作假设由sa账号用SQL语句完成。

1、创建一个数据库

2、在SQLServe中添加一个登录名

3、在“教学”数据库中添加数据库用户

4、在“教学”数据库中创建三个数据表:

考核内容重点:

数据类型、主键、外键、空/非空、数据校验、默认等约束。

5、修改表:

添加一列“性别”(只能取值“男”或“女”),并在“生日”上添加不对已有数据进行验证的数据校验约束“bircheck”,要求输入的数据需满足的条件是学生的年龄必须不小于14岁。

(7分)

添加列、添加约束条件(对已有数据是否校验)、开关约束条件

6、权限管理

7、创建一个视图,用以显示各班的SQL成绩统计(包括班级,最高分,最低分,平均分)。

创建一个显示所有XX级计算机系学生的《YY》课程的成绩的视图,其中包括学号,姓名,课程名,分数四列。

按班级、性别统计XX级计算机系各班的YY课程的平均成绩,结果按照班级的升序,性别的降序显示。

8创建建单/复合索引(升/降序)。

9、定义触发器

在“教学”数据库中添加一个角色。

5、将安全账户添加到角色中。

六、编程题(20分)

在“教学”数据库中创建一个存储过程cj_proc,实现按照输入的课程名称打印此门课程的成绩报表(如不给定课程名称,则输出“SQL”的成绩),输出结果按照分数降序排列。

创建数据库

1、创建一个数据库,数据库名为myfirstdb,包含一个数据文件和一个日志文件,名字自起,大小各为10MB,最大为20MB,增量分别为2MB和10%。

createdatabasemyfirstdb

on

(name=myfirstdb,

filename='

C:

\ProgramFiles\MicrosoftSQLServer\SQLserver\myfirstdb_data.mdf'

size=10mb,

maxsize=20mb,

filegrowth=2mb)

logon

(name=myfirstdblog,

\ProgramFiles\MicrosoftSQLServer\SQLserver\myfirstdblog_log.ldf'

filegrowth=10%);

go

2、创建一个数据库,数据库名为pubs,包含一个主数据文件、两个各含一个数据文件的自定义文件组和一个日志文件。

createdatabasepubs

onprimary

(name=pubs_data,

\ProgramFiles\MicrosoftSQLServer\SQLserver\pubs_data.mdf'

),

filegroupfg1

(name=pubs_data1,

\ProgramFiles\MicrosoftSQLServer\SQLserver\pubs_data1.mdf'

filegroupfg2

(name=pubs_data2,

\ProgramFiles\MicrosoftSQLServer\SQLserver\pubs_data2.mdf'

(name=pubs_log,

\ProgramFiles\MicrosoftSQLServer\SQLserver\pubs_log.ldf'

);

3、修改myfirstdb,在数据库中添加一个数据文件(test)和一个文件组myfilegroup1(文件组中包含两个数据文件,自己定义)。

alterdatabasemyfirstdb

addfile

(name=test,

\ProgramFiles\MicrosoftSQLServer\SQLserver\test_data.mdf'

addfilegroupmyfilegroup1

(name=test1,

\ProgramFiles\MicrosoftSQLServer\SQLserver\test1_data.mdf'

(name=test2,

\ProgramFiles\MicrosoftSQLServer\SQLserver\test2_data.mdf'

tofilegroupmyfilegroup1;

添加登录名数据库用户

1、创建一个登录账号“teacher”,为账号‘teacher’在自己的数据库中添加一个安全账户‘sql_teacher’,在数据库中添加一个角色“visitor”。

将安全账户‘sql_teacher’添加到角色“visitor”中,授予“visitor”在“学生表”中’学号’,’姓名’,’生日’三列上的SELECT、INSERT、DELETE、UPDATE权限。

createloginteacher1

withpassword='

abc'

createusersql_teacher1

forloginteacher1

createrolevisitor1

execsp_addrolemember'

visitor1'

'

sql_teacher1'

Go

grantselecton学生(学号,姓名,生日)tovisitor1;

grantinserton学生(学号,姓名,生日)tovisitor1;

grantdeleteon学生(学号,姓名,生日)tovisitor1;

grantupdateon学生(学号,姓名,生日)tovisitor1;

2、允许teacher创建数据库。

Grantcreatedatabasetoteacher

3、收回sql_teacher在姓名列上的insert权限。

Revokeinserton学生(姓名)fromsql_teacher

4、禁止sql_teacher更新生日列中的数据。

Denyupdate学生(生日)tosql_teacher

数据表操作

1、在PUBS数据库中添加一个表“学生”,表中包含三列:

学号(CHAR(10),主键约束,数据校验约束(输入的学号必须是在校生的学号,学号的前2位是入学年份),姓名(nvarchar(10)),性别(只能取值“男”或“女”)。

usepubs

createtable学生(学号char(10)primarykey

check(year(getdate())%100-left(学号,2)<

4and

year(getdate())%100-left(学号,2)>

0),

姓名nvarchar(10),

性别nchar

(1)check(性别like'

男女'

))

go

2、修改学生表,在表中添加一列:

出生年月(datetime)默认值为19年前的元旦。

altertable学生

add出生年月datetime

defaultstr((year(getdate()-19)))+'

-1-1'

3、将“姓名”列的宽度改为12,不允许空值;

性别的默认值设为“男”。

altertable学生

altercolumn姓名nvarchar(12)notnull

addconstraintXS_XB_def

default'

男'

for性别

4、创建一个课程表,表中包含四列

课程号主键

课程名称非空

先修课号自引用课程号

学分非空。

createtable课程

(课程号intidentityprimarykey,

课程名称nvarchar(20)notnull,

先修课程号intforeignkeyreferences课程(课程号),

学分numeric(2,1)notnull);

5、创建一个表“成绩”,表中有三列:

学号外键,

课程号外键,

成绩(小数类型(有效数字4位,小数1位),数据校验要求在输入时只能输入0~100的数字),默认值为0

createtable成绩(学号char(10)FOREIGNKEYREFERENCES学生(学号),

课程号INTFOREIGNKEYREFERENCES课程(课程号),

分数numeric(4,1)default(0)

check(分数between0and100)primarykey(学号,课程号));

6、让学生表中“学号”列上的数据校验不起作用。

编程题存储过程

2.创建三个表:

学生(学号,姓名)、课程(课程号,课程名)、成绩(学号、课程号、分数),然后在三个表中分别添加记录。

按照输入的课程名称打印此门课程的成绩报表(如不给定课程名称则打印SQL课程的成绩),输出结果按照分数降序排列:

例如:

《SQL》成绩表

****************************************************

名次学号姓名成绩

10508044126李军95

20508044124李明85

30508044125王刚75

****************************************************

*/

IFEXISTS(SELECTNAMEFROMsysobjects

WHERENAME='

学生'

DROPtable学生

GO

课程'

DROPtable课程

成绩'

DROPtable成绩

createtable学生(学号char(10)primarykey

constraintxh_chkcheck(学号like'

0508044[1-4][0-3][0-9]'

),姓名nvarchar(10)notnull)

createtable课程(课程号char(6)primarykey,课程名称nvarchar(40))

createtable成绩(学号char(10)notnull,课程号char(6)notnull,分数numeric(4,1))

insert学生values('

0508044124'

李明'

0508044125'

王刚'

0508044126'

李军'

insert课程values('

080101'

SQL'

080204'

DS'

insert成绩values('

85)

95)

75)

86)

ifexists(select*fromsysobjectswherename='

cj_proc'

andxtype='

p'

dropproccj_proc

createproccj_proc@KCMnvarchar(40)=’SQL’

as

SETNOCOUNTON

DECLARE@XHchar(10),@XMnvarchar(10),@kchnvarchar(6),

@CJnumeric(4,1),@messagenvarchar(80),@mcint

ifnotexists(select课程.课程号from课程innerjoin成绩on课程.课程号=成绩.课程号and课程.课程名称=@kcm)

print'

无此课程成绩'

else

begin

select@kch=课程.课程号from课程where课程.课程名称=@kcm

《'

+@kcm+'

》成绩表'

printREPLICATE('

*'

48)

名次学号姓名成绩'

declarexhcj_cursorcursorscroll

forselect学生.学号,姓名,分数from学生,成绩

where成绩.学号=学生.学号and课程号=@kch

orderby分数desc

openxhcj_cursor

fetchnextfromxhcj_cursorinto@xh,@xm,@cj

set@mc=1

while@@fetch_status=0

set@message=ltrim(str(@mc))+space(10)+@xh+space(7)+@xm+space(12)+ltrim(str(@CJ))

PRINT@message

fetchnextfromxhcj_cursorinto@xh,@xm,@CJ

set@mc=@mc+1

end

CLOSExhcj_cursor

DEALLOCATExhcj_cursor

end

创建视图单/复合索引

1、创建一个显示所有学生的《SQL》课程的成绩的视图,其中包括学号,姓名,课程名,分数四列。

usestudent

createtablet8(学号char(10)primarykey,姓名nvarchar(5))

createtablet9(课程号char(5),课程名nvarchar(5))

createtablet7(学号char(10),课程号char(5),课程名nvarchar(5),分数decimal(4,1))

insertintot8values(1008014112,'

SAM'

insertintot8values(1008014134,'

KING'

insertintot8values(1008014145,'

JAN'

insertintot8values(1008014156,'

QIN'

insertintot9values(12344,'

insertintot9values(12345,'

C'

insertintot7values(1008014112,12344,'

99.0)

insertintot7values(1008014112,12345,'

89.0)

insertintot7values(1008014134,12344,'

88.0)

insertintot7values(1008014145,12344,'

76.0)

insertintot7values(1008014156,12344,'

65.0)

createviewSQLCJB_VW

asselectt8.学号,t8.姓名,t7.课程名,t7.分数

fromt8

innerjoint7

ont7.学号=t8.学号

wheret7.课程名='

2、在课程表的课程号列上建一个索引。

CreateuniqueclusteredindexKCB_IDX

ont9(课程号)

3、在成绩表的学号,课程号上建复合索引。

CreateuniqueclusteredindexCJB_IDX

Ont7(学号,课程号)

4、显示各班的成绩统计

createviewCJTJ_VW

as

selectsubstring(学号,6,1)as班级,

MAX(分数)as最高分,

MIN(分数)as最低分,

AVG(分数)as平均分

fromt7

where分数>

groupbysubstring(学号,6,1)

触发器练习

1、创建表t1,t2。

使用触发器实现引用完整性,当在t1表中执行了加工性操作,则在t2表中作相应操作。

触发器练习题:

2、当在"

学生"

表中删除记录,要求将成绩表中的相应记录删除。

createtriggerxsh_del_triggeron学生fordelete

asdelete成绩where成绩.学号in(select学号fromdeleted)

3、当在"

表中添加05级计算机专业学生的记录,则在成绩表中的添加此学生相应成绩记录。

createtriggerxsh_insert_triggeron学生forinsert

as

declare@xhchar(10)

select@xh=学号frominserted

insert成绩select@xh,课程.课程号,0.0from课程

COLUMNS_UPDATED练习

1、第1、3、5三列同时修改。

(表中有7列)

2、第1、3、5、9、15三列同时修改。

(表中有16列)

3、第1、3、5三列任意一列被修改。

(表中有8列)

4、第1、3两列未被同时修改。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1