3

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html および http://www.khankennels.com/blog/index.php/archives/2007/ 04/20/入会募集中/

ベン図を使用して結合の基本を学習するのに非常に役立ちました。しかし、同じ考え方を複数の結合を持つクエリにどのように適用するのか疑問に思っています。

3つのテーブルがあるとしましょう:

従業員

EmployeeID
FullName
EmployeeTypeID

EmployeeTypes (フルタイム、パートタイムなど)

EmployeeTypeID
TypeName

保険記録

InsuranceRecordID
EmployeeID
HealthInsuranceNumber

ここで、最終的な結果セットに 3 つのテーブルすべてのデータを次の形式で含めたいと考えています。

EmployeeID | FullName | TypeName | HealthInsuranceNumber

これら 2 つのサイトから学んだことを使用して、保険情報が存在するかどうかに関係なく、次の結合を使用してすべての従業員を取得できます。

SELECT 
    Employees.EmployeeID, FullName, TypeName, HealthInsuranceNumber 
FROM Employees
INNER JOIN EmployeeTypes ON Employees.EmployeeTypeID = EmployeeTypes.EmployeeTypeID
LEFT OUTER JOIN InsuranceRecords ON Employees.EmployeeID = InsuranceRecords.EmployeeID

私の質問は、同じ種類のベン図パターンを使用して、上記のクエリをどのように視覚的に表現するかということです。この絵は正確ですか?

複数の結合

4

2 に答える 2

3

次の理由により、これらのタイプの図に例をマッピングすることはまったく不可能だと思います。

ここにある図は、集合論で交点と和集合を説明するために使用される図です。ダイアグラムに示されているようにオーバーラップを持たせるためには、3 つのダイアグラムすべてに同じタイプの要素を含める必要があります。これは、それぞれが異なるタイプの (行) オブジェクトを含む 3 つの異なるテーブルを扱う場合、定義上不可能です。 .

3 つのテーブルすべてが同じキーで結合される場合、このキーの値をセットに含まれる要素として識別できますが、この例ではそうではないため、これらの種類の図は適用できません。

あなたの例で両方の結合が同じキーを使用すると仮定すると、最初の結合はEmployeesandの交点にEmployee types制限され、2 番目の結合は and のすべてのEmployees結合条件に制限されるため、緑色の領域のみが正しい結果になります。緑の領域である前述のセクションの両方の交差点を取得することは真実でなければなりません.

お役に立てれば。

于 2012-07-30T08:09:41.147 に答える
0

これは正確な集合図ではありません (ベン図またはオイラー図)。従業員と従業員タイプの両方のメンバーであるエンティティはありません。テーブル スキーマがある種のテーブル継承を表している場合でも、すべてのエンティティは依然としてベース テーブルにあります。

コーディング ホラー ブログの Jeff の例は、同じエンティティを含む 2 つのテーブル (技術的には正規化違反) または自己結合でのみ機能します。

ベン図は、次のようなシナリオを正確に表すことができます。

-- The intersection lens
SELECT *
FROM table
WHERE condition1
    AND condition2

-- One of the lunes
SELECT *
FROM table
WHERE condition1
    AND NOT condition2

-- The union
SELECT *
FROM table
WHERE condition1
    OR condition2
于 2012-08-04T12:46:04.657 に答える