Unary Operations(一元操作): 單表操作
- 選擇(Selection) ==>相當於SQL語句中的WHERE
語法:
![]()
舉例:

表示從Students這個表中選出course = 'CM'的信息,結果為:

等價於下面的SQL語句:
SELECT * FROM Students WHERE course = 'CM';
- 投影(Projection) ==>相當於SQL語句中的SELECT
語法:
![]()
舉例:

表示從Students這個表中選出student# 和name的信息,結果為:

等價於下面的SQL語句:
SELECT student#, name FROM Students;
- 選擇和投影的結合==>相當於SQL語句中的SELECT和WHERE的結合
語法:
![]()
舉例:

表示從Students這個表中選出student# 和name這幾個columns,使得course = 'CM' ,結果為

等價於下面的SQL語句:
SELECT student#, name FROM Students WHERE course = 'CM';
- 重命名(Rename) ==>相當於SQL語句中的AS子句的職能
語法:
ρ(A,B) 表示將B更名為A
Binary Operations(二元操作):不同結構的兩表操作
- 笛卡爾乘積(Cartesian Product)==>等價於SQL語句中兩個表進行笛卡爾積(全匹配)得到的結果,即SQL中進行多表連接時不指定連接條件的情況
語法:
表名R X 表名S
舉例:

表示表格Students中的每一個row都要concatenation表格Courses中的每一個row, 結果為:

等價於下面的SQL語句:
SELECT * FROM Students, Courses;
- Theta連接(Theta Join)==>是帶限定條件的笛卡爾乘積
語法:
![]()
舉例:

表示表格Students中的每一個row都要concatenation表格Courses中的每一個row,且student# = 200。結果為:

等價於下面的SQL語句:
SELECT * FROM Students, Courses WHERE student# = 200;
- 內部連接Inner Join (Equijoin)==>是帶限定條件(其限定條件是R表格的primary_key = S表格的oreign_key)的笛卡爾乘積
語法:
![]()

舉例:

表示表格Students中的每一個row都要concatenation表格Courses中的每一個row,且Student.course = Courses.course#。結果為:

等價於下面的SQL語句:
Select * From Students, Courses Where course=course#;
- 自然連接(Natural Join)==>去重之后的內部連接(Inner Join); 相當於SQL語句中的NATURAL JOIN
顯然,上述內部連接Inner Join之后的表格有冗余:

語法:
R1先得出Inner Join結果

R2選出R1去重后留下的columns: student#, Students.name, course, Courses.name

等價於下面的SQL語句:
Select student#, Students.name, course, Courses.name From Students, Courses Where course=course#;
小結: 由此可以看出笛卡爾乘積(Cartesian Product)-> Theta連接(Theta Join) -> 內部連接Inner Join (Equijoin)->自然連接(Natural Join) 范圍在逐步逐步的縮小。
- 外部連接(Outer Join)==> 相對於內部連接Inner Join 只生成匹配的行,外部連接允許輸出並不完全匹配的行
- 左外連接(Left Outer Join)==>表示左邊表的全部行輸出,右邊只輸出匹配行
語法:
左外連:⟕
舉例:

表示Students左外連接Courses,其中Student.course = Courses.course#。 結果為:

等價於下面的SQL語句:
Select * From Students, Courses Where course = course#(+)
- 右外連接(Right Outer Join)==>表示右邊表的全部行輸出,左邊只輸出匹配行
語法:
右外連:⟖
舉例:

表示Students右外連接Courses,其中Student.course = Courses.course#。 結果為:

等價於下面的SQL語句:
Select * From Students, Courses Where course(+) = course#
Set Operations(集合操作):相同結構的兩表操作
- 並集(Union) ==>相當於SQL中UNION關鍵字的職能
語法:

舉例:

R ∪ S 得到結果是:

- 交集(Intersection) ==>相當於SQL語句中INTERSECT職能
語法:

舉例:

R ∩ S 得到結果是:

- 差集(Difference) ==>相當於SQL語句中的EXCEPT
語法:

舉例:

R - S 得到結果是:
規定R - S, 輸出第一個表格的row(s) !!!
練習:
