zoukankan      html  css  js  c++  java
  • SQL 实验详细源码参考

      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;
  • 相关阅读:
    数据分析的5层解读,报表仍是有效的落地实践!
    rex 传文件改变用户属主
    rex 通过--parameter1=dbcdefg传参
    rex 给shell 脚本传参
    rex run 传参
    rex ssh公钥认证
    eclipse maven工程中src/main/resources目录下创建的文件夹是包图标的解决方法
    数据分析的三层需求
    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value
    java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
  • 原文地址:https://www.cnblogs.com/swanGooseMan/p/4631542.html
Copyright © 2011-2022 走看看