mysql语句练习50题

-- 建表
-- 学生表
CREATE TABLE `Student`(
    `s_id` VARCHAR(20),
    `s_name` VARCHAR(20) NOT NULL DEFAULT '',
    `s_birth` VARCHAR(20) NOT NULL DEFAULT '',
    `s_sex` VARCHAR(10) NOT NULL DEFAULT '',
    PRIMARY KEY(`s_id`)
);
-- 课程表
CREATE TABLE `Course`(
    `c_id`  VARCHAR(20),
    `c_name` VARCHAR(20) NOT NULL DEFAULT '',
    `t_id` VARCHAR(20) NOT NULL,
    PRIMARY KEY(`c_id`)
);
-- 教师表
CREATE TABLE `Teacher`(
    `t_id` VARCHAR(20),
    `t_name` VARCHAR(20) NOT NULL DEFAULT '',
    PRIMARY KEY(`t_id`)
);
-- 成绩表
CREATE TABLE `Score`(
    `s_id` VARCHAR(20),
    `c_id`  VARCHAR(20),
    `s_score` INT(3),
    PRIMARY KEY(`s_id`,`c_id`)
);
-- 插入学生表测试数据
INSERT INTO Student VALUES('01' , '赵雷' , '1990-01-01' , '男');
INSERT INTO Student VALUES('02' , '钱电' , '1990-12-21' , '男');
INSERT INTO Student VALUES('03' , '孙风' , '1990-05-20' , '男');
INSERT INTO Student VALUES('04' , '李云' , '1990-08-06' , '男');
INSERT INTO Student VALUES('05' , '周梅' , '1991-12-01' , '女');
INSERT INTO Student VALUES('06' , '吴兰' , '1992-03-01' , '女');
INSERT INTO Student VALUES('07' , '郑竹' , '1989-07-01' , '女');
INSERT INTO Student VALUES('08' , '王菊' , '1990-01-20' , '女');
-- 课程表测试数据
INSERT INTO Course VALUES('01' , '语文' , '02');
INSERT INTO Course VALUES('02' , '数学' , '01');
INSERT INTO Course VALUES('03' , '英语' , '03');

-- 教师表测试数据
INSERT INTO Teacher VALUES('01' , '张三');
INSERT INTO Teacher VALUES('02' , '李四');
INSERT INTO Teacher VALUES('03' , '王五');

-- 成绩表测试数据
INSERT INTO Score VALUES('01' , '01' , 80);
INSERT INTO Score VALUES('01' , '02' , 90);
INSERT INTO Score VALUES('01' , '03' , 99);
INSERT INTO Score VALUES('02' , '01' , 70);
INSERT INTO Score VALUES('02' , '02' , 60);
INSERT INTO Score VALUES('02' , '03' , 80);
INSERT INTO Score VALUES('03' , '01' , 80);
INSERT INTO Score VALUES('03' , '02' , 80);
INSERT INTO Score VALUES('03' , '03' , 80);
INSERT INTO Score VALUES('04' , '01' , 50);
INSERT INTO Score VALUES('04' , '02' , 30);
INSERT INTO Score VALUES('04' , '03' , 20);
INSERT INTO Score VALUES('05' , '01' , 76);
INSERT INTO Score VALUES('05' , '02' , 87);
INSERT INTO Score VALUES('06' , '01' , 31);
INSERT INTO Score VALUES('06' , '03' , 34);
INSERT INTO Score VALUES('07' , '02' , 89);
INSERT INTO Score VALUES('07' , '03' , 98);


-- 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
SELECT s.* ,b.`s_score` AS 01_score ,c.`s_score` AS 02_score 
FROM Student s
JOIN Score b ON s.`s_id` = b.`s_id` AND b.`c_id` = '01'
LEFT JOIN Score c ON  s.`s_id` = c.`s_id`  AND c.`c_id` = '02'  
WHERE b.`s_score` > c.`s_score`; 

SELECT a.*, b.`s_score` AS 01score ,c.`s_score` AS 02score 
FROM Student a, Score b, Score c 
WHERE a.`s_id` = b.`s_id` 
    AND a.`s_id` = c.`s_id`
    AND b.`c_id` = '01'
    AND c.`c_id` = '02'
    AND b.`s_score` > c.`s_score`;
    


-- 2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数

-- 3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
SELECT s.`s_id`,s.`s_name`,ROUND(AVG(sc.`s_score`),2) AS avg_score 
FROM Student s
JOIN Score sc ON s.`s_id` = sc.`s_id`
GROUP BY s.`s_id` 
HAVING avg_score >= 60;


-- 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩
        -- (包括有成绩的和无成绩的)
SELECT S.s_id, S.s_name, ROUND(AVG(IFNULL(sc.s_score,0)),2) AS avg_score
FROM
Student S
LEFT JOIN Score sc ON S.s_id = sc.s_id
GROUP BY s_id
HAVING avg_score < 60;
        
-- 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
SELECT s.`s_id`,s.`s_name`,COUNT(sc.`c_id`) AS sum_course,SUM(sc.`s_score`) AS sum_score 
FROM Student s
LEFT JOIN Score sc ON s.`s_id` = sc.`s_id`
GROUP BY s.`s_id`;

-- 6、查询"李"姓老师的数量
SELECT COUNT(t_id) 
FROM Teacher  t
WHERE t.`t_name` LIKE '李%';

-- 7、查询学过"张三"老师授课的同学的信息
SELECT s.* 
FROM Student s
WHERE s.`s_id` IN (
    SELECT sc.`s_id` FROM Teacher t,Course c ,Score sc
    WHERE t.`t_name` = '张三' AND t.`t_id` = c.`t_id` AND sc.`c_id` = c.`c_id`
);


-- 8、查询没学过"张三"老师授课的同学的信息 

-- 9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
SELECT s.* 
FROM Student s, Score sc1, Score sc2
WHERE s.`s_id` = sc1.`s_id` AND s.`s_id` = sc2.`s_id` AND sc1.`c_id` = 01 AND sc2.`c_id` = 02;

-- 10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息 
SELECT s.* 
FROM Student s
WHERE s.`s_id` IN (SELECT sc.`s_id` FROM Score sc WHERE sc.`c_id` = 01) AND s.`s_id ` NOT IN(SELECT sc.`s_id` FROM Score sc WHERE sc.`c_id` = 02);

-- 11、查询没有学全所有课程的同学的信息   
SELECT s.* 
FROM student s 
LEFT JOIN Score sc ON sc.s_id=s.s_id
GROUP BY s.s_id 
HAVING COUNT(sc.c_id)<(SELECT COUNT(*) FROM course);

SELECT *
FROM student
WHERE s_id NOT IN(
    SELECT s_id 
    FROM score  
    GROUP BY s_id 
    HAVING COUNT(*) =(SELECT COUNT(c_id)  FROM course)
    );


-- 12、查询至少有一门课与学号为"01"的同学所学相同的同学的信息
SELECT s.* 
FROM Student s ,Score sc
WHERE s.`s_id` = sc.`s_id` AND sc.`c_id` IN (
    SELECT sc.`c_id` FROM Score sc  WHERE sc.`s_id` = 01
)
GROUP BY s.`s_id`;

SELECT * 
FROM student 
WHERE s_id IN(
    SELECT DISTINCT sc.s_id FROM score sc WHERE sc.c_id IN(SELECT sc.c_id FROM score sc WHERE sc.s_id='01')
);

-- 13、查询和"01"号的同学学习的课程完全相同的其他同学的信息 
SELECT s.*
FROM Student s, Score sc
WHERE s.`s_id` =  sc.`s_id` AND sc.`c_id` IN (
    SELECT sc.`c_id` FROM Score sc WHERE sc.`s_id` = 01
) AND COUNT(sc.*) = (SELECT COUNT(*) FROM Score sc WHERE sc.`s_id` = 01);

-- 14、查询没学过"张三"老师讲授的任一门课程的学生姓名 
SELECT s.`s_name`
FROM Student s
WHERE s.`s_id` NOT IN (
    SELECT sc.`s_id` FROM Score sc ,Course c ,Teacher t WHERE t.`t_name` = '张三' AND t.`t_id` = c.`t_id` AND c.`c_id` = sc.`c_id`
);

SELECT s.s_name 
FROM student s 
WHERE s.s_id NOT IN (
    SELECT s_id FROM score WHERE c_id = 
                (SELECT c_id FROM course WHERE t_id =(
                    SELECT t_id FROM teacher WHERE t_name = '张三')));

-- 15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩  
SELECT s.`s_id`,s.`s_name`, AVG(sc.`s_score`)  
FROM Student s, Score sc 
WHERE s.`s_id` = sc.`s_id` AND s.`s_id` IN(
    SELECT sc.`s_id` FROM Score sc WHERE sc.`s_score` < 60 GROUP BY sc.`s_id` HAVING COUNT(1) >= 2
)
GROUP BY s.s_id,s.s_name;

SELECT s.s_id,s.s_name,AVG(sc.s_score)
FROM student s 
LEFT JOIN score sc ON s.s_id = sc.s_id
WHERE s.s_id IN(
    SELECT s_id FROM score WHERE s_score<60 GROUP BY  s_id HAVING COUNT(1)>=2)
GROUP BY s.s_id,s.s_name


-- 16、检索"01"课程分数小于60,按分数降序排列的学生信息
SELECT s.*, sc.`c_id`, sc.`s_score`
FROM Student s ,Score sc
WHERE s.`s_id` = sc.`s_id` AND sc.`c_id` = '01' AND sc.`s_score` < 60 
ORDER BY sc.`s_score` DESC;

-- 17、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
SELECT s.`s_id`,s.`s_name`,SUM(sc.`s_score`) AS sum_score, AVG(sc.`s_score`) AS avg_score
FROM Student s, Score sc
WHERE s.`s_id` = sc.`s_id`
GROUP BY sc.`s_id`
ORDER BY avg_score DESC;

SELECT a.s_id,  (SELECT s_score FROM score WHERE s_id=a.s_id AND c_id='01') AS 语文,
        (SELECT s_score FROM score WHERE s_id=a.s_id AND c_id='02') AS 数学,
        (SELECT s_score FROM score WHERE s_id=a.s_id AND c_id='03') AS 英语,
        ROUND(AVG(s_score),2) AS 平均分 
FROM score a  
GROUP BY a.s_id 
ORDER BY 平均分 DESC;


-- 18.查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
-- 及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
SELECT sc.c_id,c.c_name,MAX(s_score),MIN(s_score),ROUND(AVG(s_score),2),
    ROUND(100*(SUM(CASE WHEN sc.s_score>=60 THEN 1 ELSE 0 END)/SUM(CASE WHEN sc.s_score THEN 1 ELSE 0 END)),2) AS 及格率,
    ROUND(100*(SUM(CASE WHEN sc.s_score>=70 AND sc.s_score<=80 THEN 1 ELSE 0 END)/SUM(CASE WHEN sc.s_score THEN 1 ELSE 0 END)),2) AS 中等率,
    ROUND(100*(SUM(CASE WHEN sc.s_score>=80 AND sc.s_score<=90 THEN 1 ELSE 0 END)/SUM(CASE WHEN sc.s_score THEN 1 ELSE 0 END)),2) AS 优良率,
    ROUND(100*(SUM(CASE WHEN sc.s_score>=90 THEN 1 ELSE 0 END)/SUM(CASE WHEN sc.s_score THEN 1 ELSE 0 END)),2) AS 优秀率
    FROM score sc LEFT JOIN course c ON sc.c_id = c.c_id GROUP BY sc.c_id,c.c_name;

-- 19、按各科成绩进行排序,并显示排名    
SELECT a.s_id,a.c_id,
        @i:=@i +1 AS i保留排名,
        @k:=(CASE WHEN @score=a.s_score THEN @k ELSE @i END) AS rank不保留排名,
        @score:=a.s_score AS score
    FROM (
        SELECT s_id,c_id,s_score FROM score GROUP BY s_id,c_id,s_score ORDER BY s_score DESC
)a,(SELECT @k:=0,@i:=0,@score:=0)s

-- 20、查询学生的总成绩并进行排名       
SELECT a.s_id,
    @i:=@i+1 AS i,
    @k:=(CASE WHEN @score=a.sum_score THEN @k ELSE @i END) AS rank,
    @score:=a.sum_score AS score
FROM (SELECT s_id,SUM(s_score) AS sum_score FROM score GROUP BY s_id ORDER BY sum_score DESC)a,
    (SELECT @k:=0,@i:=0,@score:=0)s

-- 21、查询不同老师所教不同课程平均分从高到低显示
SELECT c.c_id,t.t_id,t.t_name ,AVG(sc.s_score) AS avg_score
FROM Score sc ,Teacher t, Course c
WHERE t.t_id = c.t_id AND c.c_id = sc.c_id
GROUP BY c.c_id,t.t_id,t.t_name
ORDER BY avg_score DESC; 

SELECT c.t_id,t.t_name,c.c_id,ROUND(AVG(s_score),2) AS avg_score 
FROM course c
LEFT JOIN score sc ON c.c_id=sc.c_id 
LEFT JOIN teacher t ON c.t_id=t.t_id
GROUP BY c.c_id,c.t_id,t.t_name 
ORDER BY avg_score DESC;

-- 22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩   
SELECT d.*,c.排名,c.s_score,c.c_id FROM (
                SELECT a.s_id,a.s_score,a.c_id,@i:=@i+1 AS 排名 FROM score a,(SELECT @i:=0)s WHERE a.c_id='01'  
                                ORDER BY a.s_score DESC  
            )c
            LEFT JOIN student d ON c.s_id=d.s_id
            WHERE 排名 BETWEEN 2 AND 3
            UNION
            SELECT d.*,c.排名,c.s_score,c.c_id FROM (
                SELECT a.s_id,a.s_score,a.c_id,@j:=@j+1 AS 排名 FROM score a,(SELECT @j:=0)s WHERE a.c_id='02'  
                                ORDER BY a.s_score DESC
            )c
            LEFT JOIN student d ON c.s_id=d.s_id
            WHERE 排名 BETWEEN 2 AND 3
            UNION
            SELECT d.*,c.排名,c.s_score,c.c_id FROM (
                SELECT a.s_id,a.s_score,a.c_id,@k:=@k+1 AS 排名 FROM score a,(SELECT @k:=0)s WHERE a.c_id='03' 
                                ORDER BY a.s_score DESC
            )c
            LEFT JOIN student d ON c.s_id=d.s_id
            WHERE 排名 BETWEEN 2 AND 3;


-- 23、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比
SELECT DISTINCT f.c_name,a.c_id,b.`85-100`,b.百分比,c.`70-85`,c.百分比,d.`60-70`,d.百分比,e.`0-60`,e.百分比 FROM score a
                LEFT JOIN (SELECT c_id,SUM(CASE WHEN s_score >85 AND s_score <=100 THEN 1 ELSE 0 END) AS `85-100`,
                                            ROUND(100*(SUM(CASE WHEN s_score >85 AND s_score <=100 THEN 1 ELSE 0 END)/COUNT(*)),2) AS 百分比
                                FROM score GROUP BY c_id)b ON a.c_id=b.c_id
                LEFT JOIN (SELECT c_id,SUM(CASE WHEN s_score >70 AND s_score <=85 THEN 1 ELSE 0 END) AS `70-85`,
                                            ROUND(100*(SUM(CASE WHEN s_score >70 AND s_score <=85 THEN 1 ELSE 0 END)/COUNT(*)),2) AS 百分比
                                FROM score GROUP BY c_id)c ON a.c_id=c.c_id
                LEFT JOIN (SELECT c_id,SUM(CASE WHEN s_score >60 AND s_score <=70 THEN 1 ELSE 0 END) AS `60-70`,
                                            ROUND(100*(SUM(CASE WHEN s_score >60 AND s_score <=70 THEN 1 ELSE 0 END)/COUNT(*)),2) AS 百分比
                                FROM score GROUP BY c_id)d ON a.c_id=d.c_id
                LEFT JOIN (SELECT c_id,SUM(CASE WHEN s_score >=0 AND s_score <=60 THEN 1 ELSE 0 END) AS `0-60`,
                                            ROUND(100*(SUM(CASE WHEN s_score >=0 AND s_score <=60 THEN 1 ELSE 0 END)/COUNT(*)),2) AS 百分比
                                FROM score GROUP BY c_id)e ON a.c_id=e.c_id
                LEFT JOIN course f ON a.c_id = f.c_id;

-- 24、查询学生平均成绩及其名次
SELECT a.s_id,
    @i:=@i+1 AS '不保留空缺排名',
    @k:=(CASE WHEN @avg_score=a.avg_s THEN @k ELSE @i END) AS '保留空缺排名',
    @avg_score:=avg_s AS '平均分'
FROM (SELECT s_id,ROUND(AVG(s_score),2) AS avg_s FROM score GROUP BY s_id ORDER BY avg_s DESC)a,(SELECT @avg_score:=0,@i:=0,@k:=0)b;


-- 25、查询各科成绩前三名的记录                
            -- 1.选出b表比a表成绩大的所有组
            -- 2.选出比当前id成绩大的 小于三个的
SELECT a.s_id,a.c_id,a.s_score 
FROM score a 
LEFT JOIN score b ON a.c_id = b.c_id AND a.s_score<b.s_score
GROUP BY a.s_id,a.c_id,a.s_score 
HAVING COUNT(b.s_id)<3
ORDER BY a.c_id,a.s_score DESC;

-- 26、查询每门课程被选修的学生数 
SELECT c_id, COUNT(s_id)
FROM Score sc 
GROUP BY c_id;

-- 27、查询出只有两门课程的全部学生的学号和姓名  
SELECT s.`s_id`,s.`s_name`
FROM Student s
WHERE s.`s_id` IN(
    SELECT sc.`s_id` FROM Score sc GROUP BY sc.`s_id` HAVING COUNT(*) = 2
);
                
-- 28、查询男生、女生人数
SELECT s.`s_sex`,COUNT(*) AS '人数'
FROM student s
GROUP BY s.`s_sex`;

-- 29、查询名字中含有"风"字的学生信息
SELECT *
FROM Student s
WHERE s.`s_name` LIKE '%风%';

-- 30、查询同名同性学生名单,并统计同名人数 
SELECT a.s_name,a.s_sex,COUNT(*) 
FROM student a  JOIN student b ON a.s_id !=b.s_id AND a.s_name = b.s_name AND a.s_sex = b.s_sex
GROUP BY a.s_name,a.s_sex;

-- 31、查询1990年出生的学生名单
SELECT s.`s_name`
FROM Student s
WHERE s.`s_birth` BETWEEN '1990-01-01' AND '1990-12-31'
GROUP BY s.`s_id`;

SELECT s_name
FROM Student 
WHERE s_birth LIKE '1990%';

-- 32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 
SELECT sc.`c_id`,ROUND(AVG(sc.`s_score`),2) AS avg_score
FROM Score sc
GROUP BY sc.`c_id`
ORDER BY avg_score DESC, sc.`c_id`;

-- 33、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩
SELECT s.`s_id`,s.`s_name`, ROUND(AVG(sc.`s_score`),2) AS avg_score
FROM Student s,Score sc
WHERE s.`s_id` = sc.`s_id`
GROUP BY s.`s_id`
HAVING avg_score >= 85;
 
SELECT sc.s_id,s.s_name,ROUND(AVG(sc.s_score),2) AS avg_score 
FROM score sc
LEFT JOIN student s ON sc.s_id=s.s_id 
GROUP BY s_id 
HAVING avg_score>=85;

-- 34、查询课程名称为"数学",且分数低于60的学生姓名和分数 
SELECT s.`s_name`, sc.`s_score`
FROM Student s,Score sc, Course c
WHERE c.`c_name` = '数学' AND sc.`s_score` < 60 AND s.`s_id` = sc.`s_id`;

SELECT s.s_name,sc.s_score 
FROM score sc 
JOIN student s ON s.s_id=sc.s_id 
WHERE sc.c_id=(
    SELECT c_id FROM course WHERE c_name ='数学') AND sc.s_score<60;

-- 35、查询所有学生的课程及分数情况;  
SELECT s.s_id,s.s_name,
    SUM(CASE c.c_name WHEN '语文' THEN sc.s_score ELSE 0 END) AS '语文',
    SUM(CASE c.c_name WHEN '数学' THEN sc.s_score ELSE 0 END) AS '数学',
    SUM(CASE c.c_name WHEN '英语' THEN sc.s_score ELSE 0 END) AS '英语',
    SUM(sc.s_score) AS  '总分'
FROM student s 
LEFT JOIN score sc ON s.s_id = sc.s_id 
LEFT JOIN course c ON sc.c_id = c.c_id 
GROUP BY s.s_id,s.s_name;

 -- 36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;
 SELECT s.`s_name`, c.`c_name`,sc.`s_score`
 FROM Score sc
 LEFT JOIN Student s ON sc.`s_id` = s.`s_id`
 LEFT JOIN Course c ON c.`c_id` = sc.`c_id`
 WHERE sc.`s_score` > 70;
 
 -- 37、查询不及格的课程
 SELECT sc.`s_id`,sc.`c_id`,c.`c_name`,sc.`s_score`
 FROM Score sc, Course c
 WHERE sc.`s_score` < 60 AND c.`c_id` = sc.`c_id`;
 
SELECT sc.s_id,sc.c_id,c.c_name,sc.s_score 
FROM score sc 
LEFT JOIN course c ON sc.c_id = c.c_id
WHERE sc.s_score<60 ;
 
 -- 38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名;
SELECT sc.s_id,s.s_name 
FROM score sc 
LEFT JOIN student s ON sc.s_id = b.s_id
WHERE sc.c_id = '01' AND sc.s_score>=80; 
 
 -- 39、求每门课程的学生人数 
 SELECT sc.`c_id`, COUNT(sc.`s_id`)
 FROM Score sc
 GROUP BY sc.`c_id`;
 

-- 40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩
SELECT s.*,MAX(sc.`s_score`)
FROM Course c,Score sc ,Student s,Teacher t
WHERE t.`t_name` = '张三' AND t.`t_id` = c.`t_id` AND c.`c_id` = sc.`c_id` AND sc.`s_id` = s.`s_id`;

SELECT s.*,sc.s_score,sc.c_id,c.c_name 
FROM student s
LEFT JOIN score sc ON s.s_id = sc.s_id
LEFT JOIN course c ON sc.c_id=c.c_id
WHERE sc.c_id =(SELECT c_id FROM course c,teacher d WHERE c.t_id=d.t_id AND d.t_name='张三')
        AND sc.s_score IN (SELECT MAX(s_score) FROM score WHERE c_id='02');

-- 41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩 

SELECT DISTINCT b.s_id,b.c_id,b.s_score 
FROM score a,score b 
WHERE a.c_id != b.c_id AND a.s_score = b.s_score;

-- 42、查询每门功成绩最好的前两名          
SELECT a.s_id,a.c_id,a.s_score 
FROM score a
WHERE (SELECT COUNT(1) FROM score b WHERE b.c_id=a.c_id AND b.s_score>=a.s_score) <=2 
ORDER BY a.c_id;


-- 43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 
SELECT  sc.`c_id`, COUNT(*) AS total
FROM Score sc 
GROUP BY sc.`c_id`
HAVING total > 5
ORDER BY total DESC, sc.`c_id`;

-- 44、检索至少选修两门课程的学生学号 
SELECT sc.`s_id`,COUNT(*) AS sel
FROM Score sc
GROUP BY sc.`s_id` 
HAVING COUNT(*) >=2 ;

-- 45、查询选修了全部课程的学生信息
SELECT s.*
FROM Student s
WHERE s.`s_id` IN (
    SELECT sc.`s_id` FROM Score sc GROUP BY sc.`s_id` HAVING COUNT(*) = (SELECT COUNT(*) FROM Course)
);


-- 46、查询各学生的年龄
    -- 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
SELECT s_birth,(DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(s_birth,'%Y') - 
    (CASE WHEN DATE_FORMAT(NOW(),'%m%d')>DATE_FORMAT(s_birth,'%m%d') THEN 0 ELSE 1 END)) AS age
FROM student;

-- 47、查询本周过生日的学生
SELECT * FROM student WHERE WEEK(DATE_FORMAT(NOW(),'%Y%m%d'))=WEEK(s_birth);

-- 48、查询下周过生日的学生
SELECT * FROM student WHERE WEEK(DATE_FORMAT(NOW(),'%Y%m%d'))+1 =WEEK(s_birth);

-- 49、查询本月过生日的学生
SELECT * FROM student WHERE MONTH(DATE_FORMAT(NOW(),'%Y%m%d')) =MONTH(s_birth);

-- 50、查询下月过生日的学生
SELECT * FROM student WHERE MONTH(DATE_FORMAT(NOW(),'%Y%m%d'))+1 =MONTH(s_birth);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容