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

sql作业

时间:2018-03-30 01:18:31      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:set   count   structure   pos   var   成绩   drop   recent   insert   

初始化

/*
Navicat MySQL Data Transfer

Source Server         : 本地测试
Source Server Version : 50639
Source Host           : localhost:3306
Source Database       : luffy

Target Server Type    : MYSQL
Target Server Version : 50639
File Encoding         : 65001

Date: 2018-03-24 00:22:13
*/

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(16) DEFAULT NULL,
  `grade_id` int(11) DEFAULT NULL,
  UNIQUE KEY `cid` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES (‘1‘, ‘一年一班‘, ‘1‘);
INSERT INTO `class` VALUES (‘2‘, ‘一年二班‘, ‘1‘);
INSERT INTO `class` VALUES (‘3‘, ‘二年二班‘, ‘2‘);
INSERT INTO `class` VALUES (‘4‘, ‘二年二班‘, ‘2‘);
INSERT INTO `class` VALUES (‘5‘, ‘三年一班‘, ‘3‘);
INSERT INTO `class` VALUES (‘6‘, ‘三年二班‘, ‘3‘);
INSERT INTO `class` VALUES (‘7‘, ‘三年三班‘, ‘3‘);
INSERT INTO `class` VALUES (‘8‘, ‘四年二班‘, ‘4‘);
INSERT INTO `class` VALUES (‘9‘, ‘五年二班‘, ‘5‘);
INSERT INTO `class` VALUES (‘10‘, ‘六年二班‘, ‘6‘);

-- ----------------------------
-- Table structure for `class_grade`
-- ----------------------------
DROP TABLE IF EXISTS `class_grade`;
CREATE TABLE `class_grade` (
  `gid` int(11) NOT NULL AUTO_INCREMENT,
  `gname` varchar(16) DEFAULT NULL,
  UNIQUE KEY `gid` (`gid`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of class_grade
-- ----------------------------
INSERT INTO `class_grade` VALUES (‘1‘, ‘一年级‘);
INSERT INTO `class_grade` VALUES (‘2‘, ‘二年级‘);
INSERT INTO `class_grade` VALUES (‘3‘, ‘三年级‘);
INSERT INTO `class_grade` VALUES (‘4‘, ‘四年级‘);
INSERT INTO `class_grade` VALUES (‘5‘, ‘五年级‘);
INSERT INTO `class_grade` VALUES (‘6‘, ‘六年级‘);

-- ----------------------------
-- Table structure for `course`
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(16) DEFAULT NULL,
  `teacher_id` int(11) DEFAULT NULL,
  UNIQUE KEY `cid` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (‘1‘, ‘生物‘, ‘1‘);
INSERT INTO `course` VALUES (‘2‘, ‘体育‘, ‘1‘);
INSERT INTO `course` VALUES (‘3‘, ‘物理‘, ‘2‘);
INSERT INTO `course` VALUES (‘4‘, ‘语文‘, ‘2‘);
INSERT INTO `course` VALUES (‘5‘, ‘数学‘, ‘3‘);
INSERT INTO `course` VALUES (‘6‘, ‘英语‘, ‘3‘);
INSERT INTO `course` VALUES (‘7‘, ‘化学‘, ‘2‘);

-- ----------------------------
-- Table structure for `score`
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `sid` int(11) DEFAULT NULL,
  `student_id` int(11) DEFAULT NULL,
  `course_id` int(11) DEFAULT NULL,
  `score` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (‘1‘, ‘1‘, ‘1‘, ‘60‘);
INSERT INTO `score` VALUES (‘2‘, ‘1‘, ‘2‘, ‘59‘);
INSERT INTO `score` VALUES (‘3‘, ‘2‘, ‘2‘, ‘99‘);
INSERT INTO `score` VALUES (‘4‘, ‘2‘, ‘3‘, ‘59‘);
INSERT INTO `score` VALUES (‘5‘, ‘4‘, ‘3‘, ‘87‘);
INSERT INTO `score` VALUES (‘6‘, ‘5‘, ‘5‘, ‘88‘);
INSERT INTO `score` VALUES (‘7‘, ‘6‘, ‘5‘, ‘45‘);
INSERT INTO `score` VALUES (‘8‘, ‘7‘, ‘4‘, ‘66‘);
INSERT INTO `score` VALUES (‘9‘, ‘8‘, ‘7‘, ‘55‘);
INSERT INTO `score` VALUES (‘10‘, ‘3‘, ‘6‘, ‘88‘);
INSERT INTO `score` VALUES (‘11‘, ‘3‘, ‘3‘, ‘99‘);
INSERT INTO `score` VALUES (‘12‘, ‘10‘, ‘4‘, ‘99‘);
INSERT INTO `score` VALUES (‘13‘, ‘1‘, ‘3‘, ‘88‘);

-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `sname` varchar(16) DEFAULT NULL,
  `gender` enum(‘男‘,‘女‘) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  UNIQUE KEY `sid` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (‘1‘, ‘乔丹1‘, ‘女‘, ‘1‘);
INSERT INTO `student` VALUES (‘2‘, ‘张云‘, ‘女‘, ‘1‘);
INSERT INTO `student` VALUES (‘3‘, ‘科比‘, ‘男‘, ‘2‘);
INSERT INTO `student` VALUES (‘4‘, ‘张飞‘, ‘男‘, ‘3‘);
INSERT INTO `student` VALUES (‘5‘, ‘路飞‘, ‘男‘, ‘3‘);
INSERT INTO `student` VALUES (‘6‘, ‘路飞‘, ‘男‘, ‘4‘);
INSERT INTO `student` VALUES (‘7‘, ‘海贼王‘, ‘男‘, ‘6‘);
INSERT INTO `student` VALUES (‘8‘, ‘熊大‘, ‘男‘, ‘6‘);
INSERT INTO `student` VALUES (‘9‘, ‘熊二‘, ‘男‘, ‘7‘);
INSERT INTO `student` VALUES (‘10‘, ‘熊三‘, ‘女‘, ‘8‘);
INSERT INTO `student` VALUES (‘11‘, ‘熊四‘, ‘女‘, ‘9‘);

-- ----------------------------
-- Table structure for `teach2cls`
-- ----------------------------
DROP TABLE IF EXISTS `teach2cls`;
CREATE TABLE `teach2cls` (
  `tcid` int(11) NOT NULL AUTO_INCREMENT,
  `tid` int(11) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
  UNIQUE KEY `tcid` (`tcid`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of teach2cls
-- ----------------------------
INSERT INTO `teach2cls` VALUES (‘1‘, ‘1‘, ‘1‘);
INSERT INTO `teach2cls` VALUES (‘2‘, ‘1‘, ‘2‘);
INSERT INTO `teach2cls` VALUES (‘3‘, ‘2‘, ‘1‘);
INSERT INTO `teach2cls` VALUES (‘4‘, ‘2‘, ‘3‘);
INSERT INTO `teach2cls` VALUES (‘5‘, ‘2‘, ‘3‘);
INSERT INTO `teach2cls` VALUES (‘6‘, ‘3‘, ‘4‘);
INSERT INTO `teach2cls` VALUES (‘7‘, ‘3‘, ‘5‘);
INSERT INTO `teach2cls` VALUES (‘8‘, ‘3‘, ‘6‘);
INSERT INTO `teach2cls` VALUES (‘9‘, ‘3‘, ‘7‘);
INSERT INTO `teach2cls` VALUES (‘10‘, ‘3‘, ‘2‘);

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

-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES (‘1‘, ‘张三‘);
INSERT INTO `teacher` VALUES (‘2‘, ‘李四‘);
INSERT INTO `teacher` VALUES (‘3‘, ‘王五‘);
INSERT INTO `teacher` VALUES (‘4‘, ‘李杰‘);

参考答案

2、查询学生总人数;

SELECT count(sid) FROM student;

3、查询“生物”课程和“物理”课程成绩都及格的学生id和姓名;
SELECT sid,sname FROM student WHERE sid
IN
(
    SELECT t.student_id FROM score 
    INNER JOIN
    (                                                                                                                               
    SELECT student_id FROM score WHERE score >= 60 
    AND 
        course_id=(SELECT cid FROM course WHERE cname=‘物理‘)
    ) AS t ON t.student_id=score.student_id
    WHERE score >= 60 
    AND 
        course_id=(SELECT cid FROM course WHERE cname=‘生物‘)
)

4、查询每个年级的班级数,取出班级数最多的前三个年级;
SELECT gname,t.num ‘班级数‘ FROM class_grade INNER JOIN
(
SELECT 
    grade_id, count(grade_id) as num
FROM 
    class 
GROUP BY 
    grade_id 
ORDER BY 
    count(grade_id) DESC LIMIT 3
) AS t ON t.grade_id=class_grade.gid;

5、查询平均成绩最高和最低的学生的id和姓名以及平均成绩;
SELECT * FROM
(SELECT sid,sname,t1.max FROM student 
INNER JOIN
    (SELECT student_id, avg(score) max FROM score GROUP BY student_id ORDER BY max DESC LIMIT 1) t1
ON t1.student_id=student.sid) a,

(SELECT sid,sname,t2.min FROM student 
INNER JOIN
    (SELECT student_id, avg(score) min FROM score GROUP BY student_id ORDER BY min LIMIT 1) t2
ON t2.student_id=student.sid) b
; 

6、查询每个年级的学生人数;

SELECT gname, t1.num FROM class_grade 
INNER JOIN
    ( 
    SELECT grade_id,count(t.sid) AS num FROM class 
    INNER JOIN 
        (SELECT class_id,sid FROM student) AS t 
    ON class.cid = t.class_id
    GROUP BY grade_id 
    ) AS t1 
ON class_grade.gid = t1.grade_id
;

7、查询每位学生的学号,姓名,选课数,平均成绩;
SELECT sid ‘学号‘,sname ‘姓名‘,t.avg_num ‘平均成绩‘,t.c_num ‘选课数‘ FROM student 
INNER JOIN
    (SELECT student_id, avg(score) avg_num,count(course_id) c_num 
    FROM
        score
    GROUP BY 
        student_id
    ) t ON student.sid=t.student_id
; 
8、查询学生编号为“2”的学生的姓名、该学生成绩最高的课程名、成绩最低的课程名及分数;
SELECT * FROM
(
SELECT cname ‘课程‘,t1.max ‘最高分‘ FROM course 
INNER JOIN
    (SELECT course_id, score max FROM score WHERE student_id=2 ORDER BY score DESC LIMIT 1) t1
On t1.course_id=course.cid
) a,
(
SELECT cname ‘课程‘,t2.min ‘最低分‘ FROM course 
INNER JOIN
    (SELECT course_id, score min FROM score WHERE student_id=2 ORDER BY score LIMIT 1) t2
On t2.course_id=course.cid
) b 
;


9、查询姓“李”的老师的个数和所带班级数;

SELECT t.t_num ‘个数‘,count(cid) ‘班级数‘ FROM teach2cls 
INNER JOIN 
    (SELECT tid, count(tid) t_num FROM teacher WHERE tname LIKE ‘李%‘) AS t
ON t.tid=teach2cls.tid

10、查询班级数小于5的年级id和年级名;

SELECT gid,gname FROM class_grade WHERE gid IN 
(SELECT grade_id FROM class GROUP BY grade_id HAVING count(cid) < 5);

11、查询班级信息,包括班级id、班级名称、年级、年级级别(12为低年级,34为中年级,56为高年级),示例结果如下;

班级id 班级名称 年级 年级级别
1 一年一班 一年级 低

SELECT t.cid ‘班级id‘,t.caption ‘班级名称‘,class_grade.gname ‘年级‘  FROM class_grade 
INNER JOIN
    (SELECT cid,caption,grade_id FROM class ORDER BY grade_id) t
    ON t.grade_id = class_grade.gid
;

12、查询学过“张三”老师2门课以上的同学的学号、姓名;

SELECT sid,sname FROM student INNER JOIN 
(
SELECT student_id FROM score WHERE course_id 
IN
    (
    SELECT cid FROM course 
    WHERE 
        teacher_id=(SELECT tid FROM teacher WHERE tname LIKE ‘zhangsan‘)
    )

GROUP BY student_id HAVING count(course_id) >= 2
) AS t ON student.sid = t.student_id

13、查询教授课程超过2门的老师的id和姓名;
SELECT tid,tname FROM teacher WHERE tid IN 
(SELECT tid FROM teach2cls GROUP BY tid HAVING count(cid)>2);

14、查询学过编号“1”课程和编号“2”课程的同学的学号、姓名;
SELECT sid,sname FROM student WHERE sid IN
(
    SELECT student_id FROM score 
    WHERE course_id IN (1,2)
    GROUP BY 
        student_id  
);
15、查询没有带过高年级的老师id和姓名;
SELECT tid,tname FROM teacher 
WHERE 
    tid NOT IN
    (
    SELECT tid FROM teach2cls 
    WHERE 
        cid IN (SELECT cid FROM class WHERE grade_id=5 OR grade_id=6)
    );

16、查询学过“张三”老师所教的所有课的同学的学号、姓名;
SELECT sid,sname FROM student 
WHERE 
sid IN (
        SELECT student_id FROM score 
        WHERE 
            course_id IN
            (
            SELECT cid FROM teach2cls 
            WHERE 
                tid IN (SELECT tid FROM teacher WHERE   tname = ‘张三‘)
            )
);

17、查询带过超过2个班级的老师的id和姓名;
SELECT tid,tname FROM teacher 
WHERE 
    tid IN (SELECT tid FROM teach2cls GROUP BY tid HAVING count(cid)>2);

18、查询课程编号“2”的成绩比课程编号“1”课程低的所有同学的学号、姓名;
SELECT score FROM score WHERE course_id=1
SELECT score FROM score WHERE course_id=2
SELECT student_id FROM score GROUP BY student_id
WHERE 
    (SELECT score FROM score WHERE course_id=2) <
    (SELECT score FROM score WHERE course_id=1)

19、查询所带班级数最多的老师id和姓名;
SELECT tid,tname FROM teacher 
WHERE 
tid=(SELECT tid FROM teach2cls GROUP BY tid ORDER BY count(cid) DESC LIMIT 1);

20、查询有课程成绩小于60分的同学的学号、姓名;
SELECT sid,sname FROM student 
WHERE sid IN (SELECT student_id FROM score WHERE score<60 GROUP BY student_id);

21、查询没有学全所有课的同学的学号、姓名;
SELECT sid,sname FROM student WHERE sid  NOT IN 
(
SELECT student_id FROM score 
GROUP BY 
    student_id 
HAVING 
    count(course_id)=(SELECT count(cid) FROM course)
);

22、查询至少有一门课与学号为“1”的同学所学相同的同学的学号和姓名;
SELECT sid,sname FROM student WHERE sid IN
(
SELECT student_id FROM score 
WHERE 
    course_id 
    IN 
        (SELECT course_id FROM score WHERE student_id=1) 
    AND
        student_id != 1
);

23、查询至少学过学号为“1”同学所选课程中任意一门课的其他同学学号和姓名;
SELECT sid,sname FROM student WHERE sid IN
(
SELECT student_id 
FROM 
    score 
WHERE course_id IN 
    (SELECT course_id FROM score WHERE student_id=1)
);

24、查询和“2”号同学学习的课程完全相同的其他同学的学号和姓名;

SELECT student_id,COUNT(course_id) FROM score 
WHERE 
    course_id 
IN 
    (SELECT course_id FROM score WHERE student_id=2)

GROUP BY 
    student_id 
HAVING 
    count(course_id)=
    (SELECT count(course_id) FROM score WHERE student_id=2)
;

25、删除学习“张三”老师课的score表记录;
DELETE FROM score WHERE course_id IN
(
    SELECT cid FROM teach2cls 
    WHERE tid=(SELECT tid FROM teacher WHERE tname=‘张三‘)
);

26、向score表中插入一些记录,这些记录要求符合以下条件:①没有上过编号“2”课程的同学学号;②插入“2”号课程的平均成绩;

INSERT INTO 
    score 
SELECT 
    sid,student_id,
    course_id,
    (SELECT avg(score) FROM score WHERE course_id=2) 
    FROM score
WHERE 
    student_id 
NOT IN 
    (SELECT student_id FROM score WHERE course_id=2);

27、按平均成绩从低到高显示所有学生的“语文”、“数学”、“英语”三门的课程成绩,
按如下形式显示: 学生ID,语文,数学,英语,有效课程数,有效平均分;

SELECT
        sc.student_id ‘学生ID‘,
        (SELECT score FROM score LEFT JOIN course
            ON 
                score.course_id = course.cid 
            WHERE 
            course.cname = ‘语文‘ AND score.student_id=sc.student_id) AS ‘语文‘,
        (SELECT score FROM score LEFT JOIN course 
            ON 
                score.course_id = course.cid 
            WHERE course.cname = ‘数学‘ AND score.student_id=sc.student_id) AS ‘数学‘,

        (SELECT score FROM score LEFT JOIN course
            ON score.course_id = course.cid 
            WHERE 
                course.cname = ‘英语‘ AND score.student_id=sc.student_id) AS ‘英语‘,

        count(sc.course_id) ‘有效课程‘,

        avg(sc.score) ‘平均成绩‘

FROM score AS sc GROUP BY student_id;
 
28、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;
SELECT course_id ‘课程ID‘, max(score) ‘最高分‘,min(score) ‘最低分‘ 
FROM 
    score GROUP BY course_id;

29、按各科平均成绩从低到高和及格率的百分数从高到低顺序;

SELECT score.course_id, 
       avg(score.score) ‘平均成绩‘,
       t.num/count(score.student_id) precent
FROM 
    score 
INNER JOIN 
    (SELECT course_id, count(student_id)*100 num FROM score WHERE score>=60 GROUP BY course_id) t
ON t.course_id=score.course_id
GROUP BY course_id ORDER BY precent DESC;

30、课程平均分从高到低显示(显示任课老师);
SELECT tname,t2.course_id,t2.avg_num FROM teacher INNER JOIN
(
SELECT tid,t.course_id,t.avg_num FROM teach2cls INNER JOIN
(
SELECT course_id, avg(score) avg_num 
FROM 
    score GROUP BY course_id 
) t ON teach2cls.cid=t.course_id
) t2 ON teacher.tid=t2.tid
ORDER BY t2.avg_num DESC;

31、查询各科成绩前三名的记录(不考虑成绩并列情况)
SELECT score.sid,score.course_id,t.first_num ‘第一‘,score.score ‘第二‘,t.third_num ‘第三‘
FROM score LEFT JOIN
(
SELECT
     sid,
    (SELECT score FROM score s1 WHERE s1.course_id=s2.course_id ORDER BY score DESC LIMIT 1) first_num,
    (SELECT IFNULL(score,0) FROM score s1 WHERE s1.course_id=s2.course_id ORDER BY score DESC LIMIT 3,1) third_num
FROM  
    score s2
) AS t ON t.sid=score.sid
WHERE score.score>=t.third_num AND score.score <= t.first_num;
;

32、查询每门课程被选修的学生数;

SELECT course_id, count(student_id) FROM score GROUP BY course_id;

33、查询选修了2门以上课程的全部学生的学号和姓名;
SELECT sid,sname FROM student WHERE sid IN
(SELECT student_id 
FROM 
    score 
GROUP BY 
    student_id HAVING count(course_id)>=2)
;

34、查询男生、女生的人数,按倒序排列;
SELECT * FROM
(SELECT count(sid) ‘男‘ FROM student WHERE gender=‘男‘) as a,
(SELECT count(sid) ‘女‘ FROM student WHERE gender=‘女‘) as b
;

35、查询姓“张”的学生名单;
SELECT * FROM student WHERE sname LIKE ‘张%‘;

36、查询同名同姓学生名单,并统计同名人数;

SELECT sname, count(sid) FROM student GROUP BY sname HAVING count(sid)!=1

37、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;
SELECT course_id, avg(score) avg_num FROM score GROUP BY course_id ORDER BY avg_num ASC,course_id DASC;

38、查询课程名称为“数学”,且分数低于60的学生姓名和分数;

SELECT sname ‘姓名‘, t.score ‘分数‘ FROM student INNER JOIN
(
SELECT student_id,score FROM score 
WHERE 
    course_id=(SELECT cid FROM course WHERE cname=‘数学‘)
AND score<60
) t ON student.sid=t.student_id;

39、查询课程编号为“3”且课程成绩在80分以上的学生的学号和姓名;
SELECT sid,sname FROM student WHERE sid IN
(SELECT student_id FROM score WHERE course_id=3 AND score>=80);

40、求选修了课程的学生人数
SELECT count(DISTINCT student_id) FROM score;

41、查询选修“王五”老师所授课程的学生中,成绩最高和最低的学生姓名及其成绩;

SELECT * FROM 

(SELECT student.sname,a.max FROM student 
INNER JOIN 
    (
    SELECT student_id,max(score) max FROM score 
    WHERE 
        course_id IN (SELECT cid FROM teach2cls 
        WHERE 
            tid=(SELECT tid FROM teacher WHERE tname=‘王五‘))
    ) a ON student.sid=a.student_id
) AS t1,
(
SELECT student.sname,b.min FROM student 
INNER JOIN 
    (
    SELECT student_id,min(score) min FROM score 
    WHERE 
        course_id IN (SELECT cid FROM teach2cls 
        WHERE 
            tid=(SELECT tid FROM teacher WHERE tname=‘王五‘))
    ) b ON student.sid=b.student_id
) AS t2;

42、查询各个课程及相应的选修人数;
SELECT cname ‘课程‘,t.num ‘选修人数‘ FROM course INNER JOIN

(SELECT course_id, count(student_id) num FROM score GROUP BY course_id) t
ON t.course_id=course.cid
;

43、查询不同课程但成绩相同的学生的学号、课程号、学生成绩;
SELECT s1.student_id,s1.course_id,s1.score,s2.student_id,s2.course_id,s2.score 
FROM 
    score AS s1,score AS s2 
WHERE
s1.score=s2.score AND s1.course_id != s2.course_id;

44、查询每门课程成绩最好的前两名学生id和姓名;

SELECT student.sid,student.sname,t4.course_id,t4.first_num,t4.second_num FROM student
INNER JOIN
    (
    SELECT score.student_id,t3.course_id,t3.first_num, t3.second_num FROM score 
    INNER JOIN
    (
    SELECT t1.course_id,t1.first_num,t2.second_num 
    FROM
        (SELECT course_id, max(score) AS first_num FROM score GROUP BY course_id) AS t1
    INNER JOIN 
        (
        SELECT 
            score.course_id, max(score) AS second_num 
        FROM 
            score 
        INNER JOIN 
            (SELECT course_id, max(score) AS first_num FROM score GROUP BY course_id ) as t
        ON 
            score.course_id=t.course_id 
        WHERE
            score.score < t.first_num
        GROUP BY
            course_id
        ) AS t2 ON t1.course_id = t2.course_id
    ) AS t3 ON t3.course_id=score.course_id 
    WHERE 
        score.score >= t3.second_num
    AND
        score.score<= t3.first_num
) t4 
ON t4.student_id=student.sid;

45、检索至少选修两门课程的学生学号;
SELECT student_id FROM score GROUP BY student_id HAVING count(course_id)>=2;

46、查询没有学生选修的课程的课程号和课程名;
SELECT cid,cname FROM course WHERE cid NOT IN
(SELECT course_id FROM score);

47、查询没带过任何班级的老师id和姓名;
SELECT tid,tname FROM teacher WHERE tid NOT IN 
(SELECT tid FROM teach2cls);

48、查询有两门以上课程超过80分的学生id及其平均成绩

SELECT student_id,avg(score) FROM score WHERE student_id IN 
(SELECT student_id FROM score WHERE score>80 GROUP BY student_id HAVING count(course_id)>=2);

49、检索“3”课程分数小于60,按分数降序排列的同学学号;
SELECT student_id FROM score WHERE course_id=3 AND score<60 ORDER BY score DESC;

50、删除编号为“2”的同学的“1”课程的成绩;
DELETE FROM score WHERE student_id=2 AND course_id=1;

51、查询同时选修了物理课和生物课的学生id和姓名;
SELECT sid,sname FROM student WHERE sid IN 
(
    SELECT student_id FROM score
    INNER JOIN
    (
        SELECT student_id FROM score 
        WHERE 
            course_id=(SELECT cid FROM course WHERE cname=‘物理‘)
    ) t ON t.student_id=score.student_id
    WHERE 
        course_id=( SELECT student_id FROM score WHERE 
                    course_id=(SELECT cid FROM course WHERE cname=‘生物‘))
);

sql作业

标签:set   count   structure   pos   var   成绩   drop   recent   insert   

原文地址:https://www.cnblogs.com/Jason-lin/p/8673418.html

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