SQLite Joins

4267 ワード

SQLiteのJoinsサブフレーズは、2つ以上のデータベース内のテーブルのレコードと結合するために使用されます。JOINは2つの表のフィールドを共通の値で結合する手段です。
SQLは3つの主要なタイプの接続を定義している。
  • クロス接続-CROSS JOIN
  • 内接続-INNER JOIN
  • 外部接続-OUTER JIN
  • 二つの時計COMPANYとDEPARTENTがあると仮定します。
    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