假設您的Customer表具有您的SalesOrderHeader表中不存在的某些CustomerID。例如,考慮下面兩個表
Customer Table:
+ --------- + -------- + ---------- +
| Firstname | Lastname | CustomerID |
+ --------- + -------- + ---------- +
| Bob | Dylan | 1 |
| Donald | Trump | 2 |
| Me Myself | and I | 14 |
| Guy | Gisbon | 86 |
| Megan | Meganson | 87 |
+ --------- + -------- + ---------- +
SalesOrderHeader Table:
+ ---------------- + ----------- +
| SalesOrderNumber | CustomerID |
+ ---------------- + ----------- +
| 1681351 | 1 |
| 1354894 | 86 |
| 1354900 | 13 |
| 1351666 | 86 |
+ ---------------- + ----------- +
當您執行左外連接
SELECT c.FirstName, c.LastName, oh.SalesOrderNumber
FROM SalesLT.Customer AS c
LEFT OUTER JOIN SalesLT.SalesOrderHeader AS oh
ON c.CustomerID = oh.CustomerID
,你會看到從客戶表中的所有記錄(因爲它是左表)但是SalesOrderHeader表中的任何不匹配的記錄都將顯示爲空值。所以在我們的例子中,你會得到
Resulting Joined Table
+ --------- + -------- + ---------------- +
| Firstname | Lastname | SalesOrderNumber |
+ --------- + -------- + ---------------- +
| Bob | Dylan | 1681351 |
| Donald | Trump | null |
| Guy | Gisbon | 1354894 |
| Guy | Gisbon | 1351666 |
| Megan | Meganson | null |
+ --------- + -------- + ---------------- +
現在,如果你申請的where子句
WHERE oh.SalesOrderNumber IS NULL
您選擇的結果表的一個子集,其中SalesOrderNumber爲空。在這裏,你會得到
Filter in where clause
+ --------- + -------- + ---------------- +
| Firstname | Lastname | SalesOrderNumber |
+ --------- + -------- + ---------------- +
| Donald | Trump | null |
| Megan | Meganson | null |
+ --------- + -------- + ---------------- +
現在我們來看看第二個查詢,其中null過濾器包含在連接條件中。 SQL將從SalesOrderHeader表中查找空的SalesOrderNumbers。在我們的示例中,我們沒有任何空記錄,因此您基本上將您的Customer Table連接到一個空的SalesOrderHeader表。結果看起來像
Filter in join condition
+ --------- + -------- + ---------------- +
| Firstname | Lastname | SalesOrderNumber |
+ --------- + -------- + ---------------- +
| Bob | Dylan | null |
| Donald | Trump | null |
| Guy | Gisbon | null |
| Megan | Meganson | null |
+ --------- + -------- + ---------------- +
這種區別只對外連接很重要。如果您使用內部聯接,將過濾器置於聯接條件或where子句中會導致相同的結果。
這兩個查詢是一樣的。 – scaisEdge
爲什麼不運行它們? – Haris
看一看http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins –