关系型数据库中,多表数据需通过连接操作合并。内连接仅返回两表完全匹配的行,不匹配则丢弃。外连接分为左连接与右连接,会保留主表全部记录,缺失匹配时以空值填充。左连接以左表为主,右连接以右表为主,两者功能可通过交换表顺序相互转换。实践中常使用左连接以明确主表逻辑。
在关系型数据库中,数据通常分散在多个表中。要一次性获取完整信息,就需要将这些表按照特定规则“连接”起来。其核心机制是笛卡尔积:它会让表A的每一行与表B的每一行进行两两组合,生成一张巨大的临时表。然后,我们再通过连接条件,从这张大表中筛选出有意义的行。
内连接是最常用的连接方式,规则明确:只返回两个表中完全满足连接条件的行。任何不匹配的行都会被直接丢弃。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
在写法上,主要有两种:
FROM子句中列出多个表,然后在WHERE子句中指定连接条件。常见的等值连接大多属于内连接。INNER JOIN ... ON ...语法,这种写法语义更清晰,是目前推荐的方式。内连接的特点是:结果集中绝不会因为不匹配而出现空值。它只呈现双方都“认可”的数据。
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
例如,查询员工及其所属的部门名称,内连接就只会显示有明确部门归属的员工。没有分配部门的员工,或没有任何员工的部门,都不会出现在结果里。
具体示例:显示员工“SMITH”的名字和他所在的部门名称。


与内连接不同,外连接会保留某个表中的全部记录,即使它在另一张表中找不到匹配项。缺失的部分会用NULL填充。外连接主要分为左外连接和右外连接。
为了更好地说明,我们先看下预先创建的数据表结构:

使用LEFT JOIN时,会完整显示左侧表的所有行。如果右表中没有匹配的行,对应的列就会显示为NULL。
这种连接方式适用于以左表为主体的查询场景。比如,“列出所有学生,并显示他们的成绩”。即使某个学生从未参加过考试,他的个人信息也会被保留下来,只是成绩部分显示为空。
例子:查询所有学生的成绩,即使某个学生没有成绩,也要将其个人信息显示出来。

使用RIGHT JOIN时,则会完整显示右侧表的所有行。如果左表中没有匹配的行,对应的列同样会用NULL填充。
这适用于以右表为主体的场景。例如,“列出所有成绩,并显示对应的学生信息”。如果某个成绩找不到对应的学生(可能学生记录已被删除),这条成绩记录依然会出现,只是学生信息部分为空。
例子:对stu表和exam表进行联合查询,显示出所有的成绩,即使这个成绩没有对应的学生,也要显示出来。

实际上,左连接和右连接在功能上可以互相转换,只需要交换表的顺序即可。
例如,要实现“列出所有部门和员工,包括没有员工的部门”这个需求:
在开发实践中,通常固定使用LEFT JOIN会让逻辑更清晰。只需要把想要全量保留的那个“主表”放在左边即可,这样更容易理解和维护。
如果用图形比喻,内连接就像是取两个圆的交集。而左外连接,则像是保留左边整个圆,右边只取与左边相交的部分,右边未相交的部分则留白处理。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述