mysql的案例和题目

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/czh500/article/details/85260335

mysql的案例和题目

用到如下几张表

直接po代码

#mysql案例和题目

#一、查询每个专业的学生人数
#
SELECT stu.`majorid`, COUNT(*) AS "人数" FROM 
student stu GROUP BY stu.`majorid`;

#最终效果
SELECT m.*, 
(
SELECT COUNT(*) FROM student stu 
WHERE m.`majorid` = stu.majorid
GROUP BY stu.`majorid`
) AS "人数"
FROM major m;

#
DESC student;
#二、查询参加考试的学生中,每个学生的平均分、最高分
SELECT * FROM result;
#
SELECT studentno, AVG(score), MAX(score) FROM 
result GROUP BY `studentno`;

#三、查询姓张的每个学生的最低分大于60的学号、姓名
SELECT studentno FROM student WHERE studentname LIKE '张%';
#
SELECT * FROM result WHERE studentno IN (
SELECT studentno FROM student WHERE studentname LIKE '张%');
#
SELECT MIN(score) AS min_sco, studentno FROM result WHERE studentno IN (
SELECT studentno FROM student WHERE studentname LIKE '张%')
GROUP BY studentno
HAVING min_sco > 60;
#最终效果
SELECT studentno, studentname FROM student WHERE studentno IN (
SELECT studentno FROM result WHERE studentno IN (
SELECT studentno FROM student WHERE studentname LIKE '张%')
GROUP BY studentno
HAVING MIN(score) > 60);
#

#四、查询生日在“1988-1-1”后的学生姓名、专业名称
SELECT * FROM student WHERE borndate > '1988-1-1';
#
SELECT studentname, majorname FROM student stu
INNER JOIN major m
ON stu.`majorid` = m.`majorid`
WHERE stu.`borndate` > '1988-1-1';
#或者用DATEDIFF()函数
SELECT studentname, majorname FROM student stu
INNER JOIN major m
ON stu.`majorid` = m.`majorid`
WHERE DATEDIFF(stu.`borndate`, '1988-1-1') > 0;


#五、查询每个专业的男生人数和女生人数分别是多少
SELECT majorid, sex, COUNT(*) AS "人数" FROM 
student GROUP BY majorid, sex;
#或者
SELECT stu.majorid,
(SELECT COUNT(*) FROM student WHERE sex = '男' AND student.`majorid` = stu.`majorid`) AS boy,
(SELECT COUNT(*) FROM student WHERE sex = '女' AND student.`majorid` = stu.`majorid`) AS girl
FROM student stu GROUP BY stu.majorid, boy, girl; 


#六、查询专业和张翠山一样的学生的最低分
SELECT MIN(score) FROM result WHERE studentno IN (
SELECT studentno FROM student WHERE majorid IN (
SELECT DISTINCT majorid FROM student WHERE studentname = '张翠山'));

#七、查询大于60分的学生的姓名、密码、专业名
#三表连接
SELECT stu.`studentname`, stu.`loginpwd`, m.`majorname` FROM student AS stu
INNER JOIN major AS m
ON stu.`majorid` = m.`majorid`
INNER JOIN result AS r
ON stu.`studentno` = r.`studentno`
WHERE r.`score` > 60;

#八、按邮箱位数分组,查询每组的学生个数
SELECT LENGTH(email) AS len_ema, email FROM student;
#
SELECT LENGTH(email) AS len_ema, COUNT(*) FROM student GROUP BY len_ema;

#九、查询学生名、专业名、分数
#三表连接
SELECT stu.`studentname`, r.`score`, m.`majorname` FROM student AS stu
INNER JOIN major AS m
ON stu.`majorid` = m.`majorid`
INNER JOIN result AS r
ON stu.`studentno` = r.`studentno`;
#有的人没有分数,加外连接就可以了
SELECT stu.`studentname`, r.`score`, m.`majorname` FROM student AS stu
INNER JOIN major AS m
ON stu.`majorid` = m.`majorid`
LEFT OUTER JOIN result AS r
ON stu.`studentno` = r.`studentno`;

#十、查询哪个专业没有学生,分别用左连接和右连接实现
#左外联接
SELECT * FROM major m LEFT OUTER JOIN student stu
ON m.`majorid` = stu.`majorid`
WHERE stu.`studentno` IS NULL;
#右外联接
SELECT * FROM student stu RIGHT OUTER JOIN major m
ON m.`majorid` = stu.`majorid`
WHERE stu.`studentno` IS NULL;

#十一、查询没有成绩的学生人数
SELECT COUNT(*) FROM student AS s
LEFT OUTER JOIN result AS r
ON s.`studentno` = r.`studentno`
WHERE r.`id` IS NULL;
#

猜你喜欢

转载自blog.csdn.net/czh500/article/details/85260335