実際のクエリでは、多くの場合、複数のテーブルから必要なデータを取得する必要があります。クエリに複数のテーブルが含まれる場合は、結合クエリを使用して実行できます。接続は主に次のように分けられます。
名前 | 値 |
---|---|
内部接続 | 内部結合 |
アウタージョイン | 左結合/右結合 |
クロスコネクト | 通常は使用されません |
1.内部接続
2つのテーブルの内部結合は、2つのテーブルの結合条件を満たす関連列のタプルを連結して新しいタプルを形成することによって形成される新しい関係です。結合条件を満たすテーブル内のタプルは破棄されます。
内部結合ステートメントの形式は次のとおりです。
FROM <表1> [内部]結合<表2>オン<結合条件>
2.外部接続
接続の接続条件を満たさないタプルのテーブルを保持する必要がある場合は、OUTERJOINを使用できます。外部接続は次のように分けられます。
- 左外側結合(LEFT OUTER JOIN)クエリの結果は、2つのテーブルが一致するデータ、左のテーブルに固有のデータ、および右のテーブルに存在しないデータはnullで埋められます。
- 右外部結合(RIGHT OUTER JOIN)クエリの結果は、2つのテーブルが一致するデータ、右のテーブルに固有のデータ、および左のテーブルに存在しないデータはnullで埋められます。
- フルジョイン
外部結合の基本形式:
FROM <表1> [LEFT | RIGHT | FULL] [OUTER] JOIN <表2> ON <〉接条件>
3.自然なつながり
自然な接続は、2つの関係グループ内の同じ名前の属性で同じ値を持つ行とレコードを照合し、重複する属性列を削除して、取得された新しい行がクエリ結果に表示され、一致しない行が表示されるようにします。線は結果に表示されません。したがって、自然な接続の結果としてデータが失われ、これらの失われたデータは一致しないものです。
関係RとSが同じ属性グループBを持ち、属性グループの値が等しい場合の接続が自然接続と呼ばれる場合、結果の関係の属性セットはRの属性セットであり、Sから属性Bを引いた属性セットが追加されます。
RとSの自然な接続は、次のように記述できます。R⋈S= {tr⌒ts|tr∈R∧ts∈S∧tr[B] = ts [B]}
例えば:
例えば:
各読者の状況や借りた本を聞いて、借りたことがなくても読者の情報を見てもらいたい。
--左连接
select Patron.PatronID, Name, Gender, BirthDate, Btype, Department,
CallNo, LendTime, ReturnTime
from Patron left join Lend on Patron.PatronID = Lend.PatronID;
--右连接
select Patron.PatronID, Name, Gender, BirthDate, Btype, Department,
CallNo, LendTime, ReturnTime
from Lend right join Patron on Patron.PatronID = Lend.PatronID;
SQLの左右の接続のonとonwhereの違い
左結合を使用する場合、onとonwhereの条件の違いは次のとおりです。
- on条件は、一時テーブルを生成するときに使用される条件です。on条件が真であるかどうかに関係なく、左側のテーブルのレコードを返します。
- where条件は、一時テーブルが生成された後に一時テーブルをフィルタリングするための条件です。現時点では、左結合の意味はありません(左テーブルのレコードを返す必要があります)。条件が真でない場合、すべてが除外されます。以降の条件は、左右のテーブルに関連付けられた一時テーブルを生成するために使用され、後の条件は、一時テーブル用です。レコードはフィルタリングされます。