2011-07-28 29 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都匹配....

相关问题