mysql的JOIN用法详解-附带查询示例
在 SQL 中,JOIN
是用于将多个表中的数据连接在一起的操作。它通过指定连接条件将两个或多个表中符合条件的行组合起来,产生一个新的结果集。
SQL 中常见的 JOIN 类型包括 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN。
下面详细介绍这些 JOIN 类型的用法:
1.INNER JOIN(内连接):它返回两个表中满足连接条件的行。它只返回两个表中共同满足条件的行,不包含不匹配的行。语法如下:
SELECT 列名 FROM 表1 INNER JOIN 表2 ON 连接条件;
2.LEFT JOIN(左连接):它返回左边表中的所有行,以及右边表中满足连接条件的行。如果右边表中没有匹配的行,将返回 NULL 值。语法如下:
SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 连接条件;
3.RIGHT JOIN(右连接):它返回右边表中的所有行,以及左边表中满足连接条件的行。如果左边表中没有匹配的行,将返回 NULL 值。语法如下:
SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 连接条件;
4.FULL OUTER JOIN(全外连接):它返回两个表中所有的行,无论是否满足连接条件。如果某个表中没有匹配的行,将返回 NULL 值。语法如下:
SELECT 列名 FROM 表1 FULL OUTER JOIN 表2 ON 连接条件;
在连接条件中,可以使用比较操作符(如 =、<>、<、>)来指定连接的条件。连接条件可以是一个列的相等条件,也可以是多个列的组合条件。
需要注意的是,JOIN 操作可能会导致结果集中的行数变多,因此需要根据具体的业务需求来选择合适的 JOIN 类型。
附上一段项目实际使用的示例代码:文章来源:https://www.toymoban.com/news/detail-856083.html
<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 查询语句
下面对代码进行逐行解释:文章来源地址https://www.toymoban.com/news/detail-856083.html
- 第1行: 标签定义了一个查询语句,id 属性为 “getPointDetail”。
- 第2行至第20行:这是实际的查询语句,在这些行中,通过 SELECT 关键字选择了多个列作为结果集,并通过 FROM 关键字指定了表。查询语句返回了一个结果集,其中包括了从 hub_point
表、sat_groundwater_network_point 表和 sat_point_base 表中选择的列。 - 第7行至第19行:这是多个 LEFT JOIN 子句,将其他表与 hub_point 表进行连接。通过 ON 子句指定连接条件。每个
LEFT JOIN 子句连接了一个子查询和一个表,子查询是一个从 sys_dict_item 表中选择特定字段的查询,通过 WHERE
子句和特定条件进行筛选。 - 第22行至第24行: 标签用于包裹 WHERE 子句,用来添加额外的条件。在这里,通过
标签进行条件判断,如果参数 id 不为空且不为空字符串,则将 hp.hid = #{id} 作为条件添加到 WHERE 子句中。 - 第26行:通过 ORDER BY 子句按照 sgnp.load_dts 列进行降序排序。
- 第27行:使用 LIMIT 子句限制结果集的返回行数为 1。
- 以上就是这段代码的简要解释。它查询了多个表,并使用了多个 LEFT JOIN 进行表的连接。同时,它还使用了 WHERE
子句、ORDER BY 子句和 LIMIT 子句来进一步筛选和排序结果集。
到了这里,关于mysql的JOIN用法详解-附带查询示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!