一個頗有意思的SQL語句
前幾天,一個朋友在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部落格 ” ,連結:http://blog.itpub.net/37724/viewspace-152536/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個SQL語句的優化SQL優化
- 記一個實用的sql查詢語句SQL
- 貼一個求表空間的sql 語句SQL
- 一個經典的查詢及其SQL語句SQL
- 一個JTextPane寫SQL語句的問題SQL
- 一個題目涉及到的50個Sql語句SQL
- SQL語句的4個階段SQL
- 一個使用SQL語句解決的小問題SQL
- Oracle一個SQL語句的處理過程(轉)OracleSQL
- SQL 常用語句一覽SQL
- 一些SQL語句SQL
- 一條SQL語句的書寫SQL
- 一條很 巧妙的 SQL 語句SQL
- 一條sql語句的優化SQL優化
- 一條SQL語句的旅行之路SQL
- 如何寫這個sql語句?SQL
- Oracle釋出一個SQL語句的處理過程OracleSQL
- 一個過濾重複資料的sql語句(轉)SQL
- 一條簡單SQL語句的構成及語句解析SQL
- 學習筆記----一句SQL語句寫個乘法表筆記SQL
- 【sql】編寫基本的SQL SELECT語句一SQL
- SQL Server SQL語句中的函式呼叫與Oracle SQL語句函式呼叫一個有趣的差別SQLServer函式Oracle
- mysql sql語句學習(一)MySql
- SQL語句使用總結(一)SQL
- 一條sql語句的改進探索SQL
- sql語句的一些規則SQL
- MySQL入門---(一)SQL的DDL語句MySql
- SQL語句SQL
- SQL語句IN的用法SQL
- 常用的SQL語句SQL
- 常用的SQL 語句SQL
- SQL 語句 as 的用法SQL
- oracle的sql語句OracleSQL
- 使用USE_HASH Hint調優一個SQL語句SQL
- 一個 MySQL sql 語句執行順序帶來的 bugMySql
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- 單個SQL語句的10046 traceSQL
- 幾個定位、查詢session的sql語句SessionSQL