在本教程中,您將學(xué)習如何聯(lián)接兩個表以獲取組合數(shù)據(jù)。
到目前為止,您所看到的所有查詢都集中在一個表上。但是在現(xiàn)實生活中,您經(jīng)常需要一次查詢兩個或多個表并帶來合并的結(jié)果集。這在技術(shù)上稱為聯(lián)接,因為它涉及根據(jù)表之間的公共字段(外鍵)聯(lián)接不同的表以創(chuàng)建數(shù)據(jù)的新視圖。
為了容易理解這一點,讓我們來看看下面employees和departments表。在這里,employees表的dept id列是departments表的外鍵。因此,可以將這兩個表連接起來,得到組合的數(shù)據(jù)。
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ | |
表: employees | 表: departments |
注意:為了聯(lián)接表,用于聯(lián)接表的列的數(shù)據(jù)應(yīng)該匹配,而不必匹配列名。
聯(lián)接表時,在查詢中創(chuàng)建的聯(lián)接類型會影響結(jié)果集中顯示的行。您可以創(chuàng)建以下類型的聯(lián)接:
聯(lián)接僅返回兩個聯(lián)接表中都具有匹配項的行。例如,您可以將employees和departments表聯(lián)接在一起,以創(chuàng)建一個顯示每個雇員的部門名稱的結(jié)果集。在內(nèi)部聯(lián)接中,沒有部門信息的雇員不包括在結(jié)果集中,沒有雇員的部門也不會包括在結(jié)果集中。
在下一章中,我們將學(xué)習有關(guān)內(nèi)部聯(lián)接的更多信息。
外聯(lián)接是內(nèi)部聯(lián)接的擴展。 即使外聯(lián)接在聯(lián)接表中沒有相關(guān)行,外聯(lián)接也會返回這些行。 外聯(lián)接共有三種類型:左聯(lián)接(left join),右聯(lián)接(right join)和完全聯(lián)接(full join)。
我們將在后面的章節(jié)中詳細了解外部聯(lián)接的這些變體。
交叉聯(lián)接是沒有聯(lián)接條件的聯(lián)接。一個表的每一行與另一表的每一行合并。這種類型的結(jié)果集稱為笛卡爾乘積或叉積。例如,employees和departments表之間的交叉連接產(chǎn)生了一個結(jié)果集,其中每個可能的雇員/部門組合都有一行。
在接下來的章節(jié)中,我們將學(xué)習有關(guān)交叉連接的更多信息。