關聯模式的運算

關聯模式的運算是將關聯進行運算,或是跟另外的關聯進行運算。


(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 (sstudentDeptID='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
(d) Result (sId, sName) = Student - Assistant
(e) Result (aId, aName) = Assistant - Student

其SQL Command如下
SELECT sID,sName FROM Student WHERE sID IN (SELECT aID FROM Assistant)
(SELECT sID, dName FROM Student) UNION (SELECT aID,aName FROM Assistant)
SELECT sID,sName FROM Student WHERE sID NOT IN (SELECT aID FROM Assistant)
SELECT aID,aName FROM Assistant WHERE aID NOT IN (SELECT sID FROM Student)

(4) 相乘~又稱為卡迪森乘積,Cartesian Product

兩個關聯R和S相乘,表示成Result = R´S

兩個關聯相乘,序列值的數目就會是兩個關聯序列值個數的相乘,例如關聯R有五筆資料,關聯S有三筆資料,相乘後就會有15筆資料。

寫成 SQL就是 SELECT * FROM R , S;

(5) JOIN運算子

將兩個關聯JOIN的意義,就如同將兩個關聯相乘後,再用SELECT運算子找出所需的序列值。

表示法 Result = R ⋈ <配合條件> S

例如
Result = Transaction ⋈ Transaction.tNo=Cart.tNoCart
R ⋈ Transaction.tNo=Cart.tNo S= sTransaction.tNo=Cart.tNo (R´S)

更多參考資料
http://www.mysql.tw/2014/05/blog-post_21.html
http://www.mysql.tw/2013/05/select.html
http://www.mysql.tw/2013/04/blog-post_18.html

[練習]

請製作選課系統相關表單,嘗試使用SQL SELECT完成下列需求:
(1) 列出本學期的開課課程名稱
(2) 列出本學期的開課課程名稱、以及該課程的授課老師姓名
(3) 列出有選修國文以及英文的選課學生姓名
(4) 列出有選修國文但是沒有修英文的選課學生姓名
(5) 列出有選修國文或是英文的選課學生姓名
(6) 列出選修三門課程以上的學生姓名
(7) 列出選修學分超過10學分以上的學生姓名
(8) 列出沒有開課的老師姓名
(9) 列出開課超過三門課程以上的老師姓名
(10) 列出最多學生選修的課程名稱及老師姓名

張貼留言

0 留言