2012-02-23 25 views
2

可能性の重複:
Explicit vs implicit SQL joins暗黙的/明示的な結合の違いは何ですか?

私は多くの人々が今私に叫ぶだろうことを理解しています。しかし、私の理解

言ってやるから、私は2つのテーブル

STUDENTS

student_id 
firstname 
surname 

コース

course_id 
name 
student_id 

を持っているので、コースのテーブルは、外部キーSTUDENT_IDがあることを意味している一人の学生はい多くのコースを持つことができますか?

OKAY。私の理解から

、私はどちらか私は何ができるONE学生に関連付けられているすべてのコースを選択したい場合は、これら:

SELECT * 
FROM courses AS c, students AS s 
WHERE c.student_id = s.student_id 
    AND s.student_id = 1; 

OR

SELECT * 
FROM courses AS c 
    JOIN students AS s ON c.student_id = s.student_id AND s.student_id = 1; 

だから、ときに、JOINのポイントは何でしょう基本的に正確にWHEREと同じですか?

私の理解は間違っていますが、私は簡単な答えを見つけることができません。

私を教えてください!

+0

それは間違っていない、それらのクエリは同義語です。暗黙的な結合と明示的な結合の場合は、ここを参照してください。また、あなたの質問のタイトルを変更する、それは不正確です。それがINNER JOINの同義語である場合、それはOUTER JOINのためではないことに注意してください。 – Benoit

+1

靴のポイントは何ですか? –

+1

私はOPが結合と制約の間で混乱していると思っています。上記の結合とwhere節の違いについては上記のケースを参照し、制約の使用についてはSapanの答えを見てください。 – rrrr

答えて

7

FOREIGN_KEYは、データの整合性をチェックして何かを挿入しようとすると、あなたの生活が簡単になります。リレーションシップからデータを取得する際に、あなたを助けることを意味するものではありませんでした。

そのようなコースが存在しない場合にcourse_id = 10の学生を挿入しようとすると、外部キーの制約により、そのような学生がいることができなくなります。

JOINは、WHEREとまったく同じです。このquestionをご覧ください。

+0

それは質問のタイトルに答えます。しかし、コンテンツは '、'と 'JOIN'を使うことの違いについて質問します。 @Demsありがとう、 – MatBailie

+0

答えを更新しました! –

1

要約:違いはありません。

説明:リレーショナルモデルは「デカルト積」に基づいています。クエリ

SELECT a.x , b.y 
FROM table_a a, table_b b 
; 

の行のすべての可能な組み合わせがtable_aを形成しtable_bが生成されます。 aが10行、b行が100行の場合、1000行が得られます。 WHERE句に追加するものはすべて、WHERE句を満たす行のペアのみに、これらの結果をに限定します。だから

SELECT a.x , b.y, ... 
FROM table_a a, table_b b 
WHERE a.x = b.y 
; 

あなたは `NOT(a.x = b。実際には、WHERE句の要素には2つのテーブルがあります.2つのテーブルに関連する要素と、列表現を定数と比較する要素です。 JOIN節は、最初の種類の制限を指定する方法です。 いくつかの小さな違いと複雑さ(NULL、外部結合)がありますが、当面は2つの構文が同等です。