SQL面试题 三(单表、多表查询)
2012-04-21 11:53
916 查看
一、给定一张学生成绩表tb_grade:学号,姓名,科目号,科目名,分数。([b]如下表)[/b]
(select * from tb_grade order by Sno,Cno;)
+------+-------+-----+-------+-------+
| Sno | Sname | Cno | Cname | score |
+------+-------+-----+-------+-------+
| 1001 | 李菲 | 1 | 语文 | 86 |
| 1001 | 李菲 | 2 | 数学 | 56 |
| 1001 | 李菲 | 3 | 物理 | 48 |
| 1001 | 李菲 | 4 | 化学 | 90 |
| 1001 | 李菲 | 5 | 英语 | 57 |
| 1002 | 王琪 | 1 | 语文 | 90 |
| 1002 | 王琪 | 2 | 数学 | 68 |
| 1002 | 王琪 | 3 | 物理 | 87 |
| 1002 | 王琪 | 4 | 化学 | 68 |
| 1002 | 王琪 | 5 | 英语 | 45 |
| 1003 | 杨阳 | 1 | 语文 | 86 |
| 1003 | 杨阳 | 2 | 数学 | 56 |
| 1003 | 杨阳 | 3 | 物理 | 48 |
| 1003 | 杨阳 | 4 | 化学 | 90 |
| 1003 | 杨阳 | 5 | 英语 | 52 |
| 1004 | 和树 | 1 | 语文 | 82 |
| 1004 | 和树 | 2 | 数学 | 56 |
| 1004 | 和树 | 3 | 物理 | 67 |
| 1004 | 和树 | 4 | 化学 | 30 |
| 1004 | 和树 | 5 | 英语 | 68 |
+------+-------+-----+-------+-------+
1、查询不及格科目数大于等于2的学生学号和不及格科目数量:
MySQL> select Sno,count(score) as '不及格科目数' from tb_grade where score<60 group by Sno having count(score)>=2;
+------+--------------+
| Sno | 不及格科目数 |
+------+--------------+
| 1001 | 3 |
| 1003 | 3 |
| 1004 | 2 |
+------+--------------+
2、查询不及格科目数大于等于2的学生学号和学生姓名:
MySQL> select Sno,Sname from tb_grade where score<60 group by Sno having count(score)>=2;
+------+-------+
| Sno | Sname |
+------+-------+
| 1001 | 李菲 |
| 1003 | 杨阳 |
| 1004 | 和树 |
+------+-------+
3、查询不及格科目数大于等于2的学生学号、学生姓名、科目号、科目名称和分数,并按学号降序、科目号升序排序:
MySQL> select * from tb_grade where score<60 and Sno in( select Sno from
tb_grade where score<60 group by Sno having count(score)>=2 ) order by Sno desc,Cno asc;
+------+-------+-----+-------+-------+
| Sno | Sname | Cno | Cname | score |
+------+-------+-----+-------+-------+
| 1004 | 和树 | 2 | 数学 | 56 |
| 1004 | 和树 | 4 | 化学 | 30 |
| 1003 | 杨阳 | 2 | 数学 | 56 |
| 1003 | 杨阳 | 3 | 物理 | 48 |
| 1003 | 杨阳 | 5 | 英语 | 52 |
| 1001 | 李菲 | 2 | 数学 | 56 |
| 1001 | 李菲 | 3 | 物理 | 48 |
| 1001 | 李菲 | 5 | 英语 | 57 |
+------+-------+-----+-------+-------+
二、有三张表:class、student、score
班级表 class:
+-------+---------+---------+
| classID | className |
+---------+-----------+
| 1 | 一班 |
| 2 | 二班 |
| 3 | 三班 |
+---------+-----------+
学生表 student:
+-------+---------+---------+
| stuID | classID | stuName |
+-------+---------+---------+
| 1001 | 1 | 张三 |
| 1002 | 1 | 李丽 |
| 1003 | 1 | 钱封 |
| 1004 | 2 | 杨国 |
| 1005 | 2 | 小样 |
| 1006 | 2 | 区天 |
| 1007 | 3 | 李三宅 |
| 1008 | 3 | 黄武 |
| 1009 | 3 | 赵六 |
+-------+---------+---------+
分数表 score:
+----------+-------+--------+-------+
| courseID | stuID | course | score |
+----------+-------+--------+-------+
| 2 | 1001 | 数学 | 73 |
| 3 | 1001 | 英语 | 79 |
| 1 | 1001 | 语文 | 81 |
| 3 | 1002 | 英语 | 87 |
| 2 | 1002 | 数学 | 83 |
| 1 | 1002 | 语文 | 79 |
| 1 | 1003 | 语文 | 65 |
| 3 | 1003 | 英语 | 65 |
| 2 | 1003 | 数学 | 97 |
| 1 | 1004 | 语文 | 78 |
| 3 | 1004 | 英语 | 78 |
| 2 | 1004 | 数学 | 86 |
| 1 | 1005 | 语文 | 67 |
| 3 | 1005 | 英语 | 88 |
| 2 | 1005 | 数学 | 89 |
| 2 | 1006 | 数学 | 90 |
| 3 | 1006 | 英语 | 92 |
| 1 | 1006 | 语文 | 98 |
| 1 | 1007 | 语文 | 85 |
| 2 | 1007 | 数学 | 78 |
| 3 | 1007 | 英语 | 72 |
| 1 | 1008 | 语文 | 78 |
| 3 | 1008 | 英语 | 77 |
| 2 | 1008 | 数学 | 85 |
| 3 | 1009 | 英语 | 94 |
| 2 | 1009 | 数学 | 91 |
| 1 | 1009 | 语文 | 68 |
+----------+-------+--------+-------+
1、查询各班各科分数最高的学生学号,姓名,班级名称,科目名称,分数:
MySQL>
select stu.stuID,stu.stuName,c.classID,c.className, sc.score from class c,student stu,
score sc where c.classID=stu.classID and stu.stuID=sc.stuID order by c.classID,stu.stuID;
(select * from tb_grade order by Sno,Cno;)
+------+-------+-----+-------+-------+
| Sno | Sname | Cno | Cname | score |
+------+-------+-----+-------+-------+
| 1001 | 李菲 | 1 | 语文 | 86 |
| 1001 | 李菲 | 2 | 数学 | 56 |
| 1001 | 李菲 | 3 | 物理 | 48 |
| 1001 | 李菲 | 4 | 化学 | 90 |
| 1001 | 李菲 | 5 | 英语 | 57 |
| 1002 | 王琪 | 1 | 语文 | 90 |
| 1002 | 王琪 | 2 | 数学 | 68 |
| 1002 | 王琪 | 3 | 物理 | 87 |
| 1002 | 王琪 | 4 | 化学 | 68 |
| 1002 | 王琪 | 5 | 英语 | 45 |
| 1003 | 杨阳 | 1 | 语文 | 86 |
| 1003 | 杨阳 | 2 | 数学 | 56 |
| 1003 | 杨阳 | 3 | 物理 | 48 |
| 1003 | 杨阳 | 4 | 化学 | 90 |
| 1003 | 杨阳 | 5 | 英语 | 52 |
| 1004 | 和树 | 1 | 语文 | 82 |
| 1004 | 和树 | 2 | 数学 | 56 |
| 1004 | 和树 | 3 | 物理 | 67 |
| 1004 | 和树 | 4 | 化学 | 30 |
| 1004 | 和树 | 5 | 英语 | 68 |
+------+-------+-----+-------+-------+
1、查询不及格科目数大于等于2的学生学号和不及格科目数量:
MySQL> select Sno,count(score) as '不及格科目数' from tb_grade where score<60 group by Sno having count(score)>=2;
+------+--------------+
| Sno | 不及格科目数 |
+------+--------------+
| 1001 | 3 |
| 1003 | 3 |
| 1004 | 2 |
+------+--------------+
2、查询不及格科目数大于等于2的学生学号和学生姓名:
MySQL> select Sno,Sname from tb_grade where score<60 group by Sno having count(score)>=2;
+------+-------+
| Sno | Sname |
+------+-------+
| 1001 | 李菲 |
| 1003 | 杨阳 |
| 1004 | 和树 |
+------+-------+
3、查询不及格科目数大于等于2的学生学号、学生姓名、科目号、科目名称和分数,并按学号降序、科目号升序排序:
MySQL> select * from tb_grade where score<60 and Sno in( select Sno from
tb_grade where score<60 group by Sno having count(score)>=2 ) order by Sno desc,Cno asc;
+------+-------+-----+-------+-------+
| Sno | Sname | Cno | Cname | score |
+------+-------+-----+-------+-------+
| 1004 | 和树 | 2 | 数学 | 56 |
| 1004 | 和树 | 4 | 化学 | 30 |
| 1003 | 杨阳 | 2 | 数学 | 56 |
| 1003 | 杨阳 | 3 | 物理 | 48 |
| 1003 | 杨阳 | 5 | 英语 | 52 |
| 1001 | 李菲 | 2 | 数学 | 56 |
| 1001 | 李菲 | 3 | 物理 | 48 |
| 1001 | 李菲 | 5 | 英语 | 57 |
+------+-------+-----+-------+-------+
二、有三张表:class、student、score
班级表 class:
+-------+---------+---------+
| classID | className |
+---------+-----------+
| 1 | 一班 |
| 2 | 二班 |
| 3 | 三班 |
+---------+-----------+
学生表 student:
+-------+---------+---------+
| stuID | classID | stuName |
+-------+---------+---------+
| 1001 | 1 | 张三 |
| 1002 | 1 | 李丽 |
| 1003 | 1 | 钱封 |
| 1004 | 2 | 杨国 |
| 1005 | 2 | 小样 |
| 1006 | 2 | 区天 |
| 1007 | 3 | 李三宅 |
| 1008 | 3 | 黄武 |
| 1009 | 3 | 赵六 |
+-------+---------+---------+
分数表 score:
+----------+-------+--------+-------+
| courseID | stuID | course | score |
+----------+-------+--------+-------+
| 2 | 1001 | 数学 | 73 |
| 3 | 1001 | 英语 | 79 |
| 1 | 1001 | 语文 | 81 |
| 3 | 1002 | 英语 | 87 |
| 2 | 1002 | 数学 | 83 |
| 1 | 1002 | 语文 | 79 |
| 1 | 1003 | 语文 | 65 |
| 3 | 1003 | 英语 | 65 |
| 2 | 1003 | 数学 | 97 |
| 1 | 1004 | 语文 | 78 |
| 3 | 1004 | 英语 | 78 |
| 2 | 1004 | 数学 | 86 |
| 1 | 1005 | 语文 | 67 |
| 3 | 1005 | 英语 | 88 |
| 2 | 1005 | 数学 | 89 |
| 2 | 1006 | 数学 | 90 |
| 3 | 1006 | 英语 | 92 |
| 1 | 1006 | 语文 | 98 |
| 1 | 1007 | 语文 | 85 |
| 2 | 1007 | 数学 | 78 |
| 3 | 1007 | 英语 | 72 |
| 1 | 1008 | 语文 | 78 |
| 3 | 1008 | 英语 | 77 |
| 2 | 1008 | 数学 | 85 |
| 3 | 1009 | 英语 | 94 |
| 2 | 1009 | 数学 | 91 |
| 1 | 1009 | 语文 | 68 |
+----------+-------+--------+-------+
1、查询各班各科分数最高的学生学号,姓名,班级名称,科目名称,分数:
MySQL>
select stu.stuID,stu.stuName,c.classID,c.className, sc.score from class c,student stu,
score sc where c.classID=stu.classID and stu.stuID=sc.stuID order by c.classID,stu.stuID;
相关文章推荐
- sql 相关的查询面试题收集及答案
- 一道简单的SQL面试题:查询成绩排名第10到第20的学生
- 由一个博问学到的SQL查询方法 (一道多对多关系查询的面试题)
- sql查询之左连接,右连接,内连接以及全外连接的使用(测试常见面试题欧)
- SQL Server ->> T-SQL查询面试题之实例版
- 一道面试题:请写sql查询出,成绩小于60的同学的姓名和平均分,并按平均分排序
- sql语句面试题(查询按照申请日期倒序排列的前10个记录)
- 面试题-复杂的sql查询-单表的
- SQL面试题之一有关连接、查询的题
- SQL查询面试题
- 面试题:查询所有上级SQL
- sql 多表查询 统计无记录缺考--- 经典面试题
- T-SQL 面试题(查询)
- 面试题:用一条sql语句查询出“每门”课程都大于80分的学生姓名
- sql语句面试题(查询按照申请日期倒序排列的前10个记录)
- sql 查询面试题
- SQL查询面试题
- SQL面试题——查询课程
- 一道SQL表关联查询的面试题
- SQL 面试题 二 (有关排序、模糊查询)