设为首页 收藏本站
查看: 617|回复: 0

[经验分享] mysql sampdb数据库存储过程操作记录

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-9-13 09:00:26 | 显示全部楼层 |阅读模式
1.sampdb所用到的表格
sampdb关于学生考试的表格总共有四张,如下
学生信息表
MariaDB [sampdb]> select * from student;
+-----------+-----+------------+
| name      | sex | student_id |                     
+-----------+-----+------------+                     
| Megan     | F   |          1 |
| Joseph    | M   |          2 |
| Kyle      | M   |          3 |

学生成绩表
MariaDB [sampdb]> select * from score;
+------------+----------+-------+
| student_id | event_id | score |
+------------+----------+-------+
|          1 |        1 |    20 |
|          3 |        1 |    20 |
|          4 |        1 |    18 |

测试考试统计表
MariaDB [sampdb]> select * from grade_event;
+------------+----------+----------+
| date       | category | event_id |
+------------+----------+----------+
| 2008-09-03 | Q        |        1 |
| 2008-09-06 | Q        |        2 |
| 2008-09-09 | T        |        3 |
| 2008-09-16 | Q        |        4 |
| 2008-09-23 | Q        |        5 |
| 2008-10-01 | T        |        6 |
+------------+----------+----------+

学生缺勤表
MariaDB [sampdb]> select * from absence;
+------------+------------+
| student_id | date       |
+------------+------------+
|          3 | 2008-09-03 |
|          5 | 2008-09-03 |
|         10 | 2008-09-06 |
|         10 | 2008-09-09 |
|         17 | 2008-09-07 |
|         20 | 2008-09-07 |


2.表格结构索引

   student

   | student | CREATE TABLE `student` (
  `name` varchar(20) NOT NULL,
  `sex` enum('F','M') NOT NULL,
  `student_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=latin1 |

   score
   
   | score | CREATE TABLE `score` (
  `student_id` int(10) unsigned NOT NULL,
  `event_id` int(10) unsigned NOT NULL,
  `score` int(11) NOT NULL,
  PRIMARY KEY (`event_id`,`student_id`),
  KEY `student_id` (`student_id`),
  CONSTRAINT `score_ibfk_1` FOREIGN KEY (`event_id`) REFERENCES `grade_event` (`event_id`),
  CONSTRAINT `score_ibfk_2` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

  grade_event

  | grade_event | CREATE TABLE `grade_event` (
  `date` date NOT NULL,
  `category` enum('T','Q') NOT NULL,
  `event_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`event_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 |

   absence

   | absence | CREATE TABLE `absence` (
  `student_id` int(10) unsigned NOT NULL,
  `date` date NOT NULL,
  PRIMARY KEY (`student_id`,`date`),
  CONSTRAINT `absence_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |


3.检索数据

检索统计参加event_id为1考试的学生人数

MariaDB [sampdb]> select count(student_id) from score where event_id=1;
+-------------------+
| count(student_id) |
+-------------------+
|                29 |
+-------------------+
1 row in set (0.00 sec)

列出参加event_id为1考试的学生名单

MariaDB [sampdb]> select group_concat(student.name) from student left join score on student.student_id=score.student_id
where score.event_id=1;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| group_concat(student.name)                                                                                                                                                             |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Megan,Kyle,Katie,Abby,Nathan,Liesl,Ian,Colin,Peter,Michael,Thomas,Ben,Aubrey,Rebecca,Will,Max,Rianne,Avery,Lauren,
Becca,Gregory,Sarah,Robbie,Keaton,Carter,Teddy,Gabrielle,Grace,Emily |
+---------

检索统计未参加event_id为1考试的学生人数

MariaDB [sampdb]> select count(student.student_id) from student left join (select * from score where event_id=1) as score1 on student.student_id=score1.student_id where score1.score is null;
+---------------------------+
| count(student.student_id) |
+---------------------------+
|                         2 |
+---------------------------+
1 row in set (0.00 sec)


列出未参加event_id为1考试的学生名单

MariaDB [sampdb]> select group_concat(student.name) from student left join (select * from score where event_id=1)
as score1 on student.student_id=score1.student_id where score1.score is null;
+----------------------------+
| group_concat(student.name) |
+----------------------------+
| Joseph,Devri               |
+----------------------------+

检索参加event_id为1考试的学生最高成绩,平均成绩,最低成绩

  MariaDB [sampdb]> select max(score1.score),avg(score1.score),min(score1.score) from student left join (select *
from score where event_id=1) as score1 on student.student_id=score1.student_id;
+-------------------+-------------------+-------------------+
| max(score1.score) | avg(score1.score) | min(score1.score) |
+-------------------+-------------------+-------------------+
|                20 |           15.1379 |                 9 |
+-------------------+-------------------+-------------------+

检索参加event_id为1考试的最高成绩的学生名字

select student.name from student left join score on student.student_id=score.student_id where  
score.event_id=1 and score=(select max(score) from score where event_id=1);
+--------+
| name   |
+--------+
| Megan  |
| Kyle   |
| Aubrey |
| Max    |
+--------+

减速参加event_id为1考试的最低成绩的学生名字

MariaDB [sampdb]> select student.name,score from student left join score on student.student_id=score.student_id where  score.event_id=1 and  score=(select min(score) from score where event_id=1);
+--------+-------+
| name   | score |
+--------+-------+
| Will   |     9 |
| Rianne |     9 |
| Avery  |     9 |
+--------+-------+
3 rows in set (0.00 sec)

4.写一个存储过程,根据考试ID,列出这次考试多少人参加,列出参加学生的名字,多少人缺席,列出缺席的学生名字,
列出考试的最高成绩的获得者的名字和最高成绩,最低成绩的获得者名字和最低成绩,平均成绩。

create procedure id_in(num int)
begin
select concat('考试人数'),count(student_id) from score where event_id=num;        
select concat('参加考试名单'),group_concat(name) from student left join score on student.student_id=score.student_id where event_id=num;        
select concat('缺席考试人数'),count(name) from student left join (select * from score where event_id=num) as score1 on student.student_id=score1.student_id where score1.score is null;      
select concat('缺席考试名单'),group_concat(name) from student left join (select * from score where event_id=num) as score1 on student.student_id=score1.student_id where score1.score is null;      
select concat('最高成绩学生名单'),group_concat(student.name) from student left join score on student.student_id=score.student_id where score.event_id=num and score=(select max(score) from score where score.event_id=num);         
select concat('最 低成绩学生名单'),group_concat(student.name) from student left join score on student.student_id=score.student_id where score.event_id=num and score=(select min(score) from score where score.event_id=num);
select concat('最高成绩'),max(score1.score),concat('平均成绩'),avg(score1.score),concat('最低成绩'),min(score1.score) from student left join (select * from score where score.event_id=num) as score1 on student.student_id=score1.student_id;
end$


结果:


MariaDB [sampdb]> call id_in(1);
+------------------------+-------------------+
| concat('考试人数')     | count(student_id) |
+------------------------+-------------------+
| 考试人数               |                29 |
+------------------------+-------------------+
1 row in set (0.01 sec)

+------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| concat('参加考试名单')       | group_concat(name)                                                                                                                                                                     |
+------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 参加考试名单                 | Megan,Kyle,Katie,Abby,Nathan,Liesl,Ian,Colin,Peter,Michael,Thomas,Ben,Aubrey,Rebecca,Will,Max,Rianne,Avery,Lauren,Becca,Gregory,Sarah,Robbie,Keaton,Carter,Teddy,Gabrielle,Grace,Emily |
+------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

+------------------------------+-------------+
| concat('缺席考试人数')       | count(name) |
+------------------------------+-------------+
| 缺席考试人数                 |           2 |
+------------------------------+-------------+
1 row in set (0.01 sec)

+------------------------------+--------------------+
| concat('缺席考试名单')       | group_concat(name) |
+------------------------------+--------------------+
| 缺席考试名单                 | Joseph,Devri       |
+------------------------------+--------------------+
1 row in set (0.01 sec)

+------------------------------------+----------------------------+
| concat('最高成绩学生名单')         | group_concat(student.name) |
+------------------------------------+----------------------------+
| 最高成绩学生名单                   | Megan,Kyle,Aubrey,Max      |
+------------------------------------+----------------------------+
1 row in set (0.01 sec)

+-------------------------------------+----------------------------+
| concat('最 低成绩学生名单')         | group_concat(student.name) |
+-------------------------------------+----------------------------+
| 最 低成绩学生名单                   | Will,Rianne,Avery          |
+-------------------------------------+----------------------------+
1 row in set (0.01 sec)

+------------------------+-------------------+------------------------+-------------------+------------------------+-------------------+
| concat('最高成绩')     | max(score1.score) | concat('平均成绩')     | avg(score1.score) | concat('最低成绩')     | min(score1.score) |
+------------------------+-------------------+------------------------+-------------------+------------------------+-------------------+
| 最高成绩               |                20 | 平均成绩               |           15.1379 | 最低成绩               |                 9 |
+------------------------+-------------------+------------------------+-------------------+------------------------+-------------------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-404410-1-1.html 上篇帖子: mysql主从切换 下篇帖子: MySQL操作手册
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表