SQLite Joins
4267 ワード
SQLiteのJoinsサブフレーズは、2つ以上のデータベース内のテーブルのレコードと結合するために使用されます。JOINは2つの表のフィールドを共通の値で結合する手段です。
SQLは3つの主要なタイプの接続を定義している。クロス接続-CROSS JOIN 内接続-INNER JOIN 外部接続-OUTER JIN 二つの時計COMPANYとDEPARTENTがあると仮定します。
COMPANY表:
クロス接続(CROSS JOIN)は、第一の表の各行を第二の表の各行に合わせます。
二つの入力テーブルがそれぞれxとy列であれば、結果表はx+y列となります。
クロスコネクション(CROSS JOIN)は非常に大きなテーブルを作る可能性がありますので、使う時は慎重に、適当な時だけそれらを使います。
以下はクロス接続(CROSS JOIN)の文法です。
内部接続(INNER JOIN)は、結合述語に基づいて、両テーブルの列値を結合して、新しい結果表を作成します。
クエリーは、テーブル#1の各行をテーブル#2の各行と比較し、述語を接続する全ての行の整合ペアを見つける。述語が満たされると、AおよびBの各対の列値は結果の行に結合される。
インライン接続は最も一般的な接続タイプで、デフォルトの接続タイプです。INNERキーワードはオプションです。
以下はインラインJINの文法です。ONキーワードを使います。
外連結は内連結の拡張です。SQL標準では、3種類の外部接続を定義しています。LEFT、RIGHT、FULLですが、SQLiteは左外部接続のみに対応しています。
外部接続宣言条件の方法はインラインJINと同じで、ON、USING、NATURRALのキーワードを使って表現します。最初の結果表は同じように計算します。主連結計算が完了すると、外連結は左の表からすべての項目を返します。右の表に一致していなくても大丈夫です。
左外接続(LEFT OUTER JIN)の文法です。
SQLは3つの主要なタイプの接続を定義している。
COMPANY表:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
DEPARTENT表:ID DEPT EMP_ID
---------- ---------- ----------
1 IT Billing 1
2 Engineerin 2
3 Finance 7
クロス接続-CROSS JOINクロス接続(CROSS JOIN)は、第一の表の各行を第二の表の各行に合わせます。
二つの入力テーブルがそれぞれxとy列であれば、結果表はx+y列となります。
クロスコネクション(CROSS JOIN)は非常に大きなテーブルを作る可能性がありますので、使う時は慎重に、適当な時だけそれらを使います。
以下はクロス接続(CROSS JOIN)の文法です。
SELECT ... FROM table1 CROSS JOIN table2 ...
上記の表に基づいて、相互接続(CROSS JOIN)を書くことができます。以下のようになります。sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
上記のクエリは以下の結果をもたらします。EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Paul Engineerin
7 Paul Finance
1 Allen IT Billing
2 Allen Engineerin
7 Allen Finance
1 Teddy IT Billing
2 Teddy Engineerin
7 Teddy Finance
1 Mark IT Billing
2 Mark Engineerin
7 Mark Finance
1 David IT Billing
2 David Engineerin
7 David Finance
1 Kim IT Billing
2 Kim Engineerin
7 Kim Finance
1 James IT Billing
2 James Engineerin
7 James Finance
インラインJOIN内部接続(INNER JOIN)は、結合述語に基づいて、両テーブルの列値を結合して、新しい結果表を作成します。
クエリーは、テーブル#1の各行をテーブル#2の各行と比較し、述語を接続する全ての行の整合ペアを見つける。述語が満たされると、AおよびBの各対の列値は結果の行に結合される。
インライン接続は最も一般的な接続タイプで、デフォルトの接続タイプです。INNERキーワードはオプションです。
以下はインラインJINの文法です。ONキーワードを使います。
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
冗長性を回避し、短い言葉遣いを維持するために、USING表式宣言による接続条件を使用することができます。この表式は1つ以上の列のリストを指定します。SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...
自然接続(NATURRAL JOIN)はJOIN...USINGに似ていますが、2つのテーブルのそれぞれの列の値の間に存在するのは自動的に等しいです。SELECT ... FROM table1 NATURAL JOIN table2...
上記の表に基づいて、内部接続(INNER JOIN)を書くことができます。以下のようになります。sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
この照会会はCOMPANY.IDとDEPATMENT.EMP_を選別します。IDと同じ項目:EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Allen Engineerin
7 James Finance
外連結-OUTER JIN外連結は内連結の拡張です。SQL標準では、3種類の外部接続を定義しています。LEFT、RIGHT、FULLですが、SQLiteは左外部接続のみに対応しています。
外部接続宣言条件の方法はインラインJINと同じで、ON、USING、NATURRALのキーワードを使って表現します。最初の結果表は同じように計算します。主連結計算が完了すると、外連結は左の表からすべての項目を返します。右の表に一致していなくても大丈夫です。
左外接続(LEFT OUTER JIN)の文法です。
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
冗長性を回避し、短い言葉遣いを維持するために、USING表式宣言外部接続条件を使用することができます。この表式は1つ以上の列のリストを指定します。SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...
上記の表に基づいて、外部接続(OUTER JIN)を書くことができます。以下の通りです。sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
上記のクエリは以下の結果をもたらします。EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Allen Engineerin
Teddy
Mark
David
Kim
7 James Finance