Mysql之Join左联右联内联,各解析(mysql三种join)

MySQL 是一款常用的关系型数据库管理系统。对于开发者来说,查询是其经常使用的操作之一。而在查询中,经常需要使用到 JOIN 操作。JOIN 操作是将两个或多个表中的记录按照指定的字段匹配进行组合的一个操作。

JOIN 操作主要包括三种类型:左联、右联和内联。不同类型的 JOIN 操作使用不同的关键字进行表达,下面我们将详细讲解这三种 JOIN 操作。

1. 左联(LEFT JOIN)

左联操作将左表中的所有记录都显示出来,而右表中没有与左表中匹配的记录则为 NULL。左联操作使用的关键字为 LEFT OUTER JOIN 或 LEFT JOIN。

实例:

假设我们有两个表,一个是学生表(Student),一个是课程信息表(CourseInfo)。学生表中存储了每个学生的 id、姓名和性别信息;课程信息表中存储了每个课程的 id、名称和学生 id(表示选修该课程的学生)等信息。我们需要查询选修了某门课程的所有学生信息,包括未选修该课程的学生的信息。

代码:

SELECT Student.*, CourseInfo.course_name

FROM Student

LEFT JOIN CourseInfo

ON Student.id = CourseInfo.student_id

AND CourseInfo.course_name = ‘Math’;

解析:

以上代码中,我们首先使用了 SELECT 语句选择了要查询的字段。然后使用了 LEFT JOIN 关键字将两个表进行连接。在 ON 子句中我们使用了两个条件,一个是保证连接学生表和课程信息表中匹配的记录必须是同一个学生。另一个条件是保证连接的记录必须是选修了 Math 课程的学生信息,这一条件只会在右表中生效。最后使用了 * 通配符表示选择所有列。

2. 右连(RIGHT JOIN)

右联操作与左联相反,它显示的是右表中的所有记录,而左表中没有与右表中匹配的记录则为 NULL。右联操作使用的关键字为 RIGHT OUTER JOIN 或 RIGHT JOIN。

实例:

我们同样使用学生表(Student)和课程信息表(CourseInfo)来解析右联操作。我们需要查询选修了某门课程的所有学生信息,包括未选修该课程的学生的信息(全体学生的信息),且需要用右表的数据进行填充。

代码:

SELECT Student.*, CourseInfo.course_name

FROM Student

RIGHT JOIN CourseInfo

ON Student.id = CourseInfo.student_id

AND CourseInfo.course_name = ‘Math’;

解析:

以上代码与左联操作的代码十分相似。不同之处在于我们使用了 RIGHT JOIN 关键字来进行操作,以右表 CourseInfo 为基础,而左表 Student 未被匹配的记录则为 NULL。结果会显示选修了 Math 课程以及未选修该课程的所有学生信息,且 SQL 查询结果的所有记录将直接由右侧表格的数据填充而成。

3. 内联(INNER JOIN)

内联操作是连接两个表中所有匹配的记录。它只返回连接表中的匹配行,即两个表中能够同时匹配到的行。内联操作使用的关键字为 INNER JOIN 或 JOIN。

实例:

我们同样使用学生表(Student)和课程信息表(CourseInfo)来解析内联操作。我们需要查询选修了某门课程的所有学生信息。

代码:

SELECT Student.*, CourseInfo.course_name

FROM Student

INNER JOIN CourseInfo

ON Student.id = CourseInfo.student_id

AND CourseInfo.course_name = ‘Math’;

解析:

以上代码中我们使用了 INNER JOIN 实现了两个表的连接。使用 ON 关键字将两个表中匹配的记录连接起来。这一查询会返回选修了 Math 课程的所有学生信息。

总结:

MySQL 中的三种 JOIN 操作可以帮助开发者轻松实现跨多个表的数据查询和组合。左联操作(LEFT JOIN)将左表中的数据与右表中的数据进行匹配,并显示所有左表的数据。右联操作(RIGHT JOIN)则将右表中的数据与左表中的匹配,并显示所有右表的数据。内联操作(INNER JOIN)则将两个表中的匹配数据进行连接,并显示所有符合条件的匹配数据。根据不同的数据查询需求,开发者可以选择不同类型的 JOIN 操作来实现数据查询和组合。


数据运维技术 » Mysql之Join左联右联内联,各解析(mysql三种join)