Zi 字媒體
2017-07-25T20:27:27+00:00
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;
寫了
5860316篇文章,獲得
23313次喜歡