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;
相关推荐
XZ-07000118 分钟前
MySQL—B+树构建
数据库·b树·mysql
XZ-07000133 分钟前
MySQL-聚簇索引
数据库·mysql
qq_1851986937 分钟前
ruoyi框架中配置minio
数据库
Access开发易登软件1 小时前
Access 用 VBA 操作 SQLite,不用装任何驱动
jvm·数据库·sqlite·vba·access·access开发
字节跳动数据库1 小时前
火山引擎 Milvus 发布官方 CLI + Skill ,终端与对话双通道掌控向量数据库
数据库·人工智能
夜白宋1 小时前
【Redis深入】一、快的原因
数据库·redis·缓存
念越1 小时前
【数据库系统概论期末复习】 绪论重点与常考题重点与常考题整理第一章
数据库·数据库系统概论
SXJR1 小时前
langchain4j是如何保证tools或者funcation call不出错的
java·网络·数据库·ai·语言模型
AIMath~1 小时前
兼容pymongo=4.16版本如何安装mongodb
数据库·mongodb
念恒123062 小时前
MySQL连接池原理与简易网站数据流动是如何进行的
数据库·mysql