2017-02-15 5 views
4

セミジョイントのコンセプトや従来のジョイントとの違いを理解しようとすると、私は問題を抱えています。私はすでにいくつかの記事を試したが、説明に満足していない、誰かがそれを理解するのを助けてくれますか?データベースのセミジョインとは何ですか?

+1

条件に一致するリレーション内のタプルの存在をチェックします。 http://awads.net/wp/2007/05/01/back-to-basics-anti-joins-and-semi-joins/ –

答えて

0

私は理解しているように、セミ・ジョインは左側です参加したり、右に参加:

What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?

だから、左(半)との差が参加し、「従来は」参加するだけ取り出すということです左側のテーブルのデータ(ジョイン条件に一致するもの)。一方、完全な(外部の)結合(従来の結合の意味)は、条件が一致する両方のテーブルのデータを取得します。

+2

左または右の結合は_外結合と呼ばれます。 _semi-join_はまったく同じものではありません。つまり、他のテーブルのデータが実際には描画されずに、他のテーブルのデータの存在によって制約される1つのテーブルの行セットを返します。 Iurii Antの答えに示されているように、「EXISTS」によって実装されています。 [Relational Algebra(Semijoin)を参照](https://en.wikipedia.org/wiki/Relational_algebra#Semijoin_.28.E2.8B.89.29.28.E2.8B.8A.29)、または[この優れた記事](https://blogs.msdn.microsoft.com/craigfr/2006/07/19/introduction-to-joins/)を参照してください。 –

2

単純な例です。半結合、左と SELECT DISTINCT s.id FROM students s LEFT JOIN grades g ON g.student_id = s.id WHERE g.student_id IS NOT NULL

今同じ: 参加者は、左の外側を使って成績を持つ学生を選択してみましょう SELECT s.id FROM students s WHERE EXISTS (SELECT 1 FROM grades g WHERE g.student_id = s.id)

後者がはるかに効率的です。

関連する問題