mysql常见sql题_SQL常见试题
下⽂SQL查询涉及到的数据库表有四张,分别为:学⽣表(student)、成绩表(score)、课程表(course)和教师表(teacher)⼀、简单查询
1. 查询姓“猴”的学⽣名单
SELECT * FROM student WHERE 姓名 LIKE '猴%';
2. 查询姓名中最后⼀个字是“猴“的学⽣名单
SELECT * FROM student WHERE 姓名 LIKE '%猴';
3. 查询姓名中带“猴”的学⽣名单
SELECT * FROM student WHERE 姓名 LIKE '%猴%';
4. 查询姓“孟”⽼师的个数
SELECT count(*) FROM teacher WHERE 教师姓名 LIKE '孟%';
⼆、汇总分析
1. 查询课程编号为“0002”的总成绩
SELECT sum(成绩) as 总成绩 FROM score where 课程号='0002';
2. 查询选了课程的学⽣⼈数
SELECT count(DISTINCT 学号) as 选课⼈数 FROM score;
3. 查询各科成绩最⾼和最低的分, 以如下的形式显⽰:课程号,最⾼分,最低分
SELECT 课程号,max(成绩) as 最⾼分,min(成绩) as 最低分
FROM score
GROUP BY 课程号;
4. 查询每门课程被选修的学⽣数
SELECT 课程号,count(学号) as 选修学⽣数
FROM score
GROUP BY 课程号;
5. 查询男⽣、⼥⽣⼈数
SELECT 性别,count(学号) as ⼈数
FROM student
GROUP BY 性别;
6. 查询平均成绩⼤于60分学⽣的学号和平均成绩
SELECT 学号,avg(成绩) as 平均成绩
FROM score
GROUP BY 学号
HAVING avg(成绩)>60;
7. 查询⾄少选修两门课程的学⽣学号
SELECT 学号,count(课程号) as 选修课程数
FROM score
GROUP BY 学号
HAVING count(课程号)>=2;
8. 查询同名同姓(相同姓名)学⽣名单并统计同名⼈数
SELECT 姓名,count(学号) as 同名⼈数
FROM student
GROUP BY 姓名
HAVING count(学号)>1;
9. 查询不及格的课程并按课程号从⼤到⼩排列
eclipse打不开py文件SELECT 课程号,成绩
for ya原唱完整版
FROM score
WHERE 成绩<60
ORDER BY 课程号 desc;
10. 查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
SELECT 课程号,avg(成绩) as 平均成绩
FROM score
GROUP BY 课程号
ORDER BY 平均成绩 asc,课程号 desc;
11. 检索课程编号为“0004”且分数⼩于60的学⽣学号,结果按按分数降序排列
SELECT 学号
FROM score
WHERE 课程号='0004'
AND 成绩<60
ORDER BY 成绩 desc;
12. 统计每门课程的学⽣选修⼈数(超过2⼈的课程才统计),要求输出课程号和选修⼈数,查询结果按⼈数降序排序,若⼈数相同,按课程号升序排序
SELECT 课程号,count(学号) as 选修⼈数
FROM score
GROUP BY 课程号
HAVING count(学号)>2
ORDER BY 选修⼈数 desc,课程号 asc;
13. 查询两门以上不及格课程的同学的学号,以及不及格课程及的平均成绩
SELECT 学号,avg(成绩) as 平均成绩
FROM score
WHERE 成绩<60
GROUP BY 学号expose sb to
HAVING count(课程号)>2;
三、复杂查询总结矿物质常量和微量元素
1. 查询所有课程成绩⼩于60分学⽣的学号、姓名
SELECT 学号,姓名
FROM student
WHERE 学号 in(
mysql面试题sqlSELECT 学号
FROM score
GROUP BY 学号
HAVING max(成绩)<60);
2. 查询没有学全所有课的学⽣的学号、姓名
SELECT 学号,姓名
FROM student
WHERE 学号 not in(
SELECT 学号
FROM score
GROUP BY 学号
HAVING count(课程号)=(SELECT count(*) FROM course)
);
3. 查询出只选修了两门课程的全部学⽣的学号和姓名
SELECT 学号,姓名
FROM student
WHERE 学号 in(
SELECT 学号
FROM score
GROUP BY 学号
HAVING count(课程号)=2);
4. 1990年出⽣的学⽣名单
这⾥要⽤到⽇期函数SELECT 学号,姓名
FROM student
WHERE year(出⽣⽇期)=1990;topN问题:分组取每组最⼤值、最⼩值,每组最⼤的N条(top N)记录。
5. 按课程号分组取成绩最⼤值所在⾏的数据
(知识点:关联⼦查询)
SELECT * FROM score as a
WHERE 成绩 = (SELECT max(成绩)
FROM score as b
WHERE a.课程号=b.课程号
GROUP BY 课程号);
6. 按课程号分组取成绩最⼩值所在⾏的数据
SELECT * FROM score as a
WHERE 成绩 = (SELECT min(成绩)
FROM score as b
WHERE a.课程号=b.课程号
GROUP BY 课程号);
7. 查询各科成绩前两名的记录
(知识点:union all)
(SELECT * FROM score
WHERE 课程号='0001'
ORDER BY 成绩 desc
limit 2)
UNION ALL
(SELECT * FROM score
WHERE 课程号='0002'
ORDER BY 成绩 desc
limit 2)
UNION ALL
(SELECT * FROM score
WHERE 课程号='0003'
ORDER BY 成绩 desc
limit 2);
四、多表查询
1) 下⾯是学⽣的名单,表名为“学⽣表”;近视学⽣的名单,表名为“近视学⽣表”。
1. 请问不是近视眼的学⽣都有谁?
SELECT a.学号,a.姓名
FROM 学⽣表 as a
left join 近视学⽣表 as b
on a.学号= b.学⽣学号
WHERE b.学⽣学号 is null;
2) 某⽹站包含两个表,顾客姓名表(表名Customers)和 购买记录表(表名Orders)
1. 出所有从不订购任何东西的顾客
SELECT a.ID,a.`Name`
FROM Customers as a
left join Orders as b
on a.ID= b.Customerid
WHERE b.CustomerId is null;
3) 下⾯SQL查询涉及到的数据库表有四张,分别为:学⽣表(student)、成绩表(score)、课程表(course)和教师表(teacher) 1. 查询所有学⽣的学号、姓名、选课数、总成绩
SELECT a.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩
FROM student as a
left join score as b
on a.学号= b.学号
GROUP BY a.学号;
2. 查询平均成绩⼤于85的所有学⽣的学号、姓名和平均成绩
SELECT a.学号,a.姓名,avg(b.成绩) as 平均成绩
FROM student as a
left join score as b
on a.学号= b.学号
GROUP BY a.学号
值数组词对吗HAVING avg(b.成绩)>85;
3. 查询学⽣的选课情况:学号,姓名,课程号,课程名称
SELECT a.学号,a.姓名,c.课程号,c.课程名称
FROM student as a
left join score as b
on a.学号= b.学号
left join course as c
on b.课程号=c.课程号;
4. 查询出每门课程的及格⼈数和不及格⼈数
SELECT 课程号,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论