關係代數

使用關係模型時,我們可以使用2組操作。關係代數是其中之一。

當使用關係模型,我們可以使用2組操作。

第一個叫做關係代數,這是一個程序語言

這是SQL的基礎,因此學習非常重要-因為SQL是使用關係數據庫的實際標準。

第二個叫做關係演算而不是程序性的陳述性語言。這是我們與數據庫交互方式的根本差異,因為您不會告訴數據庫軟件該怎麼辦,你只要說出來你想要什麼,然後整理出具體操作方法。

這是編程語言之間的常見區別。在現代的前端中,我們說在React中與DOM的交互是聲明性的。使用原始JavaScript修改DOM是過程性的。

像這樣的語言數據記錄合格教育局奎爾以關係演算為基礎。我不打算討論這個問題,因為與SQL所採用的更實用的方法相比,它是一種更利基的處理方式,但是您可以根據需要進行查看。

有了這個介紹,讓我們繼續關係代數

我們有2種類型的操作:

  • 主要操作
  • 加盟行動

關係代數中的主要運算

主要操作是:

  • 聯盟只要兩個表具有相同的列和屬性類型(域),就可以從兩個表中獲取數據,並生成元組的和。
  • 區別只要兩個表具有相同的列和屬性類型(域),就可以獲取包含在第一個表中但不包含在第二個表中的數據,從而產生元組的差異。
  • 笛卡爾積根據屬性值將兩個表中的數據獲取並生成一個將它們的數據組合在一起的單個表。
  • 選擇僅基於某些條件提取表中包含的某些元組(行)。
  • 項目生成僅包含現有表的一個或多個屬性(列)的新表
  • 改名用於重命名屬性,用於防止多個表在不同數據上具有相同名稱時發生衝突

關係代數中的聯接運算

連接可能是關係代數可以執行的最強大的運算。它們建立在主要操作之上,並且使您可以關聯包含在不同關係(表)中的數據。

注意:我將很快討論DBMS在實踐中的聯接,這主要是理論上的。

我們有2個主要的加入版本:自然連接θ聯接. All the other versions are extracted from those 2.

自然加入

自然加入將兩個關係(表)相關聯,並基於屬性的相同值創建一個新表。

首先,我們需要兩個具有相同屬性名稱(列)的關係。然後,如果關係A中的屬性值與關係B中的屬性不匹配,則該行不屬於結果的一部分,將忽略該行。

例子:

關係A

員工ID 姓名
1 標記
2 托尼
3 里克

關係B

經理姓名 員工ID
托德 1
阿爾伯特 2

我們可以執行自然聯接來獲取每位員工的老闆姓名:

員工ID 姓名 經理姓名
1 標記 托德
2 托尼 阿爾伯特

由於這些關係具有共同的Employee ID屬性名稱,因此在結果中僅出現一次,而不是2次。

由於在關係B中沒有相應的條目,因此關係A中存在的#3員工Rick不包括在此表中。

Theta-join

Theta-join允許根據任何條件執行連接以比較兩個不同關係中的兩個列,而不僅僅是自然連接那樣的相等性。

它執行兩個表的笛卡爾積,並根據我們要進行的選擇過濾結果。

等值聯接

等值聯接是theta聯接,其中選擇基於兩個不同表中的屬性值之間的相等性。

與自然聯接的區別在於,我們可以選擇要比較的屬性名稱(列)。

稍後在引入SQL時,我們將更多地討論聯接,因此我們可以在實踐中使用它們。


更多數據庫教程: