sql >> データベース >  >> RDS >> SQLite

SQLite自己参加

    概要 :このチュートリアルでは、テーブルをそれ自体に結合できるSQLite自己結合と呼ばれる特殊なタイプの結合について学習します。

    INNER JOINに精通している必要があることに注意してください およびLEFT JOIN このチュートリアルを進める前に、条項を使用してください。

    SQLite自己結合の概要

    自己結合は、LEFT JOINのいずれかを使用してテーブルをそれ自体に結合できるようにする特別な種類の結合です。 またはINNER JOIN 句。自己結合を使用して、同じテーブル内の他の行と行を結合する結果セットを作成します。

    クエリで同じテーブルを複数参照することはできないため、自己結合を使用する場合は、テーブルエイリアスを使用してテーブルに別の名前を割り当てる必要があります。

    自己結合は、同じテーブル内の同じ列または異なる列の値を比較します。自己結合に関与するテーブルは1つだけです。

    多くの場合、自己結合を使用して、テーブルに格納されている親子関係を照会したり、現在の合計を取得したりします。

    SQLiteの自己結合の例

    employeesを使用します デモンストレーション用のサンプルデータベースのテーブル。

    employees テーブルには、従業員データだけでなく組織データも格納されます。 ReportsTo 列は、従業員間のレポート関係を指定します。

    従業員がマネージャーに報告する場合、ReportsToの値 従業員の行の列は、EmployeeIdの値と同じです マネージャーの行の列。従業員が誰にも報告しない場合は、ReportsTo 列はNULLです 。

    誰が誰の直属の部下であるかに関する情報を入手するには、次のステートメントを使用します。

    SELECT m.firstname || ' ' || m.lastname AS 'Manager',
           e.firstname || ' ' || e.lastname AS 'Direct report' 
    FROM employees e
    INNER JOIN employees m ON m.employeeid = e.reportsto
    ORDER BY manager;Code language: SQL (Structured Query Language) (sql)

    試してみてください

    ステートメントはINNER JOINを使用しました employeesに参加する条項 それ自体に。 employees テーブルには、従業員とマネージャーの2つの役割があります。

    INNER JOINを使用したため employeesに参加する条項 テーブル自体の場合、結果セットには、マネージャー列にNULLが含まれる行がありません。 値。

    連結演算子||に注意してください 複数の文字列を1つの文字列に連結します。この例では、連結演算子を使用して、名、スペース、および姓を連結することにより、従業員のフルネームを取得します。

    誰にも報告しないCEOに問い合わせる場合は、INNER JOINを変更する必要があります。 LEFT JOINの句 上記のクエリの句。

    Andrew Adams 誰も報告していないので、CEOです。

    自己参加手法を使用して、次のクエリと同じ都市にいる従業員を見つけることができます。

    SELECT DISTINCT
    	e1.city,
    	e1.firstName || ' ' || e1.lastname AS fullname
    FROM
    	employees e1
    INNER JOIN employees e2 ON e2.city = e1.city 
       AND (e1.firstname <> e2.firstname AND e1.lastname <> e2.lastname)
    ORDER BY
    	e1.city;Code language: SQL (Structured Query Language) (sql)

    試してみてください

    結合条件には2つの式があります:

    • e1.city = e2.city 両方の従業員が同じ都市にいることを確認するため
    • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname e1 およびe2 同じ名前と名前の従業員がいないことを前提として、同じ従業員ではありません。

    このチュートリアルでは、SQLite自己結合手法を使用してテーブルをそれ自体に結合する方法を示しました。


    1. MySQLレプリケーションで避けるべき主な間違い

    2. MySqlエラー:このストアド関数/トリガーを呼び出したステートメントによって既に使用されているため、ストアド関数/トリガーのテーブルを更新できません

    3. OracleDBAリアルタイムの質問

    4. 記憶圧分析のリスク状態