2011-07-28 12 views
0

2つの違いは何ですか?かかわらず、フィールド名の`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つのテーブル。あなたはその後、彼らは、意味的に同じになりますが、上記の古いスタイルのANSI構文で、主に以下をクリアし、不慮の原因の可能性があることにJoe Celko除いて誰もが推奨されてWHERE句に

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

を追加する必要がありますデカルト結合(外部結合に変換する場合は、変更する作業が増えます)。

+3

+1です。彼はそんなにスマイリーです。 –

3

最初に、従業員IDのリストとレベルのリストを選択しています。 (それらの間に必ずしも関係はない)。

2つ目は、参加をしています。従業員のリスト(そのレベルが与えられている)を同じレベルの従業員に関連付ける(ON条件を参照)。

2

最初は、2つのテーブルの間で一致する行を気にしないCartesian Product Joinです。これは、table1の行とtable2のすべての行との組み合わせのすべてのリストを作成します。それを必要とする特定のケースがない限り、この種のクエリはあまり意味のないデータを作り出します。

2番目の行は、同等のIDを持つ行と一致します。

1

最初のものは2番目のクエリでにEmployeeListとEmployeeLevelテーブル... からすべてのデータを示し、そしてEmployeeLevel.LevelID ... EmployeeList.LevelID間で一致しなければならないLevelIDとINNER JOINによるにEmployeeListとEmployeeLevel間rlationがありますしたがって、2番目のクエリは、両方のLevelIDに一致するデータを示しています....

関連する問題