SQL实训题解析Word格式.docx

上传人:b****5 文档编号:19190416 上传时间:2023-01-04 格式:DOCX 页数:20 大小:41.38KB
下载 相关 举报
SQL实训题解析Word格式.docx_第1页
第1页 / 共20页
SQL实训题解析Word格式.docx_第2页
第2页 / 共20页
SQL实训题解析Word格式.docx_第3页
第3页 / 共20页
SQL实训题解析Word格式.docx_第4页
第4页 / 共20页
SQL实训题解析Word格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

SQL实训题解析Word格式.docx

《SQL实训题解析Word格式.docx》由会员分享,可在线阅读,更多相关《SQL实训题解析Word格式.docx(20页珍藏版)》请在冰豆网上搜索。

SQL实训题解析Word格式.docx

出版社'

4、使用函数从字符串“中国机械工业出版社”中返回字符串“机械”,并使用REVERSE函数将字符串“机械”逆序返回。

selectsubstring('

中国机械工业出版社'

3,2)

selectreverse('

机械'

5、将字符串“abcdabcd”中的所有字符“a”换成字符“%”。

selectreplace('

abcdabcd'

'

a'

%'

6、使用函数返回系统当前日期及当前日期的年分,月份及日期子部分。

selectyear_now=datename(year,getdate()),

month_now=datename(month,getdate()),

weekday_now=datename(weekday,getdate()),date_now=getdate()

三.实验作业

1、用WHILE语句求1—100之间的累加和

declare@sumint,@countint

select@sum=0,@count=1

label:

select@sum=@sum+@count

select@count=@count+1

while@count<

=100

gotolabel

select@sum,@count

2、使用PRINT语句在屏幕上输出2的10次方的值,输出的形式为“2的10次方为:

print'

2的次方为'

+rtrim(power(2,10))

3、用IF语句,求分段方程的值,方程如下:

X2(X<

=0)

Y=X+10(0<

X<

5)

X(X>

declare@xint,@yint

set@x=7

if@x<

=0set@y=power(@x,2)

else

if@x>

5set@y=@x

elseset@y=@x+10

select@y,@x

4、设置在20秒钟以后进行一次返回当前系统日期时间的操作。

begin

waitfordelay'

00:

20'

selectgetdate()

end

5、创建一个数据库NEW,并在数据库中创建一个表student,该表中有四个字段,表如下:

学号

姓名

性别

年龄

95001

李萍

22

95002

黄宏

20

95003

刘玲

21

95004

王丽

用case语句判断,如果表中有“黄宏”这个人,则显示“有这个人”,否则显示“查无此人!

usenew

select*,'

显示的信息'

=case姓名

when'

黄宏'

then'

有这个人'

else'

查无此人'

fromstudent

三、实训作业:

本次实验的1,2,3,4四个题。

1、数据库的创建

1)使用SSMS创建一个只含一个数据文件和一个事务日志文件的数据库,数据库名为new,主数据库文件逻辑名称为new_data,数据文件初始大小为5MB,最大值为200MB,数据文件大小以3MB的增量增加。

日志逻辑文件名称new_log.ldf,日志文件初始大小为2MB,最大值100MB,日志文件以15%增量增加。

createdatabasenew2

on

primary(name=new2_date,

filename='

C:

\ProgramFiles\MicrosoftSQLServer\MSSQL.3\MSSQL\Data\new2.mdf'

size=5MB,

maxsize=200MB,

filegrowth=3MB)

logon

(name=new2_log,

\ProgramFiles\MicrosoftSQLServer\MSSQL.3\MSSQL\Data\new2.ldf'

size=2MB,

maxsize=100MB,

filegrowth=15%)

go

2)创建一个具有多个数据文件和日志文件的数据库。

该数据库名称为old,有3个5MB的数据文件,名字自定,最大空间均为20MB,且均按10%的增量增长,其中第三个数据文件在old_group文件组里,主文件是列表中的第一个文件;

还有1个10MB的事务日志文件,最大到30MB,按1MB增量增长,名字自定。

createdatabaseold

primary(name=old1_date,

\ProgramFiles\MicrosoftSQLServer\MSSQL.3\MSSQL\Data\old1.mdf'

maxsize=20MB,

filegrowth=10%),

(name=old2_date,

\ProgramFiles\MicrosoftSQLServer\MSSQL.3\MSSQL\Data\old2.mdf'

filegroupold_group

(name=old3_date,

\ProgramFiles\MicrosoftSQLServer\MSSQL.3\MSSQL\Data\old3.mdf'

filegrowth=10%)

(name=old4_log,

\ProgramFiles\MicrosoftSQLServer\MSSQL.3\MSSQL\Data\old4.ldf'

size=10MB,

maxsize=30MB,

filegrowth=1MB)

2、查看并修改数据库的属性

1)用SQL语句将NEW数据库中数据文件的最大值改为180MB,数据增长改为15%,将日志文件的初始大小改为3MB。

usenew2

alterdatabasenew2

modifyfile(name=new2_date,

maxsize=180MB,

modifyfile(name=new2_log,

size=3MB)

2)执行系统存储过程sp_helpdb查看old数据库的信息。

execsp_helpdbnew2

3、数据库的缩小、更名及删除

dropdatabaseold

1)使用命令缩小数据库NEW的大小,收缩成原来大小的80%。

dbccshrinkdatabase(new2,80)

2)使用两种方法实验:

将NEW更名为NEWDATA,并删除该数据库。

createdatabasenew

go

sp_renamedbnew,newdata

2、自定义数据类型的创建

使用对象资源管理器创建一个名为a0、数据长度为16,可变长字符,允许为空的自定义的数据类型

useSC

execsp_addtypea0,'

varchar(16)'

null'

3、表的创建与管理

1)用SQL语句在SC数据库中创建表student,有五个属性,分别为(学号nchar(5)notnull,姓名nvarchar(8)notnull,性别bit,年龄int)

usesc

createtablestudent

(学号nchar(5)notnull,

姓名nvarchar(8)notnull,

性别char

(2),

年龄int)

2)使用SQL语句设置表student中学号为主键

altertablestudent5

addconstraintpk1_student_id

primarykeyclustered(student_id)

3)使用SQL语句为表student设置检查约束,要求所输入的年龄必须在15—35岁(含15及35)之间

altertablestudent2

addconstraintcheck_student_年龄

check(student_年龄>

=15andstudent_年龄<

=35)。

4)使用SQL语句为student表再添加一个属性,名为“系部”,数据类型为a0,允许空

usesc

altertablestudent

addstudent_xibua0notnull

5)使用SQL语句为student表添加记录(95001,李咏,false,20,计算机)

insertintostudent5

(student_id,student_name,student_sex)

values

('

95001'

李咏'

男'

6)使用SQL语句将学号为95001这个学生的年龄改为19岁。

updatestudent2

setstudent_年龄='

19'

wherestudent_id='

第二大题:

约束有哪6种类型,各是什么含义?

(1)非空约束:

表中的某些列必须存在的有效值,不允许有空值出现。

(2)缺省约束:

当向数据库中的表插入数据时,如果用户没有明确给出某列的值,SQLSever自动为该列输入指定值。

(3)检查约束:

限制插入列中的值的范围。

(4)主键约束:

要求主键的列上没有两行具有相同值,也没有空值。

(5)唯一约束:

要求表中所有行在指定的列上没有完全相同的列值。

(6)外键约束:

要求正被插入或更新的列(外键)的新值,必须在被参照表(主表)的相应列(主键)中已经存在

1、默认值的创建及管理

使用SQL语句创建一个默认值abc1,该默认值为真值TRUE,将该默认值分别绑定到student表的性别列上,然后解除该默认值的绑定,并删除该默认值。

createdefaultabc1AS'

TRUE'

GO

sp_bindfaultabc1,'

student.性别'

sp_unbindfault'

dropdefaultabc1

2、规则的创建与管理

使用SQL语句创建一个规则abc2,该规则用于限定所取值在8至55之间,将该规则绑定到student表的年龄列上,以及xskc表的成绩列上,然后解除xskc表的成绩列上规则的绑定。

createruleabc2as@abc2>

=8and@abc2<

=55

sp_bindruleabc2,'

student.年龄'

xskc.成绩'

sp_unbindrule'

3、标识列的定义

使用SQL语句为xskc表添加一个标识列,列名为“标识列”,类型为int,初始值为1,步长也为1,注意观察xskc表的数据变化情况。

altertablexskc

add标识列intidentity(1,1)

(1)查询全体学生的学号及姓名

select*fromstudent

select学号,姓名fromstudent

(2)查询全体学生的姓名及出生年月(经过计算所得到的列),并将计算所得列的列名定义为出生年月。

select姓名,2011-年龄fromstudent

出生年月'

=2011-年龄fromstudent

(3)查询一下都有哪些系。

(4)查询所有20岁以下学生的姓名和年龄。

select姓名fromstudentwhere年龄<

(5)查询至少有一科的成绩在85分以上的学生的学号。

select学号fromxskcwhere成绩>

85

(6)查询年龄不在19到21之间的学生的姓名和他们的年龄

select姓名,年龄fromstudentwhere年龄notbetween19and21

(7)查询除了计算机系和机电系学生的学号和姓名

where系部notbetween'

计算机'

and'

机电'

(8)查询所有不姓刘的学生姓名

select姓名fromstudentwhere姓名notlike'

刘%'

(9)查询姓林的全名为两个字的学生的姓名及其所在系部

select*fromstudent

where姓名like'

林_'

(10)查询前两个字是李红,第三个字符是“[”的学生姓名及其所在系

select姓名,系部fromstudent

where姓名like'

李红b[%'

escape'

b'

(11)查询选修了课程但没有参加考试的学生学号。

select学号fromxskc

where课程号isnotnulland成绩isnull

(12)查询计算机系年龄小于21岁的学生姓名

select姓名fromstudent

where年龄<

21and系部='

(13)查询全体学生信息,查询结果按所在系降序排序。

select*fromstudent

orderby系部desc

1)从student和xskc表中查询成绩在80分以上的学生的学号、姓名、课程号和成绩

selectstudent.学号,student.姓名,xskc.课程号,xskc.成绩

fromstudent,xskc

where成绩>

80

2)查询成绩在80分以上的学生的学号,姓名,课程号,课程名,成绩。

selectstudent.学号,student.姓名,xskc.课程号,xskc.成绩,course.课程名

fromstudent,xskc,course

3)查询所有20岁以下学生的学号

selectstudent.学号

4)查询所有20岁以下学生选修课程的课程号

select课程号fromxskc

where学号in(select学号fromstudent

20)

groupby课程号

5)查询所有20岁以下学生选修课程的课程名及学分

select课程名,学分fromcourse

where课程号in(

20))

6)查询所有选过课学生的学号;

fromstudent,course

where课程号isnotnull

7)查询所有选过课学生的姓名及所在系;

selectstudent.学号,student.姓名,student.系部

8)查询被选修课程中每门课程的最高分;

selectxskc.学号,max(成绩)fromxskc

groupby学号

9)查询每个系有多少个学生;

USESC

SELECT系部,count(姓名)

GROUPBY系部

10)用连接查询的方法查询所有20岁以下学生选修课程的课程号。

selectdistinctcourse.课程号

11)创建一个新的永久表computer,用来存放student表中所有计算机系学生有关信息。

select*intocomputer1fromstudent

where系部='

(一)创建视图

1、用两种方法创建view1视图,显示所有女同学的有关资料

createviewview2

as

where性别='

false'

2、用T-SQL语句在SC数据库中创建一个名为view2,能输出成绩大于80分的学生选修成绩资料的加密的视图。

withencryption

select*fromxskc

80

3、用T-SQL语句创建view3视图,显示选修2学分这样的课程的学生的姓名,课程名,成绩

createviewview3

select姓名,成绩,课程名

fromxskc,student,course

where学分='

2'

andstudent.学号=xskc.学号

andxskc.课程号=course.课程号

4、用T-SQL语句创建view4视图,显示选修了C语言的学生的学号,姓名及成绩。

createviewview4

select姓名,成绩,student.学号

where课程名='

C语言'

(二)查看视图的创建信息

5、查看一下view3视图的定义脚本

sp_HELPTEXTVIEW3_1

思考:

能否使用该方法能否查看到view2的脚本

不能,因为已加密。

(三)修改视图的定义

6、用T-SQL语句将view3视图改为显示选修4学分课程的学生的姓名,课程名,成绩。

alterviewview3_1

4'

7、查询view1中年龄小于20岁的学生的有关信息

select*

fromview1_2

8、查询view3中成绩>

75分的学生的姓名

select姓名

fromview3_1

75

9、向view1中插入一个人,其信息为(95009,赵春梅,女,21,计算机)

insertintoview1

(学号,姓名,性别,年龄,系部)

values('

95009'

赵春梅'

21'

10、利用view1将赵春梅的系部改为外语。

updateview1

set系部='

外语'

where姓名='

11、利用view1删除赵春梅这个人的信息。

deletefromview1

(一)创建索引

在做下题之前请先想办法删除course表中已经存在的聚簇索引。

1、用T-SQL为course表创建一个惟一的聚簇索引aa,索引列为课程名,降序,填充因子为60%。

use

sc

createuniqueclusteredindexaa

oncourse(课程名desc)

with

fillfactor=60

2、用T-SQL为student表创建一个唯一的非聚簇索引bb,索引列为姓名,升序,填充因子为40%

CREATENONCLUSTEREDINDEXbb

ONstudent(姓名ASC)

WITH

FILLFACTOR=40

3、用T-SQL为xskc表创建一个非唯一的非聚簇索引cc,索引列为课程号,学号,降序,填充因子为50%

createuniqueclusteredindexcc

onxskc(课程号desc,学号desc)

fillfactor=50

(二)重建索引

4、用T-SQL语句重建bb,填充因子改为60%。

createuniqueclusteredindexbb

onstudent(姓名asc)

(三)重命名索引

5、用T-SQL语句将索引aa的名字改为aaa。

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

当前位置:首页 > 高等教育 > 管理学

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

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