当前位置:Gxlcms > 数据库问题 > SQL 实验详细源码参考

SQL 实验详细源码参考

时间:2021-07-01 10:21:17 帮助过:3人阅读

-- ---------------------------------------------------------------------------------- 2 -- 数据库初始化 (实验二 数据描述、定义实验) 3 -- ---------------------------------------------------------------------------------- 4 create database s_13420228; 5 use s_13420228; 6 7 create table student( 8 sno varchar(8), 9 sname varchar(20) not null, -- 姓名 10 sage smallint, -- 年龄 11 ssex char(8), -- 性别 12 sdept varchar(20) , -- 所在系 13 constraint s_pk primary key (sno), -- 主码 14 constraint s1 check(sage between 16 and 40), 15 constraint s2 check(ssex in(male,female)), 16 constraint s3 check(grade between 0 and 100) 17 ); 18 19 create table course( 20 cno varchar(7), -- 课程号 21 cname varchar(50), -- 课程名 22 cpno varchar(50), -- 先行课 23 ccredit numeric(2,1), -- 学分,精确存储3.5 24 constraint c_pk primary key (cno,cname), -- 主码 25 constraint s4 foreign key (cpno) references course (cno) -- 先行课必须要存在 26 ); 27 28 create table sc( -- 学生选课表 29 sno varchar(8), -- 学号 30 cno varchar(7), -- 课程号 31 grade smallint, -- 成绩 32 constraint sc_pk primary key (sno,cno), -- 主码 33 constraint s5 foreign key (sno) references student(sno) on delete cascade on update cascade, -- sc中的学号必须存在,级联删除、更新 34 constraint s6 foreign key (cno) references course(cno) on delete cascade on update cascade -- sc中课程号必须存在 35 ); 36 37 insert into course values(01, Database, null, 4.0); -- 插入数据 course 38 insert into course values(02, Operating System, null, 3.5); 39 insert into course values(03, Computer Networking, null, 4.0); 40 insert into course values(04, Data Structures, null, 4.0); 41 insert into course values(05, The C++ Programming Language, null, 4.0); 42 insert into course values(06, The C Programming Language, null, 4.0); 43 insert into course values(07, Physical Principles, null, 2.0); 44 insert into course values(08, Music Video Production, null, 3.0); 45 insert into course values(09, Computational Biology, null, 3.0); 46 insert into course values(10, Genetics, null, 3.0); -- Biology 47 insert into course values(11, Intro. to Biology, null, 3.0); 48 49 insert into student values(13420201, Zhang, 18,male, CS); -- 插入数据 student 50 insert into student values(13420202, Shankar, 20,male, CS); 51 insert into student values(13420203, Brandt, 18,male, CS); 52 insert into student values(13420204, Chavez, 19,female, CS); 53 insert into student values(13312205, Peltier, 21,female, Music); 54 insert into student values(13312213, Levy, 20,female, Music); 55 insert into student values(13312137, Williams,20, male, Music); 56 insert into student values(13523111, Bourikas, 19,male, Biology); 57 insert into student values(13523222, Smith, 19,male, Biology); 58 insert into student values(13453334, Snow, 19,male, Physics); 59 60 insert into sc values(13420201, 01, 80); -- 插入数据 sc CS 61 insert into sc values(13420201, 02, 70); 62 insert into sc values(13420201, 03, 90); 63 insert into sc values(13420201, 04, 40); 64 insert into sc values(13420201, 05, 60); 65 insert into sc values(13420201, 06, 90); 66 67 insert into sc values(13420202, 01, 80); 68 insert into sc values(13420202, 03, 90); 69 insert into sc values(13420202, 04, 30); 70 insert into sc values(13420202, 05, 70); 71 insert into sc values(13420202, 06, 90); 72 73 insert into sc values(13420203, 01, 80); 74 insert into sc values(13420203, 02, 90); 75 insert into sc values(13420203, 03, 90); 76 insert into sc values(13420203, 04, 85); 77 insert into sc values(13420203, 05, 75); 78 insert into sc values(13420203, 06, 90); 79 80 insert into sc values(13420204, 01, 55); 81 insert into sc values(13420204, 02, 55); 82 insert into sc values(13420204, 03, 90); 83 insert into sc values(13420204, 04, 55); 84 insert into sc values(13420204, 05, 70); 85 insert into sc values(13420204, 06, 90); 86 87 insert into sc values(13312205, 08, 90); -- Music 88 insert into sc values(13312213, 08, 60); 89 insert into sc values(13312137, 08, 60); 90 91 insert into sc values(13523111, 09, 60); -- Biology 92 insert into sc values(13523111, 10, 59); 93 insert into sc values(13523111, 11, 80); 94 95 insert into sc values(13453334, 07, 70); -- Physics 96 97 update course set cpno = 04 where cno = 01; -- 更新 course 98 update course set cpno = 04 where cno = 02; 99 update course set cpno = 05 where cno = 03; 100 update course set cpno = 05 where cno = 04; 101 update course set cpno = 06 where cno = 05; 102 103 -- --------------------初始化完成---------------------------------------------------------- 104 105 -- 建立索引可以加快查询速度 106 create index grade_index on sc(grade); -- 多值索引 107 create unique index sno_index on student(sno); -- 唯一索引,每一个索引值只对应一个唯一的数据记录 108 drop index grade_index on sc; -- 删除索引 109 drop index sno_index on student; 110 111 alter table student add birthday date; -- 添加属性列 112 alter table student drop sage; -- 删除属性列 113 114 alter table course drop foreign key s3; -- 删除约束s3 115 alter table course add constraint s3 foreign key (cpno) references course (cno) 116 on delete cascade on update cascade; -- 先行课必须要存在,添加级联删除、更新 117 118 delete from course where cno = 04; -- 删除特定元组 119 120 delete from student; -- 删除关系student的所有元组 121 delete from sc; 122 delete from course; 123 drop table student; -- 完全删除student,包括student这个模式及其所有元组 124 drop table sc; 125 drop table course; 126 127 -- ---------------------------------------------------------------------------------- 128 -- (实验三 数据更新实验) 129 -- ---------------------------------------------------------------------------------- 130 131 -- 插入某个学生的选课信息(外码约束,拒绝的) 132 insert into sc values(13436214,01,0); 133 134 -- 求各系学生的平均成绩,并把结果存入数据库 135 create table sdept_avg_grade ( 136 sdept varchar(20), 137 avg_grade smallint, 138 constraint sag_pk primary key (sdept), 139 constraint s7 check(avg_grade between 0 and 100) 140 -- constraint s8 foreign key (sdept) references student(sdept) -- 由于外码属性必须为莫关系的主码,此外码定义语句错误 141 ); 142 143 insert into sdept_avg_grade 144 select sdept,avg(grade) from sc,student where sc.sno = student.sno group by sdept ; 145 146 drop tables sdept_avg_grade; 147 148 --   将“CS”系全体学生的成绩置零 149 update sc set grade = 0 where CS = ( 150 select sdept from student where sc.sno = student.sno); 151 152 -- 删除“CS”系全体学生的选课记录 153 delete from sc where CS = ( 154 select sdept from student where sc.sno = student.sno); 155 156 -- 删除学号为“13420201”的相关信息(级联删除cascade) 157 delete from student where sno = 13420201; 158 159 -- 将学号为“13420202”的学生的学号修改为“12420202”(级联更新) 160 update student set sno = 12420202 where sno = 13420202; 161 162 -- 把平均成绩大于80分的男同学的学号和平均成绩存入另一个表S_GRADE(SNO,AVG_GRADE) 163 create table s_grade( 164 sno varchar(8), 165 avg_grade smallint, 166 constraint sg_pk primary key (sno), 167 constraint s9 foreign key (sno) references student(sno), 168 constraint s10 check(grade between 0 and 100) 169 ); 170 insert into s_grade 171 select sc.sno,avg(grade) from sc,student where sc.sno = student.sno and ssex = male 172 group by sc.sno having avg(grade) > 80; 173 174 select * from s_grade; 175 drop table s_grade; 176 177 -- 把选修了课程名为“Data Structures”的学生的成绩提高10%; 178 update sc set grade = grade * 1.1 where Data Structures = ( 179 select cname from course where sc.cno = course.cno ); 180 181 select sno,grade from sc,course where sc.cno = course.cno and cname = Data Structures; 182 select avg(grade) from sc,course where sc.cno = course.cno and cname = Data Structures; 183 184 185 -- --------------------------------------------------------------------------------------------- 186 -- (实验四 数据查询实验) 187 -- --------------------------------------------------------------------------------------------- 188 189 -- 1. 查询学生的基本信息; 190 select * from student; 191 192 -- 2. 查询“CS”系学生的基本信息 193 select * from student where sdept = CS; 194 195 -- 3. 查询“CS”系学生年龄不在19到21之间的学生的学号、姓名; 196 select sno,sname from student where sdept = CS and sage not between 19 and 21; 197 198 -- 4. 找出最大年龄; 199 select max(sage) from student; 200 201 -- 5. 找出“CS”系年龄最大的学生,显示其学号、姓名; 202 select sno,sname from student where sdept = CS and sage = ( 203 select max(sage) from student where sdept = CS); 204 205 -- 6. 找出各系年龄最大的学生,显示其学号、姓名; 206 select sno,sname from student as s1 where sage = ( 207 select max(sage) from student as s2 where s1.sdept = s2.sdept); 208 209 -- 7. 统计“CS”系学生的人数; 210 select count(sno) as number_of_student from student where sdept = CS; 211 212 -- 8. 统计各系学生的人数,结果按升序排列; 213 select sdept, count(sno) as number_of_student

人气教程排行