天涯论坛

 找回密码
 立即注册
搜索
查看: 58|回复: 3

面试官:mysql 的内连接、左连接、右连接有什么区别? 请有仔细案例说明

[复制链接]

3027

主题

210

回帖

9777万

积分

论坛元老

Rank: 8Rank: 8

积分
97779022
发表于 2024-8-4 11:04:49 | 显示全部楼层 |阅读模式

程序汪发掘在MySQL中,内连接、左连接和右连接都是用来从两个或多个表中按照某些相关要求检索数据的方式,它们的重点区别在于返回结果集的规则区别。下面经过详细案例来讲明这些区别:

假设有两个表:

employees(员工表): 包括员工ID (emp_id) 和姓名 (name)。departments(分部表): 包括分部ID (dept_id) 和分部叫作 (dept_name)。并且假设不是每一个员工都有知道分部分配。内连接 (INNER JOIN)

内连接只返回两个表中匹配的行倘若在一边的表中匹配项,那样这些行就不会出此刻结果集中。

SQL 示例:

SELECT

employees.name, departments.dept_name

FROM

 employees

INNER JOIN departments ON

 employees.emp_id = departments.dept_id;

结果: 仅表示哪些在employees表中有对应分部ID的员工及其分部叫作

左连接 (LEFT JOIN 或 LEFT OUTER JOIN)

左连接返回左表(LEFT JOIN后面的表)的所有行,即使在右表中匹配。倘若右表中匹配项,则结果集中右表的部分将为NULL。

SQL 示例:

SELECT

 employees.name, departments.dept_name

FROM

employees

LEFT JOIN departments ON

 employees.emp_id = departments.dept_id;

结果: 表示所有员工的姓名,即使某些员工分配到分部(这些员工的dept_name字段值为NULL)。

右连接 (RIGHT JOIN 或 RIGHT OUTER JOIN)

右连接与左连接相反,它返回右表(RIGHT JOIN后面的表)的所有行,即使在左表中匹配。倘若左表中匹配项,则结果集中左表的部分将为NULL。

SQL 示例:

SELECT

 employees.name, departments.dept_name

FROM

 employees

RIGHT JOIN departments ON

 employees.emp_id = departments.dept_id;

结果: 表示所有分部叫作,即使某些分部任何员工分配(这些行的name字段值为NULL)。

总结

内连接:返回两个表中匹配的记录。左连接:返回左表的所有记录,加上右表中匹配的记录,右表匹配的记录以NULL填充。右连接:返回右表的所有记录,加上左表中匹配的记录,左表匹配的记录以NULL填充。

按照你的数据需求选取合适的连接类型,以保证你得到期望的结果集。

---------------------------------------------------------------------------------------------

当然,让咱们经过一个详细的例子来讲明MySQL中的内连接、左连接、右连接的区别。假设咱们有两个表:一个是employees(员工表),另一个是departments(分部表)。

employees 表:

employee_idfirst_namedepartment_id1程序汪1012Bob1023Carol1014DaveNULL

departments 表:

department_iddepartment_name101HR102IT103Finance

内连接 (INNER JOIN)

内连接只返回两个表中匹配的记录。如果employees表中的某行在departments表中找不到对应的department_id,那样这行就不会出此刻结果集中。一样,departments表中倘若员工,则不会出此刻结果中。

SQL 示例:

SELECT

employees.first_name, departments.department_name

FROM

 employees

INNER JOIN departments ON

 employees.department_id = departments.department_id;

结果:

first_namedepartment_name程序汪

HRBobITCarolHR

左连接 (LEFT JOIN)

左连接返回employees表(左表)的所有记录,即使在departments表中匹配。倘若departments表中匹配的记录,那样结果集中对应的department_name字段将会是NULL。

SQL 示例:

SELECT

employees.first_name, departments.department_name

FROM

 employees

LEFT JOIN departments ON

 employees.department_id = departments.department_id;

结果:

first_namedepartment_name程序汪HRBobITCarolHRDaveNULL

右连接 (RIGHT JOIN)

右连接与左连接相反,它返回departments表(右表)的所有记录,即使在employees表中匹配。倘若employees表中匹配的记录,那样结果集中对应的first_name字段将会是NULL。

SQL 示例:

SELECT

employees.first_name, departments.department_name

FROM

 employees

RIGHT JOIN departments ON

 employees.department_id = departments.department_id;

结果:

first_namedepartment_name程序汪HRBobITCarolHRNULLFinance

经过这些例子,你能够看到内连接、左连接、右连接分别怎样按照相关要求决定结果集的内容,帮忙你在区别场景下选取最合适的连接类型。

总结

内连接:返回两个表中匹配的记录。左连接:返回左表的所有记录,加上右表中匹配的记录,右表匹配的记录以NULL填充。右连接:返回右表的所有记录,加上左表中匹配的记录,左表匹配的记录以NULL填充。

按照你的数据需求选取合适的连接类型,以保证你得到期望的结果集。然则要求过滤时必须重视 on 和 where 的位置不可乱用,详细能够见下面文案

面试官:left join 后用 on 还是 where?





上一篇:Mysql面试题:内连接、左连接、右连接的区别
下一篇:阀门连接运用的伸缩接头和传力接头在功能和结构上的区别
回复

使用道具 举报

9

主题

770

回帖

10

积分

新手上路

Rank: 1

积分
10
发表于 2024-9-9 04:04:11 | 显示全部楼层
期待与你深入交流,共探知识的无穷魅力。
回复

使用道具 举报

3137

主题

3万

回帖

9996万

积分

论坛元老

Rank: 8Rank: 8

积分
99968628
发表于 2024-10-12 05:59:15 | 显示全部楼层
外贸B2B平台有哪些?
回复

使用道具 举报

2996

主题

2万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109194
发表于 2024-10-21 16:19:10 | 显示全部楼层
楼主果然英明!不得不赞美你一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-22 21:12 , Processed in 0.102305 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.