SQL 正規化 SELECT 範例

SQL 正規化 SELECT 範例

SQL 正規化 SELECT 範例

 


資料來源: http://www.mysql.tw/2015/05/select.html

 

 

學號

學生姓名

學生電話

課程代號

課程名稱

年級

老師姓名/電話

老師代號

科系代號

科系名稱

成績

101001

張大頭

0910111222
0922111000

A001

資料庫

三年級

王老師 0933111333

001

001

資管系

80

A002

網路概論

林老師 0955111222

002

003

資工系

50

101002

劉三哥

0912333222
0922111333

A003

程式設計

三年級

孫老師 0912000333

003

001

資管系

85

A002

網路概論

林老師 0955111222

002

003

資工系

76

我們正規化後,資料結構如下~

studnt 學生資料表 (studno, studname, deptid)
teacher 老師資料表 (teano, teaname, deptid)
department 科系資料表 (deptid, deptname)
telephone 電話資料表 (ownerno, tel)
coursemain 課程資料表 (courseid, coursename, coursecredit, courseflag, deptid)
courseopen 開課資料表 (yearsemester, courseid, teano, coursetime, roomid)
course 學生選課單 (yearsemester, courseid, studno, score)

 

規化後,請寫出以下SQL Command:

(1)列出學生張大頭的所有選修的課程代號

SELECT c.courseid FROM course c, student s WHERE c.studno=s.studno AND s.studname=’張大頭’;

(2)列出學生張大頭的所有選修的課程名稱

SELECT m.coursename FROM course c, student s, coursemain m WHERE c.courseid=m.courseid AND c.studno=s.studno AND s.studname=’張大頭’;

(3)列出學生張大頭的所有選修的課程名稱,以及成績

SELECT m.coursename, c.score FROM course c, student s, coursemain m WHERE c.courseid=m.courseid AND c.studno=s.studno AND s.studname=’張大頭’;

(4)列出學生張大頭的所有電話

SELECT t.tel FROM telephone t, student s WHERE t.ownerno=s.studno AND s.studname=’張大頭’;

(5)列出林老師所有開課的總學生人數

SELECT COUNT(*) FROM course c, courseopen co, teacher t WHERE c.courseid=co.courseid AND co.teano=t.teano AND t.teaname=’林老師’;

(6)列出選修程式設計的學生名單

SELECT s.studno, s.studname FROM student s, course c, coursemain cm WHERE s.studno=c.studno AND c.courseid=cm.courseid AND cm.coursename=’程式設計’;

(7)列出每位學生的平均分數

SELECT studno, AVG(score) FROM course GROUP BY studno;

(8)列出所有課程成績未達60的學生姓名

SELECT s.studname FROM course c, student s WHERE c.studno=s.studno AND c.score<60;

(9)列出資工系的所有開課課程名稱

SELECT cm.coursename FROM coursemain cm, courseopen co, department d WHERE cm.courseid=co.courseid AND cm.deptid=d.deptid AND d.deptname=’資工系’;

(10)列出電話、所有人姓名。

 (SELECT studname as name, tel FROM telephone t,student s where t.ownerno=s.studno) UNION  (SELECT teaname as name, tel FROM telephone t,teacher tea where t.ownerno=tea.teano);

(11)列出沒有開課的老師編號、姓名。

SELECT teano,teaname FROM teacher WHERE teano NOT IN (SELECT teano FROM courseopen);

(12)列出每個學生的修課學分總數。

SELECT c.studno,sum(coursecredit) FROM course c,coursemain cm WHERE c.courseid=cm.courseid GROUP BY c.studno;

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *