MySQL | join on、inner join、left join on和right join的区别及示例

在MySQL中,JOINLEFT JOININNER JOIN 都是用于根据两个或多个表之间的相关列之间的关系,从这些表中查询数据的SQL操作。它们之间的主要区别在于如何处理不匹配的记录。

  1. INNER JOIN (或 JOIN)

INNER JOIN 返回两个表中都有的记录。换句话说,它只返回那些在两个指定的表中有匹配的行。如果某行在其中一个表中没有匹配项,则不会出现在结果集中。

示例

假设我们有两个表:studentsscores

students 表:

id name
1 Alice
2 Bob
3 Carol

scores 表:

student_id score
1 90
2 85
4 92

如果我们想查询每个学生的分数,我们可以使用 INNER JOIN

SELECT students.name, scores.score 
FROM students 
INNER JOIN scores ON students.id = scores.student_id;

结果集:

name score
Alice 90
Bob 85

注意,Carol没有出现在结果集中,因为她在 scores 表中没有分数。同样,分数为92的学生也没有出现在结果集中,因为他在 students 表中没有记录。
2. LEFT JOIN (或 LEFT OUTER JOIN)

LEFT JOIN 返回左表中的所有记录,以及右表中匹配的记录。如果左表的某行在右表中没有匹配项,则结果集中右表的部分将包含NULL。

使用上面的 studentsscores 表为例:

SELECT students.name, scores.score 
FROM students 
LEFT JOIN scores ON students.id = scores.student_id;

结果集:

name score
Alice 90
Bob 85
Carol NULL

在这里,Carol虽然没有分数,但仍然出现在结果集中,因为 LEFT JOIN 保证了左表(students)的所有记录都会被返回。
3. RIGHT JOIN (或 RIGHT OUTER JOIN)

RIGHT JOINLEFT JOIN 相反,它返回右表中的所有记录,以及左表中匹配的记录。如果右表的某行在左表中没有匹配项,则结果集中左表的部分将包含NULL。在实际应用中,RIGHT JOIN 使用得较少,因为通常可以通过调整表的位置和使用 LEFT JOIN 来达到相同的效果。

对于上面的 studentsscores 表,如果我们使用 RIGHT JOIN

SELECT students.name, scores.score 
FROM students 
RIGHT JOIN scores ON students.id = scores.student_id;

结果集:

name score
Alice 90
Bob 85
NULL 92

在这里,分数为92的学生虽然没有在 students 表中的记录,但仍然出现在结果集中,因为 RIGHT JOIN 保证了右表(scores)的所有记录都会被返回。

总之,选择哪种 JOIN 类型取决于你的查询需求和你想要从结果集中获取哪些数据。

相关推荐

  1. DELETE、TRUNCATE DROP 在MySQL中区别使用示例

    2024-03-20 14:32:01       39 阅读
  2. vue中.ts文件.js文件区别代码示例

    2024-03-20 14:32:01       37 阅读
  3. 设备树节点struct device关系示例

    2024-03-20 14:32:01       20 阅读
  4. C#中delegateevent,他们区别

    2024-03-20 14:32:01       33 阅读
  5. HTTPHTTPS区别HTTPS工作原理

    2024-03-20 14:32:01       31 阅读
  6. CPUGPU工作原理区别

    2024-03-20 14:32:01       54 阅读
  7. yarn安装使用与npm区别

    2024-03-20 14:32:01       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 14:32:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 14:32:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 14:32:01       82 阅读
  4. Python语言-面向对象

    2024-03-20 14:32:01       91 阅读

热门阅读

  1. ubuntu 开发软件安装

    2024-03-20 14:32:01       40 阅读
  2. git是什么git能做什么

    2024-03-20 14:32:01       42 阅读
  3. 大会员体系有什么作用?

    2024-03-20 14:32:01       37 阅读
  4. goto语句用什么替换

    2024-03-20 14:32:01       38 阅读