[數據庫筆記]關系代數(Relational Algebra)


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) !!!

 

練習:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM