数据库

一. 3个表关联查询学生和课程信息(鸿亚面试)

学生表:

CREATE TABLE `STUDENT` (
  `SNO` int(255) DEFAULT NULL COMMENT '学号',
  `SNAME` varchar(255) DEFAULT NULL,
  `SAGE` int(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `STUDENT` VALUES ('1', '张三', '18');
INSERT INTO `STUDENT` VALUES ('2', '李四', '18');
INSERT INTO `STUDENT` VALUES ('3', '王五', '25');
INSERT INTO `STUDENT` VALUES ('4', '马六', '25');
INSERT INTO `STUDENT` VALUES ('5', '真七', '29');

课程表:

CREATE TABLE `COURSE` (
  `CNAME` varchar(255) DEFAULT NULL,
  `CNO` int(255) DEFAULT NULL COMMENT '课程编号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `COURSE` VALUES ('数学', '1');
INSERT INTO `COURSE` VALUES ('语文', '2');
INSERT INTO `COURSE` VALUES ('英语', '3');

成绩表:

CREATE TABLE `SC` (
  `SNO` int(11) NOT NULL COMMENT '学号',
  `CNO` int(11) DEFAULT NULL COMMENT '课程编号',
  `SCORE` int(11) DEFAULT NULL COMMENT '成绩'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `SC` VALUES ('1', '1', '85');
INSERT INTO `SC` VALUES ('1', '2', '80');
INSERT INTO `SC` VALUES ('2', '1', '76');
INSERT INTO `SC` VALUES ('2', '2', '76');

问题:

1)查询“001”课程比“002”课程成绩高的所有学生的学号; --这个是徐总答案,有点看不懂
select sno from sc t1 where score > (select score from sc t2 where t1.sno = t2.sno and t2.cno = '002') and t1.cno = '001'


1)查询“001”课程比“002”课程成绩高的所有学生的学号; 
SELECT s1.sno FROM sc s1 JOIN sc s2 ON s1.sno=s2.sno WHERE s1.cno='001' AND s2.cno='002' AND s1.score>s2.score


2) 查询平均成绩大于60分的同学的学号和平均成绩
SELECT sno,avg(score) s FROM sc GROUP BY sno HAVING  s>60


3) 查询所有同学的学号、姓名、选课数、总成绩;
SELECT stu.sno,stu.sname,count(sc.sno),sum(sc.score) FROM stu LEFT JOIN sc ON stu.sno=sc.sno GROUP BY stu.sno


4) 查询没有学全所有课程的学生姓名,学号;
SELECT stu.sno,stu.sname,count(sc.cno) c FROM stu LEFT JOIN sc ON stu.sno=sc.sno GROUP BY stu.sno HAVING c<(SELECT COUNT(cname) FROM course cc)

 

posted @ 2019-10-09 15:19  唐胜伟  阅读(70)  评论(0编辑  收藏  举报