mysql的JOIN用法详解-附带查询示例

mysql的JOIN用法详解-附带查询示例

在 SQL 中,JOIN
是用于将多个表中的数据连接在一起的操作。它通过指定连接条件将两个或多个表中符合条件的行组合起来,产生一个新的结果集。

SQL 中常见的 JOIN 类型包括 INNER JOINLEFT JOINRIGHT JOINFULL OUTER JOIN
下面详细介绍这些 JOIN 类型的用法:

1.INNER JOIN(内连接):它返回两个表中满足连接条件的行。它只返回两个表中共同满足条件的行,不包含不匹配的行。语法如下:

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(全外连接):它返回两个表中所有的行,无论是否满足连接条件。如果某个表中没有匹配的行,将返回 NULL 值。语法如下:

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

在连接条件中,可以使用比较操作符(如 =、<>、<、>)来指定连接的条件。连接条件可以是一个列的相等条件,也可以是多个列的组合条件。
需要注意的是,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>

这段示例代码是一个sringboot项目maper映射的 SQL 查询语句
下面对代码进行逐行解释:

  1. 第1行: 标签定义了一个查询语句,id 属性为 “getPointDetail”。
  2. 第2行至第20行:这是实际的查询语句,在这些行中,通过 SELECT 关键字选择了多个列作为结果集,并通过 FROM 关键字指定了表。查询语句返回了一个结果集,其中包括了从 hub_point
    表、sat_groundwater_network_point 表和 sat_point_base 表中选择的列。
  3. 第7行至第19行:这是多个 LEFT JOIN 子句,将其他表与 hub_point 表进行连接。通过 ON 子句指定连接条件。每个
    LEFT JOIN 子句连接了一个子查询和一个表,子查询是一个从 sys_dict_item 表中选择特定字段的查询,通过 WHERE
    子句和特定条件进行筛选。
  4. 第22行至第24行: 标签用于包裹 WHERE 子句,用来添加额外的条件。在这里,通过
    标签进行条件判断,如果参数 id 不为空且不为空字符串,则将 hp.hid = #{id} 作为条件添加到 WHERE 子句中。
  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