mysql の JOIN の詳細な使用法 - クエリの例付き

mysql の JOIN の詳細な使用法 - クエリの例付き

SQL では、JOIN は
複数のテーブルのデータを結合するために使用される操作です。結合条件を指定して 2 つ以上のテーブル内の修飾された行を結合し、新しい結果セットを生成します。

SQL の一般的な JOIN タイプには、INNER JOINLEFT JOINRIGHT JOIN、およびFULL OUTER JOINがあります。
これらの JOIN タイプの使用法については、以下で詳しく説明します。

1.INNER JOIN (内部接続): 結合条件を満たす 2 つのテーブルの行を返します。両方のテーブルから共通の条件を満たす行のみが返され、一致しない行は含まれません。構文は次のとおりです。

SELECT 列名 FROM1 INNER JOIN2 ON 连接条件;

2.LEFT JOIN (左側の接続): 結合条件を満たす左側のテーブルのすべての行と、右側のテーブルの行を返します。右側のテーブルに一致する行がない場合は、NULL 値が返されます。構文は次のとおりです。

SELECT 列名 FROM1 LEFT JOIN2 ON 连接条件;

3.RIGHT JOIN (右接続): 結合条件を満たす右側のテーブルのすべての行と、左側のテーブルの行を返します。左側のテーブルに一致する行がない場合は、NULL 値が返されます。構文は次のとおりです。

SELECT 列名 FROM1 RIGHT JOIN2 ON 连接条件;

4.FULL OUTER JOIN (完全外部接続): 接続条件が満たされているかどうかに関係なく、2 つのテーブル内のすべての行を返します。テーブル内に一致する行がない場合は、NULL 値が返されます。構文は次のとおりです。

SELECT 列名 FROM1 FULL OUTER JOIN2 ON 连接条件;

接続条件では、比較演算子(=、<>、<、> など)を使用して接続の条件を指定できます。結合条件は、1 つの列の等価条件にすることも、複数の列の組み合わせ条件にすることもできます。
JOIN 操作では結果セットの行数が増加する可能性があるため、特定のビジネス要件に応じて適切な JOIN タイプを選択する必要があることに注意してください。

プロジェクトで実際に使用されるサンプル コードを添付します。

<select id="getPointDetail" resultType="com.****************">
        SELECT
        hp.bk_id zdbh,
        spb.lng,
        spb.lat,
        spb.bdrq,
        spb.xzq,
        spb.ydlx,
        spb.ssdzdy as swdzdy,
        a.value as wljcdwlxmc,
        b.value as jcjlxmc,
        c.value as jcjjbmc,
        d.value as dxsllxmc,
        e.value as hsclxmc,
        f.value as ydlxmc,
        sgnp.*
        FROM hub_point hp
        LEFT JOIN sat_groundwater_network_point sgnp ON hp.hid = sgnp.hid
        left join sat_point_base spb on spb.hid = hp.hid
        left join (select * from sys_dict_item where fk_sort_code = '1019') a on sgnp.wljcdwlx = a.code
        left join (select * from sys_dict_item where fk_sort_code = '1017') b on sgnp.jcjlx = b.code
        left join (select * from sys_dict_item where fk_sort_code = '1016') c on sgnp.jcjjb = c.code
        left join (select * from sys_dict_item where fk_sort_code = '1013') d on sgnp.dxsllx = d.code
        left join (select * from sys_dict_item where fk_sort_code = '1012') e on sgnp.hsclx = e.code
        left join (select * from sys_dict_item where fk_sort_code = '1001') f on spb.ydlx = f.code
        <where>
            <if test="id != null and id != ''">
                hp.hid = #{
    
    id}
            </if>
        </where>
        ORDER BY sgnp.load_dts DESC
        LIMIT 1
    </select>

このサンプルコードは、springboot プロジェクトのマッパーによってマッピングされた SQL クエリ文であり、
コードを 1 行ずつ説明します。

  1. 1 行目: タグはクエリ ステートメントを定義し、id 属性は「getPointDetail」です。
  2. 行 2 ~ 20: これは実際のクエリ ステートメントです。これらの行では、SELECT キーワードによって結果セットとして複数の列が選択され、FROM キーワードによってテーブルが指定されます。クエリ ステートメントは、
    hub_point テーブル、sat_groundwater_network_point テーブル、sat_point_base テーブルから選択された列を含む結果セットを返します。
  3. 行 7 ~ 19: これらは、他のテーブルを Hub_point テーブルと結合する複数の LEFT JOIN 句です。ON句で結合条件を指定します。
    LEFT JOIN 句は、サブクエリとテーブルを接続します。サブクエリは、sys_dict_item テーブルから特定のフィールドを選択し、
    WHERE 句と特​​定の条件でフィルタリングするクエリです。
  4. 行 22 ~ 24: ラベルは WHERE 句をラップして条件を追加するために使用されます。ここでは
    タグで条件を判定しており、パラメータidが空でなく、空文字列でもない場合は、WHERE句に条件としてhp.hid = #{id}を追加します。
  5. 26行目:ORDER BY句を使用してsgnp.load_dts列の降順にソートします。
  6. 行 27: LIMIT 句を使用して、結果セットで返される行の数を 1 に制限します。
  7. 以上がこのコードの簡単な説明です。複数のテーブルをクエリし、複数の LEFT JOIN を使用してテーブルを結合します。同時に、WHERE
    句、ORDER BY 句、および LIMIT 句を使用して、結果セットをさらにフィルタリングおよび並べ替えます。

おすすめ

転載: blog.csdn.net/qq_61950936/article/details/131475806