Sqlite-using-joins
SQLite-結合
SQLite Joins 句は、データベース内の2つ以上のテーブルのレコードを結合するために使用されます。 JOINは、それぞれに共通の値を使用して2つのテーブルのフィールドを結合するための手段です。
SQLは結合の3つの主要なタイプを定義します-
- クロスジョイン
- インナージョイン *アウタージョイン
先に進む前に、2つのテーブルCOMPANYとDEPARTMENTについて考えてみましょう。 COMPANYテーブルにデータを挿入するINSERTステートメントを見てきました。 COMPANYテーブルで利用可能なレコードのリストを想定してみましょう-
別のテーブルは、次の定義を持つDEPARTMENTです-
DEPARTMENTテーブルに入力するINSERTステートメントのリストは次のとおりです-
最後に、DEPARTMENTテーブルで利用可能なレコードの次のリストがあります-
クロスジョイン
CROSS JOINは、最初のテーブルのすべての行と2番目のテーブルのすべての行を一致させます。 入力テーブルにそれぞれx行とy行がある場合、結果のテーブルにはx* y行があります。 CROSS JOINは非常に大きなテーブルを生成する可能性があるため、適切な場合にのみ使用するように注意する必要があります。
CROSS JOINの構文は次のとおりです-
上記の表に基づいて、次のようにCROSS JOINを書くことができます-
上記のクエリは、次の結果を生成します-
インナージョイン
INNER JOINは、結合述語に基づいて2つのテーブル(table1とtable2)の列値を組み合わせて、新しい結果テーブルを作成します。 クエリは、table1の各行とtable2の各行を比較して、結合述語を満たす行のすべてのペアを見つけます。 join-predicateが満たされると、AとBの行の各一致ペアの列値が結果行に結合されます。
INNER JOINは、最も一般的なデフォルトの結合タイプです。 オプションでINNERキーワードを使用できます。
以下はINNER JOINの構文です-
冗長性を避けてフレージングを短くするために、 USING 式でINNER JOIN条件を宣言できます。 この式は、1つ以上の列のリストを指定します。
NATURAL JOINは JOIN … USING に似ていますが、両方のテーブルに存在するすべての列の値が等しいかどうかを自動的にテストするだけです-
上記の表に基づいて、次のようにINNER JOINを書くことができます-
上記のクエリは、次の結果を生成します-
アウタージョイン
OUTER JOINはINNER JOINの拡張です。 SQL標準では、LEFT、RIGHT、FULLの3種類のOUTER JOINが定義されていますが、SQLiteは LEFT OUTER JOIN のみをサポートしています。
OUTER JOINには、ON、USING、またはNATURALキーワードを使用して表されるINNER JOINと同じ条件があります。 初期結果テーブルも同じ方法で計算されます。 プライマリJOINが計算されると、OUTER JOINは一方または両方のテーブルから結合されていない行を取得し、NULLで埋めて、結果のテーブルに追加します。
LEFT OUTER JOINの構文は次のとおりです-
冗長性を避け、フレージングを短くするために、USING式を使用してOUTER JOIN条件を宣言できます。 この式は、1つ以上の列のリストを指定します。
上記の表に基づいて、次のように内部結合を記述できます-
上記のクエリは、次の結果を生成します-