码迷,mamicode.com
首页 > 数据库 > 详细

SQL 实验详细源码参考

时间:2015-07-09 00:12:31      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

  1 -- ----------------------------------------------------------------------------------
  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 from student group by sdept order by number_of_student;
214 
215 -- 9.   按系统计各系学生的平均年龄,结果按降序排列;
216 select sdept,avg(sage) as avg_age from student group by sdept order by avg_age desc;
217 
218 -- 10.  查询每门课程的课程名;
219 select cname from course;
220 
221 -- 11.  查询无先修课的课程的课程名和学分数;注意空值测试语句 ‘is null‘ or ‘is not null‘;
222 select cname,ccredit from course where cpno is null;
223 
224 -- 12.  统计无先修课的课程的学分总数;
225 select sum(ccredit) as total_credit from course where cpno is null;
226 
227 -- 13.  统计每位学生选修课程的门数、学分及其平均成绩;
228 select sc.sno, count(sc.sno) as number_of_course, sum(ccredit) as number_of_credit, avg(grade) as avg_grade
229 from sc, course where sc.cno = course.cno group by sc.sno;
230 
231 -- 14.  统计选修每门课程的学生人数及各门课程的平均成绩;
232 select cno,count(sno) as number_of_student, avg(grade) as avg_grade from sc group by cno;
233 
234 -- 15.  找出平均成绩在85分以上的学生,结果按系分组,并按平均成绩的升序排列;
235 select sc.sno, avg(grade) as avg_grade from sc,student where sc.sno = student.sno
236 group by sc.sno, sdept having avg_grade >= 85 order by avg_grade;
237 
238 -- 16.  查询选修了“01”或“02”号课程的学生学号和姓名;
239 select  distinct sc.sno,sname from sc,student where sc.sno = student.sno and (cno = 01 or cno = 02);
240 
241 -- 17.  查询选修了“1”和“2”号课程的学生学号和姓名;
242 select distinct s1.sno,sname from sc as s1,student where s1.sno = student.sno and cno = 01 and 02 in (
243 select cno from sc as s2 where s2.sno = s1.sno);
244 
245 select distinct sc.sno,sname from sc,student where sc.sno = student.sno and cno = 01 and sc.sno in (
246 select sno from sc where cno = 02);
247 
248 -- 18.  查询选修了课程名为“Database”且成绩在60分以下的学生的学号、姓名和成绩;
249 select sc.sno,sname,grade from sc,student,course where student.sno = sc.sno and sc.cno = course.cno
250 and cname = Database and grade < 60;
251 
252 -- 19.  查询每位学生选修了课程的学生信息(显示:学号,姓名,课程号,课程名,成绩);
253 select sc.sno,sname,sc.cno,cname,grade from sc,student,course where student.sno = sc.sno
254 and sc.cno = course.cno;
255 
256 -- 20.  查询没有选修课程的学生的基本信息;
257 select sno,sname,sage,ssex,sdept from student where sno not in (select sno from sc);
258 
259 -- 21.  查询选修了3门以上课程的学生学号;
260 select sno from sc group by sno having count(sno) >= 3;
261 
262 -- 22.  查询选修课程成绩至少有一门在80分以上的学生学号;
263 select sno from sc group by sno having max(grade) > 80;
264 
265 -- 23.  查询选修课程成绩均在80分以上的学生学号;
266 select sno from sc group by sno having min(grade) > 80;
267 
268 -- 24.  查询选修课程平均成绩在80分以上的学生学号;
269 select sno from sc group by sno having avg(grade) > 80;
270 
271 -- -----------------------------------------------------
272 drop database s_13420228;

 

SQL 实验详细源码参考

标签:

原文地址:http://www.cnblogs.com/swanGooseMan/p/4631542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!