SQL 聯(lián)表查詢(Join)

在本教程中,您將學(xué)習如何聯(lián)接兩個表以獲取組合數(shù)據(jù)。

SQL連接基礎(chǔ)

到目前為止,您所看到的所有查詢都集中在一個表上。但是在現(xiàn)實生活中,您經(jīng)常需要一次查詢兩個或多個表并帶來合并的結(jié)果集。這在技術(shù)上稱為聯(lián)接,因為它涉及根據(jù)表之間的公共字段(外鍵)聯(lián)接不同的表以創(chuàng)建數(shù)據(jù)的新視圖。

為了容易理解這一點,讓我們來看看下面employeesdepartments表。在這里,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)結(jié)類型

聯(lián)接表時,在查詢中創(chuàng)建的聯(lián)接類型會影響結(jié)果集中顯示的行。您可以創(chuàng)建以下類型的聯(lián)接:

內(nèi)聯(lián)結(jié)(Inner join)

聯(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)結(jié)(Outer join)

外聯(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)接(Cross join)

交叉聯(lián)接是沒有聯(lián)接條件的聯(lián)接。一個表的每一行與另一表的每一行合并。這種類型的結(jié)果集稱為笛卡爾乘積或叉積。例如,employeesdepartments表之間的交叉連接產(chǎn)生了一個結(jié)果集,其中每個可能的雇員/部門組合都有一行。

在接下來的章節(jié)中,我們將學(xué)習有關(guān)交叉連接的更多信息。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清