您的位置:首页 > 职场人生

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: