sql中连接方式

在sql中,主要有五种连接类型,每种连接在处理表之间的关系时有不同的行为。一下是详细的解释和比较。

  1. INNER JOIN(内连接) 直接join默认也是内连接

描述:返回两个表中匹配的行

结果:只返回两个表中共用的记录

图示:两个集合的交集部分

语法:

sql 复制代码
SELECT e.emp_no
FROM employees e
LEFT JOIN dept_manager dm ON e.emp_no = dm.emp_no
WHERE dm.emp_no IS NULL;
  1. LEFT JOIN (左连接)

描述:返回左表的所有行+右表的匹配行

结果:左表所有记录+匹配的右表记录(无匹配则为NULL)

图示:左表全集+右表交集部分

语法:

sql 复制代码
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;
  1. RIGHT JOIN(右连接)

描述:返回右表的所有行+左表的匹配行

结果:右表所有记录+匹配的左表记录(无匹配则为NULL)

图示:右表全集+左表交集部分

语法:

sql 复制代码
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;
  1. FULL OUTER JOIN (全外连接)

描述:返回两个表的所有行

结果:左表所有记录+右表所有记录(无匹配则为NULL)

图示:两个集合的并集

语法:

sql 复制代码
SELECT columns
FROM table1
FULL OUTER JOIN table2 ON table1.column = table2.column;
  1. CORSS JOIN (交叉连接)

描述:返回两个表的笛卡尔积

结果:左表每行与右表每行组合

图示:两个集合的所有可能组合

语法:

sql 复制代码
SELECT columns
FROM table1
CROSS JOIN table2;

连接类型对比表

连接类型 别名 返回结果 使用场景
INNER JOIN JOIN 仅匹配的行 查找相关数据
LEFT JOIN LEFT OUTER JOIN 左表所有行 + 匹配的右表行 包含所有左表记录
RIGHT JOIN RIGHT OUTER JOIN 右表所有行 + 匹配的左表行 包含所有右表记录
FULL OUTER JOIN FULL JOIN 两个表的所有行 合并两个数据集
CROSS JOIN 所有可能的行组合(笛卡尔积) 生成所有组合

特殊连接方式:

  1. SELF JOIN(自连接)

表与自身连接

常用于层级数据(如员工-经理关系)

sql 复制代码
SELECT A.name, B.name AS manager
FROM employees A
JOIN employees B ON A.manager_id = B.emp_id;
  1. NATURAL JOIN (自然连接)

自动匹配相同名称的列

不推荐使用(隐式连接条件可能导致意外结果)

sql 复制代码
SELECT columns
FROM table1
NATURAL JOIN table2;

连接条件类型

1 等值连接:使用等号(=)的连接方式

2 非等值连接:使用其他的运算符(>,<,BETWEEN等)

3 Thete连接:任意条件的连接

实际应用示例

sql 复制代码
-- 查找所有非部门经理的员工
SELECT e.emp_no
FROM employees e
LEFT JOIN dept_manager dm ON e.emp_no = dm.emp_no
WHERE dm.emp_no IS NULL;

-- 查找所有员工及其部门(包括无部门的员工)
SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id;
相关推荐
ss2736 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
瑞克-桑切斯6 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
z06.7 小时前
MySQL索引
数据库·mysql
考虑考虑7 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
云祺vinchin7 小时前
中小企业备份软件选型从恢复需求到总体成本评估
数据库·数据备份·中小企业备份·容灾备份软件
Zenova EdgeOS8 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
KKKlucifer8 小时前
国内数据安全服务的产品智能化转型:大模型赋能下的技术能力重构分析
大数据·数据库·重构
字节跳动开源9 小时前
OpenViking 上线原生 3D 内容理解模型
数据库·开源
CCIE-Yasuo11 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
这个DBA有点耶11 小时前
内核级AI与多模融合:AI数据库在海外场景的落地要点
数据库·人工智能·架构