Oracle里头join到底咋用,简单演示给你看看怎么操作和理解
- 问答
- 2026-01-15 22:52:35
- 1
想象一下,你手里有两张表格,第一张表叫“员工表”,里面有每个员工的工号、姓名和他们所在的部门编号,第二张表叫“部门表”,里面记录了部门编号和部门的具体名称,你想看一份清单,上面不仅有员工的姓名,还要有他所在的部门名称,而不是那个冷冰冰的部门编号,这时候,JOIN就派上用场了,它就像一座桥,通过两张表都有的“部门编号”这个共同点,把它们连接起来。
最常用、最基础的JOIN:内连接
内连接,你可以理解为“找共同朋友”,它只把两张表格里能匹配上的记录拿出来给你看,还用刚才的例子,在Oracle里,你可以这样写(例子来源于对SQL标准语法的常见应用):
SELECT 员工表.姓名, 部门表.部门名称 FROM 员工表 INNER JOIN 部门表 ON 员工表.部门编号 = 部门表.部门编号;
这里的关键字是INNER JOIN(写的时候经常把INNER省略,直接写JOIN也行,意思一样)。ON后面跟着的就是连接条件,也就是我们说的“桥”在哪里,这条命令的意思就是:请把“员工表”和“部门表”搬过来,然后按照“部门编号”这个字段,把能对得上号的记录配成一对,最后只给我看员工的姓名和对应的部门名称。
那什么情况会匹配不上呢?员工表里有个员工,他的部门编号写的是“999”,但部门表里根本没有编号为“999”的部门,这个员工的记录在最终结果里就不会出现,反过来,部门表里可能有个“后勤部”,编号是“005”,但眼下员工表里还没有人被分配到这个部门,那这个“后勤部”也不会出现在结果里,内连接很实在,只展示“成功牵手”的信息。
想看到所有员工,哪怕他“无家可归”:左外连接
老板可能想看看所有员工的情况,包括那些新来的、还没来得及分配部门的(他们的部门编号是空的),这时候内连接就办不到了,因为它会把没部门的员工过滤掉,我们需要用“左外连接”。
“左”指的是什么?指的是FROM关键字后面紧跟着的那张表,在我们这个例子里就是“员工表”,左外连接的意思是:不管左边的表(员工表)里的记录,在右边的表(部门表)里有没有找到匹配项,我都要把左边表的所有记录保留下来,如果能匹配上,就把右边表的信息补上;如果匹配不上(比如那个没部门的员工),右边表的那部分就显示为空(NULL)。
写法是这样的(例子来源于对SQL标准语法的常见应用):
SELECT 员工表.姓名, 部门表.部门名称 FROM 员工表 LEFT OUTER JOIN 部门表 ON 员工表.部门编号 = 部门表.部门编号;
(OUTER这个词通常也可以省略,直接写LEFT JOIN)
这样查出来的结果,就会包括所有员工,有部门的员工,后面会正常显示部门名称;而那个没部门的员工,他对应的“部门名称”那一栏就是空的,这就保证了左边表的信息一条不落。
还有右外连接和全外连接
有“左”自然就有“右”。“右外连接”(RIGHT JOIN)和左外连接正好相反:它保证的是右边表的所有记录都出现,不管左边表有没有匹配的,你想确保列出所有部门(包括那个还没人的“后勤部”),同时显示部门里的员工(如果有的話),就可以用右外连接,把部门表放在右边。
而“全外连接”(FULL JOIN)就更厉害了,可以理解为“我全都要”,它结合了左外和右外的效果,保证两张表里的记录都出现,能匹配的,就配对显示;不能匹配的,各自那边的信息保留,另一边用空值填充,这样你就能同时看到所有员工(包括没部门的)和所有部门(包括没员工的)。
一个古老的写法:逗号和WHERE子句
在很早以前的SQL标准中,人们习惯用一种更简单但也更容易混淆的方法来写JOIN,就是在FROM后面用逗号把多张表隔开,然后把连接条件写在WHERE子句里,实现内连接的效果可以这样写(例子来源于Oracle旧版语法习惯):
SELECT 员工表.姓名, 部门表.部门名称 FROM 员工表, 部门表 WHERE 员工表.部门编号 = 部门表.部门编号;
这种写法现在依然被Oracle支持,但不太推荐新手使用,主要是因为它的语法不清晰,特别是当你要写外连接时,需要用特殊的符号(),非常容易出错,而用我们上面讲的INNER JOIN,LEFT JOIN这些关键字,意图明确,可读性强,不容易出错。
总结一下怎么理解和操作
- 先想目的:你到底想看什么?是想只看匹配上的(内连接),还是想保全左边表的全部(左连接),或是右边表的全部(右连接),抑或是两张表我都不舍得丢(全连接)?
- 找共同点:找到两张表之间那个能“对上暗号”的字段,比如例子里的“部门编号”。
- 选择句型:根据你的目的,选择
INNER JOIN、LEFT JOIN、RIGHT JOIN或FULL JOIN。 - 明确条件:在
ON后面清楚地写上连接条件。 - 避开老坑:尽量别用逗号和WHERE的那种老式写法,除非你非常确定自己在做什么。
JOIN其实就是这么一回事,多想象一下“手拉手”、“找朋友”的场景,多练习几次不同的情况,你就能轻松掌握了,它是在数据库里纵横捭阖、获取有用信息的超级核心的技能。

本文由邝冷亦于2026-01-15发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/81433.html
