数据库经典习题,

/*
 数据导入:
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50624
 Source Host           : localhost
 Source Database       : sqlexam

 Target Server Type    : MySQL
 Target Server Version : 50624
 File Encoding         : utf-8

 Date: 10/21/2016 06:46:46 AM
*/

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `class`
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(32) NOT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `class`
-- ----------------------------
BEGIN;
INSERT INTO `class` VALUES (‘1‘, ‘三年二班‘), (‘2‘, ‘三年三班‘), (‘3‘, ‘一年二班‘), (‘4‘, ‘二年九班‘);
COMMIT;

-- ----------------------------
--  Table structure for `course`
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(32) NOT NULL,
  `teacher_id` int(11) NOT NULL,
  PRIMARY KEY (`cid`),
  KEY `fk_course_teacher` (`teacher_id`),
  CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `course`
-- ----------------------------
BEGIN;
INSERT INTO `course` VALUES (‘1‘, ‘生物‘, ‘1‘), (‘2‘, ‘物理‘, ‘2‘), (‘3‘, ‘体育‘, ‘3‘), (‘4‘, ‘美术‘, ‘2‘);
COMMIT;

-- ----------------------------
--  Table structure for `score`
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) NOT NULL,
  `course_id` int(11) NOT NULL,
  `num` int(11) NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_score_student` (`student_id`),
  KEY `fk_score_course` (`course_id`),
  CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),
  CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `score`
-- ----------------------------
BEGIN;
INSERT INTO `score` VALUES (‘1‘, ‘1‘, ‘1‘, ‘10‘), (‘2‘, ‘1‘, ‘2‘, ‘9‘), (‘5‘, ‘1‘, ‘4‘, ‘66‘), (‘6‘, ‘2‘, ‘1‘, ‘8‘), (‘8‘, ‘2‘, ‘3‘, ‘68‘), (‘9‘, ‘2‘, ‘4‘, ‘99‘), (‘10‘, ‘3‘, ‘1‘, ‘77‘), (‘11‘, ‘3‘, ‘2‘, ‘66‘), (‘12‘, ‘3‘, ‘3‘, ‘87‘), (‘13‘, ‘3‘, ‘4‘, ‘99‘), (‘14‘, ‘4‘, ‘1‘, ‘79‘), (‘15‘, ‘4‘, ‘2‘, ‘11‘), (‘16‘, ‘4‘, ‘3‘, ‘67‘), (‘17‘, ‘4‘, ‘4‘, ‘100‘), (‘18‘, ‘5‘, ‘1‘, ‘79‘), (‘19‘, ‘5‘, ‘2‘, ‘11‘), (‘20‘, ‘5‘, ‘3‘, ‘67‘), (‘21‘, ‘5‘, ‘4‘, ‘100‘), (‘22‘, ‘6‘, ‘1‘, ‘9‘), (‘23‘, ‘6‘, ‘2‘, ‘100‘), (‘24‘, ‘6‘, ‘3‘, ‘67‘), (‘25‘, ‘6‘, ‘4‘, ‘100‘), (‘26‘, ‘7‘, ‘1‘, ‘9‘), (‘27‘, ‘7‘, ‘2‘, ‘100‘), (‘28‘, ‘7‘, ‘3‘, ‘67‘), (‘29‘, ‘7‘, ‘4‘, ‘88‘), (‘30‘, ‘8‘, ‘1‘, ‘9‘), (‘31‘, ‘8‘, ‘2‘, ‘100‘), (‘32‘, ‘8‘, ‘3‘, ‘67‘), (‘33‘, ‘8‘, ‘4‘, ‘88‘), (‘34‘, ‘9‘, ‘1‘, ‘91‘), (‘35‘, ‘9‘, ‘2‘, ‘88‘), (‘36‘, ‘9‘, ‘3‘, ‘67‘), (‘37‘, ‘9‘, ‘4‘, ‘22‘), (‘38‘, ‘10‘, ‘1‘, ‘90‘), (‘39‘, ‘10‘, ‘2‘, ‘77‘), (‘40‘, ‘10‘, ‘3‘, ‘43‘), (‘41‘, ‘10‘, ‘4‘, ‘87‘), (‘42‘, ‘11‘, ‘1‘, ‘90‘), (‘43‘, ‘11‘, ‘2‘, ‘77‘), (‘44‘, ‘11‘, ‘3‘, ‘43‘), (‘45‘, ‘11‘, ‘4‘, ‘87‘), (‘46‘, ‘12‘, ‘1‘, ‘90‘), (‘47‘, ‘12‘, ‘2‘, ‘77‘), (‘48‘, ‘12‘, ‘3‘, ‘43‘), (‘49‘, ‘12‘, ‘4‘, ‘87‘), (‘52‘, ‘13‘, ‘3‘, ‘87‘);
COMMIT;

-- ----------------------------
--  Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `gender` char(1) NOT NULL,
  `class_id` int(11) NOT NULL,
  `sname` varchar(32) NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_class` (`class_id`),
  CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `student`
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES (‘1‘, ‘男‘, ‘1‘, ‘理解‘), (‘2‘, ‘女‘, ‘1‘, ‘钢蛋‘), (‘3‘, ‘男‘, ‘1‘, ‘张三‘), (‘4‘, ‘男‘, ‘1‘, ‘张一‘), (‘5‘, ‘女‘, ‘1‘, ‘张二‘), (‘6‘, ‘男‘, ‘1‘, ‘张四‘), (‘7‘, ‘女‘, ‘2‘, ‘铁锤‘), (‘8‘, ‘男‘, ‘2‘, ‘李三‘), (‘9‘, ‘男‘, ‘2‘, ‘李一‘), (‘10‘, ‘女‘, ‘2‘, ‘李二‘), (‘11‘, ‘男‘, ‘2‘, ‘李四‘), (‘12‘, ‘女‘, ‘3‘, ‘如花‘), (‘13‘, ‘男‘, ‘3‘, ‘刘三‘), (‘14‘, ‘男‘, ‘3‘, ‘刘一‘), (‘15‘, ‘女‘, ‘3‘, ‘刘二‘), (‘16‘, ‘男‘, ‘3‘, ‘刘四‘);
COMMIT;

-- ----------------------------
--  Table structure for `teacher`
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `tname` varchar(32) NOT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `teacher`
-- ----------------------------
BEGIN;
INSERT INTO `teacher` VALUES (‘1‘, ‘张磊老师‘), (‘2‘, ‘李平老师‘), (‘3‘, ‘刘海燕老师‘), (‘4‘, ‘朱云海老师‘), (‘5‘, ‘李杰老师‘);
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

mysql习题代码

1、查询所有的课程(course)的名称以及对应的任课(teacher)老师姓名
select cname,tname from course left join teacher on course.teacher_id=teacher.tid;

2、查询学生表(student)中男女生各有多少人
select gender,count(sid) from student group by gender;

3、查询物理(course)成绩(score)等于100的学生(student)的姓名
select sname from student where sid in(select student_id from score where course_id=(select cid from course where cname=‘物理‘)and num=100);

4、查询平均成绩(score)大于八十分的同学(student)的姓名和平均成绩
select student.sname,t1.平均成绩 from student inner join
(select student_id,avg(num) 平均成绩 from score group by student_id having avg(num)>80)as t1
on student.sid=t1.student_id;

5、查询所有学生(student)的学号,姓名,选课数(course),总成绩(score)
select student.sid,student.sname 姓名,选课数,总成绩 from student inner join
(select student_id,count(course_id) 选课数,sum(num) 总成绩 from score group by student_id) as t1
on student.sid=t1.student_id;

6、 查询姓李(teacher)老师的个数
select count(tid) 李姓老师 from teacher where tname like ‘李%‘;

7、 查询没有报李平(teacher)老师课(course)的学生(student)姓名
select sname from student where sid not in
(select distinct student_id from score where course_id in(select cid from course where teacher_id=(select tid from teacher where tname=‘李平老师‘)));

8、 查询物理课程(course)比生物课程高(score)的学生(student)的学号
select t1.student_id from
(select student_id,num from course inner join score on score.course_id=course.cid where course.cname=‘物理‘) as t1
inner join
(select student_id,num from course inner join score on score.course_id=course.cid where course.cname=‘生物‘) as t2
on t1.student_id=t2.student_id
where t1.num>t2.num;

9、 查询没有同时(score)选修物理课程(course)和体育课程的学生(student)姓名
select sname from student where sid in
(select student_id from score inner join course on course.cname in(‘物理‘,‘体育‘)and course.cid=score.course_id group by student_id having count(course_id)=1);

10、查询挂科(score)超过两门(包括两门)的学生(student)姓名和班级(course)

select t2.sname,class.caption from    #民投资,班级信息
(select sname,class_id from student inner join  #名字班级挂科超过两次
(select student_id from score where num<60 group by student_id having count(course_id)>=2) as t1  #挂科2次
on student.sid=t1.student_id) as t2
inner join class
on class.cid = t2.class_id

11 、查询选修了所有课程的学生姓名
select sname from student inner join
(
select student_id from score group by student_id having count(course_id) = (select count(cid) from course)
) t1
on t1.student_id = student.sid
;

12、查询李平老师(teacher)教的课程的所有成绩(score)记录
 select student_id,course_id,num from score inner join (select cid from course inner join teacher on teacher.tname=‘李平老师‘ and teacher.tid=course.teacher_id) as t1
 on t1.cid=score.course_id;

#13、查询全部(student)学生都选修了的课程号和课程名(course)
select course.cid,course.cname from course inner join
(select course_id from score group by course_id having count(student_id)=(select count(sid) from student))as t1
on t1.course_id=course.cid;

#14、查询每门课程(course)被选修的次数(score)
select course.cname,选修人数 from course inner join     #课程名,人数(次数)
(select course_id,count(student_id) 选修人数 from score group by course_id) as t1   #课程ID学生总人数
on t1.course_id=course.cid;

15、查询只选修了一门课程(course)的学生(student)姓名和学号
select sid,sname from student inner join (select student_id from score group by student_id having count(course_id)=1) as t1               #一门课程    student_id只选择一门课程的学生
on t1.student_id=student.sid;

#16、查询所有学生(student)考出的成绩(score)并按从高到低排序(成绩去重)
select distinct num from score order by num desc;

17、查询平均成绩(score)大于85的学生(student)姓名和平均成绩
select student.sname,平均成绩 from student inner join
(select student_id,avg(num) 平均成绩 from score group by student_id having avg(num)>85) as t1
on student.sid=t1.student_id;

18、查询生物(course)成绩(score)不及格的学生(student)姓名和对应生物分数
select student.sname,t1.num from student inner join
(select student_id,num from score where course_id=(select cid from course where cname=‘生物‘) and num<60) as t1  #s生物不及格的人的学生ID和姓名
on student.sid=t1.student_id;

19、查询在所有选修了李平(teacher)老师课程的学生(student)中,这些课程(李平老师的课程,不是所有课程)平均成绩(num)最高的学生姓名
select sname from student where sid=                   #最终筛选
(select student_id from score where course_id in     #学生的sid在李平老师的课程
(select cid 李平老师课程 from teacher inner join course on teacher.tname=‘李平老师‘ and course.teacher_id=teacher.tid)    #链接的纽带         得到李平老师课程的cid
group by student_id          #根据学生分组
order by avg(num) desc       #成绩排序
limit 1);               #去一个     最高的成绩

20、查询每门课程成绩最好的前两名学生姓名

21、查询不同课程但成绩相同的学号,课程号,成绩

22、查询没学过“叶平”老师课程的学生姓名以及选修的课程名称;

23、查询所有选修了学号为1的同学选修过的一门或者多门课程的同学学号和姓名;

24、任课最多的老师中学生单科成绩最高的学生姓名

答案部分

时间: 2024-12-25 03:43:55

数据库经典习题,的相关文章

Java经典习题(2)

6.输入一行字符,分别统计出其中英文字母.空格.数字和其他字符的个数. 程序分析:从控制台获取一行输入,然后对String字符串的内容进行判断,统计每种字符的个数,直到遇到回车"\n"为止. import java.util.Scanner; public class Question6 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next

Java经典习题(1)

1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数是多少对? 程序分析:每个月兔子总数是1,1,2,3,5,8,13,21--发现规律,从第三个月开始,每个月的兔子总数是前两个月的兔子总数的和.(这个数列其实是斐波那契数列) public class Question1 { public static void main(String[] args){ Scanner in = new Scanner(Sys

Java经典习题(3)

11.中国古代算书<张丘建算经>中有一道著名的百鸡问题:公鸡每只值5 文钱,母鸡每只值3 文钱,而3 只小鸡值1 文钱.用100 文钱买100 只鸡,问:这100 只鸡中,公鸡.母鸡和小鸡各有多少只? 程序分析:这个题目需要利用嵌套的for循环来解决,x表示公鸡的只数,y表示母鸡的只数,z表示小鸡的只数.x.y.z都是从0循环到100,需要满足3个条件:a)x+y+z==100; b)5*x+3*y+z/3==100; c)z%3==0 . public class Question11 {

一道关于数据库(经典父子级 ID 关联)更新题,大家帮忙想想还有其它解决思路没有?

昨天,一同事发过来的一道数据库题目,就是哪种经典的父子级 ID 在同一数据库表中设计类型.需要在原表中添加一个字段,同时,将该节点的父子级详细信息插入到原表新增的一字段中,具体效果如下图. AreaCode .AreaName.ParentCode (原表三字段). Content __新增字段,更新该 AreaCode 下所有父级菜单信息至新增至原表的 Content 字段下面,用红线框起来(意思应该讲明白了吧.) AreaCode:地区 ID   AreaName:地区介绍    Paren

MySQL基本语句与经典习题

[SQL语句大全] 本文用到的数据(5张表): customers: orders: orderitems: Products:  Vendors: 一.检索数据-select语句select prod_name from products;                        #检索单个列select prod_id,prod_name,prod_price from products;         #检索多个列select * from products;#检索所有列selec

VB数据库经典实例总结(一)

先让大家看一张图.随后讲解..... 敲完五个例子之后的心情是非常好的.并没有想象中的那么难,深究它的话大致思路就是.: 建立数据库 --->利用VB导出数据 --->供人们使用.. 因为之前学了VB  所以有一定的基础,只是在数据库这方面又涉及到了一些之前没用过的控件.对象.属性.等等..跟VB也是大同小异.在这其中代码是一点.在敲例子的过程中出错最多的也就是由于不认真代码敲错.. 关于那些具体的思路.对象.等将在下篇的博文中得以体现...

数据库经典问题

1.存储过程的优点是什么? 存储过程的优点: 1.提高性能 2.减轻网络拥塞 3.一致性较好 4.改善安全机制 2.什么是触发器?触发器有哪几种?触发器有什么优点? 一个触发器是由T-SQL语句集组成的代码块,在响应某些动作时激活该语句集 有insert,delete,update触发器 它防止了对数据的不正确.未授权的和不一致的改变 3.常见的几种约束有哪些?分别代表什么意思?如何使用? 1)实体完整性:主键保证了实体完整性,一个表只有一个主键,但一个主键可有包含多个字段,主键字段不能为空 2

数据库经典语句(2)

1.复制表(只复制结构,源表名:a 新表名:b) 法一:select * into b from a where 1<>1 法二:select top 0 * into b from a 2.拷贝表(拷贝数据,源表名:a 目标表名:b) insert into b(a, b, c) select d,e,f from b; 3.跨数据库之间表的拷贝(具体数据使用绝对路径) insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条

算法竞赛入门经典 习题2-10 排列(permutation)

习题2-10 排列(permutation) 用1,2,3,-,9组成3个三位数 abc, def, 和ghi,每个数字恰好使用一次,要求 abc:def:ghi = 1:2:3.输出所有解.提示:不必太动脑筋. 解题思路: 首先abc最小值只能为123,最大值329,才符合题意. 此题重点判断1-9中每个数字都需出现,不能重复.解决方法:利用数组a[1],..,a[9]分别表示1,2...,9是否出现,出现记为1,否则记为0,只需判断a[1]+...+a[9] == 9,如果为真,则每个数字出