文章

目前顯示的是 五月, 2015的文章

實作測驗 ~ 正規化 + SELECT

圖片
有如下表單,你應該如何進行正規化呢? 學號 學生姓名 學生電話 課程代號 課程名稱 年級 老師姓名/電話 老師代號 科系代號 科系名稱 成績 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

SELECT SQL語法總整理

SELECT的基本語法如下~ 依照給予的條件,抓出資料。 SELECT * | {[DISTINCT, DISTINCTROW] field_list} FROM table_list WHERE conditions GROUP BY {field_list} [ASC,DESC] HAVING conditions ORDER BY {field_list} [ASC,DESC] 假設有以下表單 student( studno , studname, deptid) 學生資料表 course( yearsemester, courseid, studno , score) 選課單 coursemain( courseid , coursename, coursecredit, courseflag, deptid) 課程基本資料表 teacher( teano , teaname, deptid) 教師資料表 courseopen( yearsemester, courseid , teano, coursetime, room) 教師開課表 dept( deptid , deptname) 科系資料表 1. SELECT * FROM student; 從student表單抓出所有資料 2. SELECT studname FROM student; 從student表單抓出所有學生姓名 3. SELECT DISTINCT studname FROM student; 從student表單抓出所有 不重複 的學生姓名 4. SELECT studname, studno FROM student; 從student表單抓出所有學生姓名、學號 5. SELECT DISTINCTROW studname, studno FROM student; 從student表單抓出所有 不重複列 的學生姓名、學號 DISTINCT與 DISTINCTROW差異是什麼呢? DISTINCT指某欄位不要重複,DISTINCTROW指整個列不要重複。 6. SELECT * FROM student, course; 從student,course表單抓出所有資料 但是以上這個SQL句子其實沒有意義

關聯模式的運算

圖片
關聯模式的運算是將關聯進行運算,或是跟另外的關聯進行運算。 (1) SELECT運算子 ( s) 表示法: Result = s <選擇條件 > (R) 意思是指,從關聯R中,選擇出符合 <選擇條件>的資料。 這樣子好像有點難以理解,其實就是~使用 SELECT語法,從 關聯R中取出資料。 例如 關聯R為(studentNo, studentName, studentDeptID),我們就可以使用如下運算: SELECT * FROM R WHERE studentDeptID='0001';  其中 studentDeptID='0001'就是 <選擇條件> (2) PROJECT運算子( π ) 表示法: Result =  π <屬性串列 > (R) 意思是指,從關聯R中,選擇出某些屬性 的資料。 例如 關聯R為(studentNo, studentName, studentDeptID),我們就可以使用如下運算: SELECT studentNO, studentName FROM R;  但是經常 s跟 π經常一起使用,例如:  Result=π studentName, studentNo  ( s studentDeptID='0001'  (student_table)) 寫成 SQL就是 SELECT studentName, studentNo FROM student_table WHERE studentDeptID='0001'; (3) 集合運算子 ~ 交集/聯集/差集 交集(Intersection),以符號 Ç,例如 R1 Ç R2 聯集(Union),以符號 È 表示  ,例如 R1 È R2 差集(Difference),以符號  -   表示 ,例如 R1 - R2 如上面資料表,有Student跟Assistant兩個關聯(資料表) (b) Result (sId, sName) = Student∩Assistant (c) Result (sId, sName) = Student∪Assistant (