JOIN語句

開放

JOIN 運算符出現的先決條件

隨著表中數據量的增長,其中經常會出現重複值。例如,產品表有品牌名稱。有時會重複。為他們準備一個單獨的品牌表會很有用,例如,其中包含以下數據:

  • id - 品牌標識;
  • 名稱——品牌名稱;
  • company_owner - 品牌公司所有者的名稱;
  • company_contacts - 品牌所有者公司的聯繫人。

然後我們想創建一個地址表,我們可以將所有地址放入其中:

  • id – id 地址;
  • 國家;
  • 地區;
  • 城市;
  • 街道;
  • 房子;
  • 壓縮。

此外,在此表中,不僅可以存儲品牌擁有公司的地址,還可以存儲客戶和員工的地址。這種方法只是數據量(表中的行數)增長的結果。這使得操作表中的數據和維護它們的完整性變得更加容易。

當您有 5 名員工時,您只需在職業欄中輸入他們的職業即可。如果您的公司有 5000 名員工,那麼您需要一個包含 x 個職業及其職責列表的表格。

順便說一下,在 Java 語言中也有類似的東西。如果你在一個方法中有很多代碼,那麼就有將它分解成幾個方法的願望。如果一個類中有很多方法,那麼我想把它分成幾個類。

這就是大型數據庫有數千張表的原因。而且幾乎所有的查詢都是同時在多個表上執行的。而每張表都有一千條記錄的三個表的行的笛卡爾積已經是十億行。

但是僅使用 WHERE 過濾十億行可能需要數小時。因此,SQL 語言的創建者提供了他們的解決方案——JOIN 運算符。

JOIN 運算符簡介

JOIN 運算符用於明確告訴 SQL 服務器我們不需要所有表的所有行的笛卡爾積,而是使用 ID(或以其他方式)相互引用的不同表的行的智能粘合. 服務器有一個單獨的算法來處理使用 JOIN 運算符的表連接,這樣可以更快地執行此類操作。JOIN 運算符的一般形式如下:

table 1 JOIN table 2 ON condition

這裡說的是需要將表table1table2合二為一,並以condition作為join criterion 。

讓我們以我們的舊例子為例:

SELECT * FROM employee, task WHERE emploee.id = task.emploee_id

並使用 JOIN 運算符重寫它:

SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id

在我們的例子中,兩個查詢都會給出相同的結果,但這只是因為查詢非常簡單。將來,WHERE 允許您精確地構建行過濾器,而在 ON 之後指定的那個允許您編寫用於鏈接表的複雜腳本。在使用 JOIN 語句時也可以使用別名(表別名)。例子:

SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言