ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一个颇有意思的SQL语句

一个颇有意思的SQL语句

原创 Linux操作系统 作者:lawzjf 时间:2006-05-04 00:00:00 0 删除 编辑

前几天,一个朋友在QQ上问了一个SQL语句的写法:

已知三个表:

学生表(学号,姓名),课程表(课程号,课程名),选课表(学号,课程号,成绩)

要求查询选课最多的学生的姓名、课程名、成绩。

一直没时间(心情)考虑,五一放假,有了闲暇时间,今天早晨琢磨了一下。


首先创建三个测试表:

--学生表

SQL> create table stu
2 (
3 stuNo number primary key,
4 stuName varchar2(12)
5 )
6 /

表已创建。

--课程表

SQL> create table course
2 (
3 courseNo number primary key,
4 courseName varchar2(20)
5 )
6 /

表已创建。

--选课表

SQL> create table sel
2 (
3 stuNo number references stu(stuNo),
4 courseNo number references course(courseNo),
5 grade number,
6 primary key(stuNo,courseNo)
7 )
8 /

表已创建。

再添加测试数据:


SQL> insert into stu values(1001,'John');

已创建 1 行。

SQL> insert into stu values(1002,'Mike');

已创建 1 行。

SQL> insert into stu values(1003,'Tom');

已创建 1 行。

SQL> insert into stu values(1004,'Smith');

已创建 1 行。

SQL> insert into course values(200601,'English');

已创建 1 行。

SQL> insert into course values(200602,'Maths');

已创建 1 行。

SQL> insert into course values(200603,'Computer');

已创建 1 行。

SQL> insert into course values(200604,'Game');

已创建 1 行。

SQL> insert into sel values(1001,'200601',60);

已创建 1 行。

SQL> insert into sel values(1002,'200601',70);

已创建 1 行。

SQL> insert into sel values(1002,'200602',80);

已创建 1 行。

SQL> insert into sel values(1002,'200603',90);

已创建 1 行。

SQL> insert into sel values(1003,'200601',90);

已创建 1 行。

SQL> insert into sel values(1003,'200602',50);

已创建 1 行。

SQL> insert into sel values(1004,'200604',55);

已创建 1 行。

SQL> commit;

提交完成。

下面是这个问题的解决方法:


SQL> select stu.stuName,course.courseName,sel.grade
2 from stu,course,sel
3 where sel.stuNo=stu.stuNo
4 and sel.courseNo=course.courseNo
5 and sel.stuNo=(select stuNo from (select stuNo,count(*) from sel group by stuNo having count(*)=(select max(count(*)) from sel group by stuNo)))
6 /

STUNAME COURSENAME GRADE
------------ -------------------- ----------
Mike English 70
Mike Maths 80
Mike Computer 90

只是这个子查询太复杂,应该有更简单的方法。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/37724/viewspace-152536/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-18

  • 博文量
    279
  • 访问量
    990827