实验源码.docx
《实验源码.docx》由会员分享,可在线阅读,更多相关《实验源码.docx(19页珍藏版)》请在冰豆网上搜索。
实验源码
实验1
8、(3)
selecttype,avg(price)
fromtitles
whereroyalty=10
groupbytype
实验2
4、
createdatabasestudb
execsp_helpdb
5、
alterdatabasestudb
modifyfile
(NAME=studb,
SIZE=5MB,
MAXSIZE=20MB,
FILEGROWTH=1MB
)
6、
alterdatabasestudb
ADDLOGFILE
(NAME=studb_log2,
FILENAME='C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\data\studb_log2.ldf',
SIZE=5MB,
MAXSIZE=10MB
)
7、
alterdatabasestudb
MODIFYNAME=student_db
(错误:
未能排它地锁定数据库以执行该操作。
:
退出后重新执行)
8、
dropdatabasestudent_db
实验3
5、
useStudentsDB
createtablegrade(
学号char(4),
课程编号char(4),
分数decimal(5))
8、
usestudentsdb
insertintograde
values('0004','0001',80)
9、
altertablecurriculum
altercolumn课程编号char(4)notnull
10、
usestudentsdb
altertablegrade
altercolumn分数real
11、
altertablestudent_info
altercolumn学生姓名varchar(10)notnull
12、
Deletegradewhere学号=’0004’
13、
usestudentsdb
updategradeset分数=90where学号='0003'and课程编号='0005'
14、
usestudentsdb
altertablegrade
add备注varchar(20)NULL
实验思考:
1、
usestudentsdb
altertablegrade
dropcolumn备注
实验4
1、
usestudentsdb
selectcount(*)fromgrade
selectsubstring(姓名,1,2)fromstudent_info
selectupper('kelly')
selectreplicate('kelly',3)
selectsqrt(分数)fromgradewhere分数>=85
select2,3,power(2,3)
selectyear(getdate()),month(getdate()),day(getdate())
2、
usestudentsdb
select学号,姓名,出生日期fromstudent_info
select姓名,家庭住址fromstudent_infowhere学号='0002'
select学号,姓名fromstudent_infowhere性别='男'
3、
usestudentsdb
select学号,分数fromgradewhere分数between80and90
selectavg(分数)fromgradewhere学号='0003'
select课程编号,count(*)fromgradegroupby课程编号
select*fromStudent_infoorderby出生日期
select学号,姓名fromstudent_infowhere姓名like'张%'
4、
usestudentsdb
select姓名,出生日期fromstudent_infowhere性别=
(select性别fromstudent_infowhere姓名='刘卫平')
select学号,姓名,性别fromstudent_infowhere学号
in(select学号fromgradewhere课程编号in('0002','0005'))
select课程编号,分数fromgrade
where学号='0001'and分数>any(select分数fromgradewhere学号='0002')
select课程编号,分数fromgrade
where学号='0001'and分数>all(select分数fromgradewhere学号='0002')
5、
usestudentsdb
selectstudent_info.学号,姓名,分数fromstudent_info,grade
wherestudent_info.学号=grade.学号and分数between80and90
selectstudent_info.学号,姓名,分数fromstudent_info,grade,curriculum
wherestudent_info.学号=grade.学号andgrade.课程编号=curriculum.课程编号and课程名称='C语言程序设计'
selectstudent_info.学号,姓名,分数fromstudent_info
innerjoingradeonstudent_info.学号=grade.学号
innerjoincurriculumon课程名称='C语言程序设计'andgrade.课程编号=curriculum.课程编号
selectstudent_info.学号,姓名,课程名称,分数fromstudent_info,grade,curriculum
wherestudent_info.学号=grade.学号andgrade.课程编号=curriculum.课程编号and性别='男'
错:
selectstudent_info.学号,姓名,课程编号,分数fromstudent_info,grade
wherestudent_info.学号=grade.学号and分数in(selectmax(分数)fromgradegroupby学号)
selectstudent_info.学号,姓名,课程编号,分数fromgradex
innerjoinstudent_infoonx.学号=student_info.学号
where分数>=(selectmax(分数)FROMgradeywherey.学号=x.学号)
selectstudent_info.学号,student_info.姓名,sum(分数)as总分数fromstudent_infoLEFTOUTERJOINgrade
ONstudent_info.学号=grade.学号groupbystudent_info.学号,student_info.姓名
insertintograde
values('0004','0006',76,NULL)
selectgrade.课程编号,课程名称,count(*)as选修人数fromcurriculum
RIGHTOUTERJOINgradeONcurriculum.课程编号=grade.课程编号groupbygrade.课程编号,课程名称
select学号asu_编号,姓名asu_名称fromstudent_infowhere姓名like'张%'
UNION
select课程编号asu_编号,课程名称asu_名称fromcurriculum
7、
CREATETABLEtotalgrade
(学号char(4)NOTNULL,
姓名varchar(8)NULL,
总成绩decimal(5,2)NULL)
INSERTINTOtotalgrade
SELECT学号,姓名,总成绩=0FROMstudent_info
UPDATEtotalgradeSET总成绩=
(SELECTSUM(分数)FROMgradeWHEREtotalgrade.学号=grade.学号)
DELETEtotalgradeWHERE总成绩ISNULL
实验思考:
1、select学号,姓名,性别fromstudent_infowhere学号notin(select学号fromgrade)
2、select*fromstudent_infocrossjoingrade
3、
select*fromgradeorderby学号computesum(分数)by学号
实验5
3、
CREATEINDEXgrade_indexONgrade(分数)
4、
CREATEUNIQUEINDEXgrade_id_c_indONgrade(学号,课程编号)
5、
sp_helpindexgrade
sp_helpindexstudent_info
7、
sp_rename'grade.grade_index','grade_ind','INDEX'
8、
DROPINDEXgrade.grade_ind
16、
CREATEVIEWv_stu_c
AS
SELECTstudent_info.学号,姓名,课程编号FROMstudent_info
INNERJOINgradeONstudent_info.学号=grade.学号
SELECT*FROMv_stu_cWHERE学号='0003'
17、
CREATEVIEWv_stu_g
AS
SELECTstudent_info.学号,姓名,课程名称,分数FROMstudent_info,curriculum,grade
WHEREstudent_info.学号=grade.学号andgrade.课程编号=curriculum.课程编号
select*fromv_stu_gwhere学号='0001'
18、
ALTERVIEWv_stu_c(学号,姓名,课程数目)
ASSELECTstudent_info.学号,姓名,count(*)as课程数目FROMstudent_info,grade
WHEREstudent_info.学号=grade.学号groupbystudent_info.学号,姓名
19、
ALTERVIEWv_stu_i(学号,姓名,性别)
ASSELECT学号,姓名,性别FROMstudent_info
20、
Sp_renamev_stu_i,v_stu_info
21、
INSERTINTOv_stu_info
VALUES('0015','陈婷','女')
22、
deletev_stu_infowhere学号='0015'
23、
UPDATEv_stu_gSET分数=84WHERE姓名='刘卫平'and课程名称='高等数学'
24、
DROPVIEWv_stu_c
DROPVIEWv_stu_g
实验6
1、
(1)SELECT*INTOstu_phoneFROMstudent_info
ALTERTABLEstu_phoneADD电话号码CHAR(7)NULL
(2)
CREATERULEphone_rule
AS
@phoneLIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
(3)
sp_bindrulephone_rule,'stu_phone.电话号码'
(4)
INSERTINTOstu_phone(学号,姓名,电话号码)VALUES('0009','王国强','1234yyy')
服务器:
消息513,级别16,状态1,行1
列的插入或更新与先前的CREATERULE语句所强制的规则冲突。
该语句已终止。
冲突发生于数据库'studentsdb',表'stu_phone',列'电话号码'。
语句已终止。
3、
CREATERULEstusex_rule
AS
@sexIN('男','女')
sp_bindrulestusex_rule,'stu_phone.性别'
4、
sp_helpstusex_rule
sp_helptextstusex_rule
sp_rename'stusex_rule','stu_s_rule'
5、
sp_unbindrule'stu_phone.性别'
droprulestu_s_rule
6、
CREATEDEFAULTdf_date
AS'2006-4-12'
GO
CREATEDEFAULTdf_char
AS'unknown'
GO
CREATEDEFAULTdf_money
AS$100
GO
CREATETABLEstu_fee
(学号char(10)NOTNULL,
姓名char(8)NOTNULL,
学费money,
缴费日期datetime,
电话号码char(7))
GO
sp_bindefaultdf_money,'stu_fee.学费'
GO
sp_bindefaultdf_date,'stu_fee.缴费日期'
GO
sp_bindefaultdf_char,'stu_fee.电话号码'
GO
INSERTINTOstu_fee(学号,姓名)values('0001','刘卫平')
INSERTINTOstu_fee(学号,姓名,学费)values('0001','张卫民',$120)
INSERTINTOstu_fee(学号,姓名,学费,缴费日期)values('0001','马东',$110,'2006-5-12')
sp_unbindefault'stu_fee.电话号码'
DROPDEFAULTdf_char
sp_unbindefault'stu_fee.缴费日期'
DROPDEFAULTdf_date
GO
sp_unbindefault'stu_fee.学费'
DROPDEFAULTdf_money
8、
ALTERTABLEstudent_info
ADD院系char(10)
CREATEDEFAULTstu_d_df
AS'信息院'
GO
sp_bindefaultstu_d_df,'student_info.院系'
GO
INSERTINTOstudent_info(学号,姓名,性别)
VALUES('0010','asfga','女')
9
(1)
CREATETABLEstudentsdb.dbo.stu_con
(
学号char(4)NOTNULL,
姓名varchar(10)NOTNULL
CONSTRAINTuk_nameUNIQUENONCLUSTERED,
性别varchar
(2)NOTNULL
CONSTRAINTdf_sexDEFAULT'男',
出生日期datetimeNOTNULL
CONSTRAINTck_bdayCHECK(出生日期>'1988-1-1'),
家庭住址varchar(50)NOTNULL,
CONSTRAINTpk_sidPRIMARYKEY(学号)
)
INSERTINTOstu_con(学号,姓名,性别,出生日期,家庭住址)values('0009','张小东','','1989-4-6','')
INSERTINTOstu_con(学号,姓名,性别,出生日期,家庭住址)values('0010','李梅','女','1989-4-6','')
INSERTINTOstu_con(学号,姓名,性别,出生日期,家庭住址)values('0011','王强','','1989-4-6','')
INSERTINTOstu_con(学号,姓名,性别,出生日期,家庭住址)values('0012','王强','','1989-4-6','')
服务器:
消息2627,级别14,状态2,行1
违反了UNIQUEKEY约束'uk_name'。
不能在对象'stu_con'中插入重复键。
语句已终止。
不一致,学号列设为主键约束,不允许为空值,并且不能有相同学号出现。
姓名为唯一约束,则不能出现相同姓名,
性别为默认约束,在没有指定性别时,默认为男,
出生日期为属性值约束,限制年龄输入值。
(3)
ALTERTABLEstu_con
DROPCONSTRAINTpk_sid,uk_name,df_sex,ck_bday
实验7
1、
DECLARE@stu_namevarchar(10)
SELECT@stu_name=姓名
FROMstudent_info
WHERE姓名LIKE'张%'
SELECT@stu_name
2、
DECLARE@grademaxint,@grademinint,@gradesumint
SELECT@grademax=max(分数),@grademin=min(分数),@gradesum=sum(分数)
FROMgrade
SELECT@grademax,@grademin,@gradesum
3、
DECLARE@rowsint
SET@rows=(SELECTCOUNT(*)FROMgrade)
SELECT@rows
4、
DECLARE@intCIdint,@intErrorCodeint
INSERTINTOcurriculum(课程编号,课程名称,学分)
VALUES('0006','VB程序设计',2)
SELECT@intCId=@@identity,@intErrorCode=@@error
SELECT@intCId,@intErrorCode
5、
DECLARE@Msumint,@Fsumint
SELECT@Msum=COUNT(*)FROMstudent_infoWHERE性别='男'
SELECT@Fsum=COUNT(*)FROMstudent_infoWHERE性别='女'
SELECT@Msum,@Fsum
6、
DECLARE@grademaxint,@grademinint,@gradeavgint
SELECT@grademax=max(分数),@grademin=min(分数),@gradeavg=avg(分数)
FROMgradeINNERJOINcurriculumONgrade.课程编号=curriculum.课程编号and课程名称='高等数学'
SELECT@grademax,@grademin,@gradeavg
9、
DECLARE@stu_idchar(4)
SET@stu_id='0001'
IF((SELECTAVG(分数)FROMgradewhere学号=@stu_id)<60)
PRINT'你的成绩不及格'
ELSE
PRINT'你的成绩及格了,恭贺你'
10、
DECLARE@counterint
SET@counter=1
WHILE@counter<10
BEGIN
SELECT'@count的值现在为:
'+CONVERT(CHAR
(2),@counter)
SET@counter=@counter+1
END
11、
SELECT学号,分数,等级=
CASE
WHEN分数>=90THEN'A'
WHEN分数>=80AND分数<90THEN'B'
WHEN分数>=70AND分数<80THEN'C'
WHEN分数>=60AND分数<70THEN'D'
ELSE'E'
END
FROMgrade
12、
WHILE(SELECTAVG(分数)FROMgrade)<80
BEGIN
UPDATEgrade
SET分数=分数*1.05
IF(SELECTMAX(分数)FROMgrade)>95
BREAK
ELSE
CONTINUE
END
13、
DECLARE@nint,@counterint
SET@counter=1
SET@n=0
WHILE@counter<=20
BEGIN
SET@n=@n+@counter
SET@counter=@counter+1
END
SELECT@n
14、
DECLARE@nint
SET@n=1
WHILE@n<=10
BEGIN
SELECT@n*@n
SET@n=@n+1
END
16、
DECLAREstu_cursorCURSOR
SCROLL
FOR
SELECT*FROMstudent_infoWHERE性别='男'
FORUPDATE
OPENstu_cursor
FETCHNEXTFROMstu_cursor
WHILE@@fetch_status=0
BEGIN
FETCHNEXTFROMstu_cursor
END
CLOSEstu_cursor
17、
OPENstu_cursor
DECLARE@snochar(4),@snamevarchar(10)
FETCHNEXTFROMstu_cursorinto@sno,@sname
WHILE@@fetch_status=0
BEGIN
if(@snamelike'马%')
updatestudent_info
set出生日期=dateadd(yy,1,出生日期)
WHERECURRENTOFstu_cursor
FETCHNEXTFROMstu_cursorinto@sno,@sname
END
CLOSEstu_cursor
18、
DECLAREstu_cursorCURSOR