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

SQL内部結合–SQLとMySQLで3つのテーブルを結合する方法

    データベースを操作しているときは、いくつかの異なるテーブルのデータをまとめる必要があるかもしれません。この記事ではその方法を説明します。

    こことここでSQL結合についてはすでに書いていますが、最初に結合がどのように機能するか、特にMySQLに固有の構文を確認してみましょう。

    SQL結合ステートメント

    結合は、2つのテーブルをまとめて、相互に関連する行を照合し、照合可能な行のみを保持し、ペアになっていない行は保持しないようにするステートメントです。

    SELECT * FROM table1 
      INNER JOIN table2
      ON table1.id = table2.id;

    SELECT ... FROM ステートメントはどちらが最初のテーブルであるかを示し、2番目のテーブル名は INNER JOINの直後に書き込まれます キーワード。

    2つのテーブルを結合する方法は、 ONに記述されています。 声明。この場合、2つのテーブルは、関係 table1.id =table2.idを使用して結合されます。 。

    複数の結合ステートメントを一緒に使用して、同時に複数のテーブルを結合することができます。

    SELECT *
      FROM table1
      INNER JOIN table2
      ON table1.id = table2.id
      INNER JOIN table3
      ON table2.id = table3.id;

    これを行うには、2番目の INNER JOINを追加します ステートメントと2番目のON 3番目のテーブルと2番目の関係を示すステートメント。

    テーブル間の関係と、3つのテーブルを結合する理由について少し話しましょう。

    SQLのテーブル間の関係

    相互に関連するテーブルがある場合、それらの関係はさまざまなタイプの1つである可能性があります。

    1対多

    1対多の関係では、最初のテーブルの1つの行を、2番目のテーブルの複数の行に関連付けることができます。

    リレーショナルデータベースでは、これは first_table_idを持つ2番目のテーブルで実装できます。 その行が最初のテーブルのどの行に関連しているかを示す列。

    many-to-one

    多対1の関係では、最初のテーブルの1つの行を2番目のテーブルの1つの行に関連付け、2番目のテーブルの1つの行を最初のテーブルの複数の行に関連付けることができます。

    >

    リレーショナルデータベースでは、これは second_table_idを持つ最初のテーブルで実装できます。 2番目のテーブルのどの行にその行が関連しているかを示す列。

    多対多

    この場合、複数の行が複数の行に関連付けられています。

    この種の関係は、SQLテーブルのように表すことはできません。テーブル間に多対1および1対多の関係のみが存在するように、2つのテーブル間に結合テーブルを追加する必要があります。

    中央のテーブルの各行は、左側のテーブルの行と右側のテーブルの行の間の1つの関係を表しています。

    MySQLの実際には、その中央のテーブルには first_table_idの列があります。 およびsecond_table_idの列 、それぞれの組み合わせは一意です。

    実際のSQLテーブルへの参加

    組織のデータベースがあり、チーム(チームの名前やその他の識別情報)を含むテーブルと、プロジェクト(名前、進捗状況など)を含むテーブルがあるとします。

    id team_name 専門
    1 バナナスローワー バナナ
    2 ウッドグナワーズ 木をかじる
    3 ピンクの象 地面を踏みつける
    4 ふわふわポテト 仕事と睡眠
    id project_name 進捗状況
    1 ダムビル もう少し木のかじりと地面の踏みつけが必要です
    2 バナナケーキ 誰かがすべてのバナナを食べています
    3 睡眠調査 睡眠不足の調査が不十分

    チームは複数のプロジェクトで作業でき、プロジェクトは複数のチームで作業できるため、チームとプロジェクトの一致を追跡する3番目のテーブルもあります。

    project_id group_id
    1 2
    1 3
    2 1
    3 1
    3 2
    3 3
    3 4

    JOINを使用できます 次のように、人間が読める形式でテーブルの情報を表示する必要がある場合に、すべてをまとめるステートメント:

    SELECT
      teams.team_name AS team_name,
      projects.project_name AS project_name
    FROM TABLE teams
    INNER JOIN matches
      ON teams.id = matches.team_id
    INNER JOIN matches
      ON matches.project_id = projects.id
    ORDER BY teams.id;

    SELECT を使用して、各テーブルから表示する列を選択します ステートメント。

    テーブルの行をONと組み合わせる方法を指定します ステートメント。

    そして、 ORDER BY を使用して、好みの方法で行を並べ替えます。 ステートメント。

    ON ステートメントteams.id=matches.team_id およびmatches.projects_id=projects.id matchsの行を使用して行が結合されることを意味します テーブル。出力テーブルの各行には、プロジェクト名とチーム名があり、 matchsのプロジェクトIDとチームIDのペアを使用して組み合わされています テーブル。

    出力テーブルは次のようになります。

    Team_name Project_name
    バナナスローワー バナナケーキ
    バナナスローワー 睡眠研究
    ウッドグナワーズ ダムバルディング
    ウッドグナワーズ 睡眠研究
    ピンクの象 ダムビル
    ピンクの象 ダムビル
    ふわふわのジャガイモ 睡眠研究

    matchsから直接列はありません テーブル。 一致 表は出力には表示されませんが、 teamの行を組み合わせる方法の説明として使用されます。 およびprojects テーブル。

    結論

    JOIN ステートメントを使用すると、1つ以上のテーブルを結合できます。 ONと組み合わせて使用​​する必要があります テーブルの行と別のテーブルの行の間の関係を判別するステートメント。

    この記事では、 JOINの使用方法を学びました。 3つの異なるテーブルを結合するステートメント。



    1. Ibatisを使用したインサートでIDを返す方法(RETURNINGキーワードを使用)

    2. Oracle 11gに無制限の文字を格納する方法は?

    3. SQL Serverは、ストアドプロシージャ内のvarcharをサイレントに切り捨てます

    4. OracleStreamsのステップバイステップのレプリケーションの例