2011-07-28 37 views
0

這兩者有什麼區別?`FROM _,_`和`FROM _ INNER JOIN _ ON _`有什麼區別

SELECT [EmployeeList].[Emp_ID], [EmployeeLevel].[LevelPosition] 
FROM [EmployeeList], [EmployeeLevel] 

SELECT [EmployeeList].[Emp_ID], [EmployeeLevel].[LevelPosition] 
FROM EmployeeList INNER JOIN EmployeeLevel ON 
[EmployeeList].[LevelID] = [EmployeeLevel].[LevelID] 

無論字段名。

+0

你試過了嗎? –

+0

您正在運行/查詢哪個SQL服務器? –

+2

你有沒有試過運行它?怎麼了?你爲什麼認爲第一個查詢返回了一個巨大的結果。 –

回答

9

以任何方式第一種是不相關的,並會返回一個交叉連接/笛卡爾與各行的每一排列加盟2張桌子。您將需要添加一個WHERE條款

SELECT [EmployeeList].[Emp_ID], [EmployeeLevel].[LevelPosition] 
FROM [EmployeeList], [EmployeeLevel] 
WHERE [EmployeeList].[LevelID] = [EmployeeLevel].[LevelID] 

然後,他們將語義相同的,但上面的是舊式的ANSI語法,並在很大程度上是由每個人都望而卻步,除了Joe Celko由於是不太清楚,造成無意的可能性笛卡爾連接(如果要轉換爲外部連接,還需要進行更多的工作)。

+3

爲喬Celko參考+1。他是個聰明人。 –

3

首先您要選擇一個員工ID和一個職位列表。 (它們之間沒有必然的關係)。

第二個你正在做一個連接。您將員工名單(考慮其級別)與具有相同級別的員工相關聯(請參閱ON條件)。

2

第一個是笛卡爾積連接,它不關心兩個表之間的匹配行。它會創建一個來自table1的每行組合的列表,以及來自table2的每一行。除非有特定的情況需要,否則這種查詢會產生太多意義不大的數據。

第二個匹配具有等效ID的行。

1

首先一個示出了從EmployeeList的和EmployeeLevel表... 所有數據。在第二查詢,有EmployeeList的和EmployeeLevel之間的rlation通過LevelID和INNER JOIN手段必須EmployeeList.LevelID和EmployeeLevel.LevelID ... 之間匹配所以第二個查詢顯示數據如果兩個LevelID都匹配....

相關問題