SQL里几种JOIN连接
数据信息:
员工表EMP
部门表DEPT
一、INNER JOIN(内连接)
作用:只返回两个表中完全匹配的行,相当于取交集。
场景:查询「有部门的员工信息」。
示例:
SELECT 员工.姓名, 部门.部门名称
FROM 员工
INNER JOIN 部门 ON 员工.部门ID = 部门.部门ID;
结果:
说明:只显示有匹配部门的员工,未分配部门的员工(如王五)和空部门(如财务部)都不会出现。
二、LEFT JOIN(左连接)
作用:返回左表(员工表)所有行,右表无匹配时用NULL填充。
场景:查询「所有员工信息,包括未分配部门的员工」。
SELECT 员工.姓名, 部门.部门名称
FROM 员工
LEFT JOIN 部门 ON 员工.部门ID = 部门.部门ID;
结果:
说明:王五没有部门,但仍显示在结果中。
三、RIGHT JOIN(右连接)
作用:返回右表(部门表)所有行,左表无匹配时用NULL填充。
场景:查询「所有部门信息,包括没有员工的部门」。
SELECT 员工.姓名, 部门.部门名称
FROM 员工
RIGHT JOIN 部门 ON 员工.部门ID = 部门.部门ID;
结果:
说明:财务部没有员工,但仍显示在结果中。
四、FULL JOIN(全连接)
作用:返回两个表所有行,无匹配部分用NULL填充。
场景:同时查看「所有员工和所有部门」。
SELECT 员工.姓名, 部门.部门名称
FROM 员工
FULL JOIN 部门 ON 员工.部门ID = 部门.部门ID;
结果:
五、CROSS JOIN(笛卡尔积)
作用:返回两表所有可能的组合,结果行数=左表行数×右表行数。
场景:生成所有「员工-部门组合」(如排班场景)。
SELECT 员工.姓名, 部门.部门名称
FROM 员工
CROSS JOIN 部门;
结果: