mysql查询课程1比课程2低的_MySQL练习题

本文提供了一系列的MySQL查询练习题,包括查询同时学过课程1和课程2的学生,李平老师所教所有课程的学生,课程1分数低于课程2的所有同学,成绩低于60分的同学,未学全所有课程的学生,以及与001号同学课程相同的学生。通过这些练习,深入理解SQL语句的使用,如比较运算符、JOIN、GROUP BY、HAVING、IN和DISTINCT等。
摘要由CSDN通过智能技术生成

f391ee84cef763ee21bf6094ac8cbe88.png

7、查询 既然学过课程1也学过课程2的同学

SELECT student_id FROM score WHERE course_id=1 or course_id=2 GROUP BY student_id HAVING COUNT(course_id)>1;

知识点:course_id=1,COUNT(course_id)>1,SQL语句支持比较、数学运算符;(,=,+,-)

1、course_id=1

2、WHERE course_id=1 or course_id=2 or和and的区别,如果此处使用会报错,因为没有一行的course_id既=1也=2;

3、HAVING COUNT(course_id)>1,对GROUP BY分组之后的结果,进行二次筛选必须使用 having;

8、查询李平老师所教的所有课程的同学的学号和姓名;

SELECT * FROM score WHERE course_id in

(SELECT cid FROM course LEFT JOIN teacher ON course.teacher_id=teacher.tid WHERE teacher.tname="李平老师")

GROUP BY student_id HAVING COUNT(course_id)=(SELECT COUNT(cid) FROM course LEFT JOIN teacher ON course.teacher_id=teacher.tid WHERE teacher.tname="李平老师");

知识点:

in()后面可以包含SQL

思路:

1、先找出李平老师任课的课程ID

2、在成绩表找出 学习这些课程ID的同学ID

(注意:假设李平老师教了2门课,有些同学可能只学了1门)

9、查询 001课程 比002 课程 低的所有同学;

SELECT A.sid FROM

(SELECT * FROM score WHERE course_id=1) as A

INNER JOIN

(SELECT * FROM score WHERE course_id=2) AS B

on A.student_id=B.student_id

WHERE A.num < B.num;

思路:

1、找到所有001课程的成绩,做成临时表;

2、找到所有002课程的成绩,做成临时表;

3、要想对比只能连表成一行,再where;

知识点:

临时表:保存临时的查询结果;

表内容连接:INNER JOIN 两有外键关系的表连接,没有NONE数据;

条件查询:WHERE 条件可以同时选择两列数据相对比,得出行;

条件查询的结果:对比的是列,查询到的结果是行数据;

SELECT * FROM student WHERE 列1=1 and 列2=1;(求列1=1和列2=2的行)

10、查询课程成绩小于 60分的同学的学号和姓名;

方法1:group BY 分组 去重

SELECT student_id FROM score WHERE num <60 GROUP BY student_id;

方法2:ditinct (去重)

SELECT DISTINCT student_id FROM score WHERE num <60;

知识点:

DISTINCT 列: 去重功能

思路:

该题比较简单 where查询 分数小于60的行,根据studen_id去重即可;

11、查询没有学全所有课程的同学的学号和姓名;

知识点:

取反运算符: !=

coun(1):可以查看表中一共总行数

思路:

1、查找到所以课程的总数

2、在成绩表,查找到 课程总数 不等于 总课程数量的同学;

3、在学生表 in 查询

12、查询 课程和 001号同学所学的课程相同的同学学号和姓名;

SELECT * FROM score WHERE student_id in

查询报名课程和001号同学相同的同学,由于这些同学还有可能报名了其他课程,所以要查询 数量是否相等

(SELECT student_id FROM score WHERE student_id !=1 GROUP BY student_id HAVING COUNT(course_id)=(SELECT COUNT(1) FROM score WHERE student_id=1))

AND

继续查询 这些同学的课程是否一致,

course_id in (SELECT course_id FROM score WHERE student_id=1)

因为 in(1,2,4)是模糊匹配, 报名1,2,3的同学也会被匹配到,所以需要继续 GROUP BY查看数量是否一致?

GROUP BY student_id HAVING COUNT(student_id)=(SELECT COUNT(1) FROM score WHERE student_id=1);

知识点:

1、SQL表查询本质就是查询到一个表,再在此基础上查询;

2、where可以放在 GROUP BY 前面使用;

3、in (1,2,3)是做得模糊匹配;

例如SELECT * FROM score WHERE course_id in (2,3)只要报名课程 1,2,3的同学都会被匹配到,不管有没有报名其他课程;

查询和001同学,报名课程相等的同学

SELECT student_id FROM score WHERE student_id !=1 GROUP BY student_id HAVING COUNT(course_id)=3;

思路

-- SELECT course_id FROM score WHERE student_id=1 ;

SELECT COUNT(1) FROM score WHERE student_id=1 阿根选课 1,2,4,课程总数3;

1、先找到001号同学所学习的全部课程和课程总数量

2、在成绩表 查看和该同学,报名课程数量 相等 并且 课程相同;

3、再进一步检查 这类同学所学的课程 是否和 001同学的一致;

原文:http://www.cnblogs.com/sss4/p/6985871.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值