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;
相关推荐
202321336054 刘7 分钟前
Linux常用命令分类整理
linux·运维·数据库
Q741_1479 分钟前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(2) 作答语言:C/C++ 哈夫曼编码 LRU
c语言·数据库·c++·算法·笔试·哈夫曼编码·哈夫曼树
齐 飞18 分钟前
快速删除mysql表中所有数据-TRUNCATE TABLE
数据库·mysql
想摆烂的不会研究的研究生20 分钟前
每日八股——Redis(2)
数据库·redis·缓存
optimistic_chen22 分钟前
【Redis系列】主从复制
linux·数据库·redis·缓存·中间件·命令行·主从复制
一个天蝎座 白勺 程序猿27 分钟前
KingbaseES 处理 PL/SQL 运行时错误全解析:从异常捕获到异常处理的实践指南
数据库·sql·oracle·kingbasees
leo_23235 分钟前
表&表结构--SMP(软件制作平台)语言基础知识之三十三
数据库·开发工具·表结构·smp(软件制作平台)·应用系统
C***11501 小时前
Spring TransactionTemplate 深入解析与高级用法
java·数据库·spring
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue建筑材料管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
2301_800256111 小时前
B+树:数据库的基石 R树:空间数据的索引专家 四叉树:空间划分的网格大师
数据结构·数据库·b树·机器学习·postgresql·r-tree