目录内连接外连接内连接内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选,前面所说过的查询都是内连接,也是在开发过程中使用的最多的连接查询。select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;inner join : 将两个表按照指定条件关联匹配,只返回两个表中满足连接条件的行。可简写为joinon : 用来指定join的关联条件为连接两个表的核心规则,也可附加筛选条件显示SMITH的名字和部门名称用上一篇的写法为内连接的写法为select en
搞数据库查询,绕不开的一个基础概念就是内连接。它干的事情其实挺简单:把两张表放到一起,做一个所有可能的组合(也就是笛卡尔积),然后用一个条件,只挑出那些匹配得上的行留下。
说白了,咱们之前用过的那些查询,多半都属于内连接。在真实的开发场景里,这也是用得最频繁的一种连接方式。
它的标准语法长这样:
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
这里面有几个关键点:
inner join:这个词组就是执行内连接操作的核心,它负责把两张表按照你给的条件关联起来。不过,在实际写的时候,很多人会直接简写成 join,效果一样。
on:这个关键字后面跟的,就是匹配两张表的核心规则。它决定了哪些行能被“连接”上。有趣的是,这里不仅可以放连接条件,还能加一些额外的筛选条件。
光说理论有点抽象,来看个具体例子吧。比如我们要“显示SMITH的名字和他所在的部门名称”。
如果用传统一点的写法,大概是这样的:

但如果换成内连接的写法,思路就清晰多了:
select ename,dname from EMP inner join DEPT on EMP.deptno=DEPT.deptno where ename='SMITH'; -- 或者,把筛选条件直接放到on后面也行 select ename,dname from EMP inner join EMP.deptno=DEPT.deptno and ename='SMITH';
这两种写法都能得到正确结果。关键区别在于思路:on子句先把两张表关联起来,形成一个临时的“大表”(即满足连接条件的部分);然后where子句再从这个临时表里,精准地过滤出我们最终想要的那一行。

是不是感觉逻辑层次分明了许多?这种写法在处理复杂关联时,优势会更明显。
说完了内连接,咱们再来看看它的“兄弟”——外连接。首先登场的是左外连接。
它的核心原则就一句话:无论如何,我要确保左边这张表的每一行数据都完整地显示出来。就算右边的表里找不到能匹配的行,左边表的记录也照样会出现在结果集里,只是右边表对应的字段会以NULL值填充。
语法是这样的:
select 字段名 from 表名1 left join 表名2 on 连接条件
举个例子就容易理解了。假设有四名学生,但只有其中两人有考试成绩。如果我们使用内连接(inner join),结果只会显示那两名有成绩的学生。
但如果我们的需求是:“查询所有学生的成绩,就算学生没有成绩,也要把他的个人信息显示出来”。这时候,左外连接就派上用场了。

看,左边学生表的数据全部展示了,右边成绩表有匹配的就显示分数,没匹配的就用NULL占位,完美解决了问题。
理解了左外连接,右外连接就很好类推了。它的原则和左外连接正好镜像:确保右边这张表的每一行数据都完整显示。
语法也如出一辙:
select 字段 from 表名1 right join 表名2 on 连接条件;
比如,我们换一个需求:“显示所有的考试成绩,即使这个成绩没有对应的学生信息(比如可能是系统测试数据)”。
直接用右外连接就能搞定。不过话说回来,你完全可以把这个需求里的两张表交换一下位置,然后用左外连接来实现,效果一模一样。所以,左连接和右连接在功能上是等价的,只是看问题的角度不同。

最后,来看一个稍微综合点的例子,它能帮你彻底理解外连接的用途:“列出所有部门的名称和该部门员工的信息,同时,那些还没有任何员工的部门也要列出来”。
这个需求的关键点在于“所有部门”。显然,我们必须以部门表(DEPT)为基准,确保它完全显示。员工表(EMP)的信息则是可选的,有就关联上,没有就用NULL。这不正是左外连接的典型场景吗?
所以,写法很直接:
select * from DEPT left join EMP on EMP.deptno=DEPT.deptno;

结果一目了然:所有部门都列出来了,有员工的部门后面跟着员工信息,没员工的部门(比如图中的OPERATIONS),后面的员工字段全是NULL。任务完成。
希望以上的讲解,能帮助你清晰地掌握MySQL中这两种最核心的连接方式。理解它们的本质区别,在写复杂查询时就能游刃有余了。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述