数据库实验教学文案.docx
- 文档编号:25750915
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:13
- 大小:82.92KB
数据库实验教学文案.docx
《数据库实验教学文案.docx》由会员分享,可在线阅读,更多相关《数据库实验教学文案.docx(13页珍藏版)》请在冰豆网上搜索。
数据库实验教学文案
数据库实验
实验三建表、修改表、删除表
1.建立数据库jxgl
在jxgl数据库中建立学生表student,课程表course,选修表sc,建表过程有如下方式
1)以图形界面操作
2)以SQL操作(以下脚本可直接在查询分析器中执行)
CreateTableStudent
(SnoCHAR(5)NOTNULLPRIMARYKEY(Sno),
SnameVARCHAR(20),
SageSMALLINTCHECK(Sage>=15ANDSage<=45),
SsexCHAR
(2)DEFAULT'男'CHECK(Ssex='男'ORSsex='女'),
SdeptCHAR
(2));
CreateTableCourse
(CnoCHAR
(2)NOTNULLPRIMARYKEY(Cno),
CnameVARCHAR(20),
CpnoCHAR
(2),
CcreditSMALLINT);
CreateTableSC
(SnoCHAR(5)NOTNULLCONSTRAINTS_FFOREIGNKEYREFERENCESStudent(Sno),
CnoCHAR
(2)NOTNULL,
GradeSMALLINTCHECK((GradeISNULL)OR(GradeBETWEEN0AND100)),
PRIMARYKEY(Sno,Cno),
CONSTRAINTC_FFOREIGNKEY(Cno)REFERENCESCourse(Cno));
INSERTINTOStudentVALUES('98001','钱横',18,'男','CS');
INSERTINTOStudentVALUES('98002','王林',19,'女','CS');
INSERTINTOStudentVALUES('98003','李民',20,'男','IS');
INSERTINTOStudentVALUES('98004','赵三',16,'女','MA');
INSERTINTOCourseVALUES('1','数据库系统','5',4);
INSERTINTOCourseVALUES('2','数学分析',null,2);
INSERTINTOCourseVALUES('3','信息系统导论','1',3);
INSERTINTOCourseVALUES('4','操作系统原理','6',3);
INSERTINTOCourseVALUES('5','数据结构','7',4);
INSERTINTOCourseVALUES('6','数据处理基础',null,4);
INSERTINTOCourseVALUES('7','C语言','6',3);
INSERTINTOSCVALUES('98001','1',87);
INSERTINTOSCVALUES('98001','2',67);
INSERTINTOSCVALUES('98001','3',90);
INSERTINTOSCVALUES('98002','2',95);
INSERTINTOSCVALUES('98002','3',88);
课程表Course(课程号Cno,课程名Cname,先修课号Cpno,学分Ccredit)
学生表Student(学号Sno,姓名Sname,年龄Sage,性别Ssex,所在系Sdept)
学生选课表SC(学号Sno,课程号Cno,成绩Grade)
实验四Select查询操作练习
(1)基于“教学管理”数据库jxgl,使用SQL的查询语句表示下列查询:
①检索年龄大于23岁的男学生的学号和姓名;
selectSno,Sname
fromStudent
whereSage>'23'ANDSsex='男';
②检索至少选修一门课程的女学生的姓名;
selectSname
fromStudent,SC
whereSsex='女'ANDStudent.Sno=SC.Sno
groupbyStudent.Snamehavingcount(*)>=1;
或者
SelectSname
FromStudent
WhereSsex='女'
ANDSnoin
(selectsno
fromSC
groupbysno
havingcount(*)>=1);
③检索王同学不学的课程的课程号;
selectCno
fromCourse
whereCourse.Cnonotin
(selectCno
fromSC,Student
whereSC.Sno=Student.SnoANDSnameLIKE'王%');
④检索至少选修两门课程的学生学号;
selectDISTINCTStudent.Sno
fromStudent,SC
WHEREStudent.Sno=SC.Sno
GROUPBYStudent.SnoHAVINGCOUNT(*)>=2;
⑤检索全部学生都选修的课程的课程号与课程名;
SELECTCno,Cname
fromCourse
wherenotexists
(select*
fromstudent
wherenotexists
(select*
fromSC
whereSC.sno=Student.Sno
ANDSC.Cno=Course.Cno)
)
或者假设所有学生只有两人
SELECTCno,Cname
fromCourse
WHERECourse.Cnoin
(selectCno
fromSC
groupbySC.Cno
havingcount(Sno)=
(selectcount(*)
fromStudent));
SELECTCno,Cname
fromCourse
WHERECourse.Cnoin
(selectCno
fromSC
groupbySC.Cno
havingcount(Sno)=2);
⑥检索选修了所有3学分课程的学生学号。
selectdistinctStudent.Sno
fromStudent,SC
whereexists
(select*
fromCourse
whereCcredit='3'ANDStudent.Sno=SC.SnoANDSC.Cno=Course.Cno);
(2)基于“教学管理”数据库jxgl,试用SQL的查询语句表达下列查询:
①统计有学生选修的课程门数;
selectcount(distinctSC.Cno)
FROMSC;
②求选修4号课程的学生的平均年龄;
SELECTavg(Student.Sage)
fromStudent,SC
whereStudent.Sno=SC.SnoANDCno='4';
SELECTavg(Student.Sage)as平均年龄
fromStudent,SC
whereStudent.Sno=SC.SnoANDCno='3';
③求学分为3的每门课程的学生平均成绩;
SELECTavg(SC.Grade)
fromCourse,SC,Student
whereStudent.Sno=SC.SnoANDCourse.Ccredit='3'
groupbySC.Cno
用groupby语句以课程号分组
注意,如果程序是这样的:
SELECTavg(SC.Grade)
fromCourse,SC,Student
whereStudent.Sno=SC.SnoANDCourse.Ccredit='3'ANDCourse.Cno=SC.Cno;
只显示一门课程的成绩!
④统计每门课程的学生选修人数,要求超过3人的课程才统计,要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列;
SELECTCno,count(Sno)
fromSC
GROUPBYCno
HAVINGCount(Sno)>3
orderbycount(sno)DESC,Cno;
SELECTCno,count(Sno)as选修人数
fromSC
GROUPBYCno
HAVINGCount(Sno)>1
orderbycount(sno)DESC,Cno;
⑤检索学号比“王林”同学大而年龄比他小的学生姓名;
SELECTSname
FROMStudent
whereSno>
(selectSno
fromStudent
whereSname='王林')
ANDSage<
(selectSage
fromStudent
whereSname='王林');
或者也可以
selectX.sname
fromStudentasX,StudentasY
whereX.Sno>Y.SnoANDX.Sage ⑥检索姓名以“王”开头的所有学生的姓名和年龄; selectSname,Sage fromStudent whereStudent.Snamelike'王%'; 注意: like那里不能用等号“=” ⑦在SC中检索成绩为空值的学生学号和课程号; SELECTSno,Cno fromSC whereGradeisnull 注意: isnull那里不能用等号“=” ⑧求年龄大于女学生平均年龄的男学生姓名和年龄; SELECTSname,Sage fromStudent whereSage>(selectavg(Sage) fromstudent whereSsex='女') ANDSsex='男'; ⑨求年龄大于所有女学生年龄的男学生姓名和年龄; SELECTSname,Sage fromStudent whereSage>(SELECTMAX(Sage) fromStudent whereSsex='女') ANDSsex='男'; ⑩检索所有比“王林”年龄大的学生姓名、年龄和性别; SELECTSname,Sage,Ssex fromStudent whereSage>(selectSage fromStudent whereSname='王林') ⑾检索选修“2”课程的学生中成绩最高的学生的学号; SELECTSno,Grade fromSC whereGrade=(selectMAX(Grade) fromSC whereCno='2'); 注意: 不能写成Grade=MAX(Grade)的形式,因为不存在! Count,min,avg也是 ⑿检索学生姓名以及所选修课程的课程号和成绩; selectSname,Cno,Grade fromSC,Student whereStudent.Sno=SC.Sno; ⒀检索选修4门以上课程的学生总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来。 选择4门以上 selectsno,sum(Grade)sum fromSC wheregrade>=60 ANDSnoin (selectSno fromSC groupbySno havingcount(Sno)>4) groupbysno orderbysum(grade)desc 注意: 选择2门课(包括两门) selectsno,sum(Grade) fromSC wheregrade>=60 ANDSnoin (selectSno fromSC groupbySno havingcount(Sno)>=2) groupbysno orderbysum(grade)desc 再注意: Selectsno,sum(grade) FromSC Wheregrade>=60 Groupbysnohavingcount(sno)>1 Orderbysum(grade)desc 因为输入的数据分数都大于60,所以结果与上面的例子相同。 但是,当分数小于60时,有课不及格的同学的学号会被删除,统计不完整。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验教学 文案