mysql练习题_MySQL入门必做练习题50题(二) 基础题

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第1张图片

上一篇,我们创建了数据库,表,并插入了数据,没有看过的同学,先去【文章最后】 跳转去看上一篇内容。本篇,练习相对基础的题,虽然是基础,但也是工作中最常用的,一定要多动手跟着练习。

先回顾一下:

对于一个学校信息管理系统中的数据库,有如下4张表:

学生表:student(学号,学生姓名,出生年月,性别)

成绩表:score(学号,课程号,成绩)

课程表:course(课程号,课程名称,教师号)

教师表:teacher(教师号,教师姓名)

这四张表的部分截图数据及关系如下图

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第2张图片

请仔细查看上图,理解表与表之间的联系。以便于后续更好的练习。

(二)基础题

1.查询名字中含有「龙」字的学生信息

SELECT *
FROM student
WHERE sname LIKE '%龙%';

e9fe0d1f6ab96b544d7981efb8df92f0.png

2.查询「数」姓的所有老师的信息

-- 很简单。用个like就行,不会like的,去百度一下就可以。
SELECT * FROM teacher
WHERE Tname LIKE '数%';

a72b3881982b036b0e4610da0fb4fbd5.png

3.查询男生、女生人数

SELECT Ssex,COUNT(ssex) as 人数 
FROM student
GROUP BY Ssex; 

2fda1357db10e1b4a059e31145595ecc.png

4.查询2000年后出生的学生名单

SELECT sname
FROM student
WHERE sage LIKE '20%';

e17f24b0be062703ef8035538c8ee2d5.png

5.查询同名同性学生名单,并统计同名人数

-- 思路:sname分组即可,本数据无同名
SELECT sname,COUNT(sname) AS 同名人数
FROM student
GROUP BY sname
HAVING 同名人数>1;

d2853d0e76bf4bda2469756726e3b57e.png

6.查询每门课程选修人数

-- 思路:分组后,用个count即可
SELECT Cid,COUNT(sid) AS num
FROM  sc 
GROUP BY cid;

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第3张图片

7.查询每门课程的平均成绩

SELECT cid,AVG(score) '平均成绩'
FROM sc
GROUP BY cid 

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第4张图片

8.查询每门成绩最好的前3名

-- 思路:三个课程的乘积表,排名取前三,然后合并
(SELECT * FROM sc WHERE Cid='s1'  ORDER BY score DESC LIMIT 3)
UNION
(SELECT * FROM sc WHERE Cid='s2'  ORDER BY score DESC LIMIT 3)
UNION
(SELECT * FROM sc WHERE Cid='s3'  ORDER BY score DESC LIMIT 3) 

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第5张图片

9.查询选修过任一课程的学生的学生信息

-- 思路:没选修课程的同学不在成绩表中,所以直接联结即可。
-- 这种等值联结,相当于内联结,只有两表都有的记录才会被留下。
-- 如果不理解,可以网上查一下,深刻理解一下联结部分的内容。
SELECT  DISTINCT student.*
FROM student,sc
WHERE student.Sid=sc.Sid

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第6张图片

10.查询至少选修两门课程的学生学号

SELECT 
  sid,COUNT(cid) 选修数 
FROM
  sc 
GROUP BY sid 
HAVING 选修数 >= 2 ; 

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第7张图片

11.查询出只选修两门课程的学生学号和姓名

SELECT sc.sid,sname
FROM sc INNER JOIN student
ON sc.sid = student.sid
GROUP BY sc.sid
HAVING COUNT(sc.cid) = 2; 

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第8张图片

12.查询选修了全部课程的学生信息

-- 思路:分组求出每个学生选课数,加上选课数等于全部课程数的条件。
-- 后用in把剩下的Sid带到student表即可。
SELECT * FROM student 
WHERE Sid in (
SELECT Sid FROM sc 
GROUP BY Sid 
HAVING COUNT(*)=(SELECT COUNT(cid) FROM course)) 

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第9张图片

13.查询没有选修全部课程的同学的信息。

-- 思路:先查询选了所有课的学生,再反向选择这些人之外的学生.否则会漏掉什么都没选的。
SELECT * FROM student 
WHERE Sid  NOT IN(
SELECT Sid FROM sc 
GROUP BY Sid 
HAVING COUNT(*)=(SELECT COUNT(cid) FROM course));

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第10张图片

14.查询各学生的年龄,只按年份来算

-- 思路:用时间函数,看一眼就明白了,注意记忆。
SELECT sname,YEAR(NOW()) - YEAR(sage) AS 年龄
FROM student ;

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第11张图片

15.查询所有学生的姓名、课程名称和分数

SELECT sname,sc.cid,score 
FROM sc INNER JOIN student 
ON sc.sid = student.sid ;

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第12张图片

16.查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数

-- 思路:上一题的基础上,加上一个where条件判断
SELECT sname,sc.cid,score 
FROM
  sc INNER JOIN student AS s 
    ON sc.sid = s.sid 
AND score > 70 ; 

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第13张图片

17.查询有不及格课程的学生的姓名、课程名称和分数

-- 思路:同上一题
SELECT sname,sc.cid,score 
FROM
  sc INNER JOIN student AS s 
    ON sc.sid = s.sid 
AND score < 60 ; 

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第14张图片

18.查询课程编号为 s1 且课程成绩在 80 分以上的学生的学号和姓名

-- 思路:同上一题,多加个条件
SELECT sc.sid,sname
FROM sc INNER JOIN student AS s
ON sc.sid = s.sid
WHERE sc.cid = 's1' AND score >= 80; 

mysql练习题_MySQL入门必做练习题50题(二) 基础题_第15张图片

19.查询本周过生日的学生

-- 思路:时间函数week(),返回日期的所在周数,一年大概52周,试一下就知道了
SELECT sname
FROM student
WHERE WEEK(sage) = WEEK(NOW());

9006c7c813aa050c9515c0a0c93865e3.png

20.查询下周过生日的学生

SELECT 
  sname 
FROM
  student 
WHERE WEEK(sage) = WEEK(NOW()) + 1 ; 

c49c0ed51b86a17ca072958728e9128b.png

21.查询本月过生日的学生

SELECT 
  sname,
  sage 
FROM
  student 
WHERE MONTH(sage) = MONTH(NOW());

61ed2a634f9016f5bd403fc1698ca53d.png

22.查询下月过生日的学生

SELECT 
  sname,
  sage 
FROM
  student 
WHERE MONTH(sage) = MONTH(NOW()) + 1 ; 

d8b447cab62f2d294de9ede0d4de62c2.png

我将练习题分为3部分:(可以收藏本文作为目录,然后逐篇练习)

MySQL最新练习50题(一) 创建库

MySQL最新练习50题(二) 基础题

MySQL最新练习50题(三) 进阶题

收藏本文,防止丢失,有什么问题,可以评论讨论,多多点赞关注哈。

你可能感兴趣的:(mysql练习题)