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;
相关推荐
旧梦吟3 分钟前
脚本网页 三人四字棋
前端·数据库·算法·css3·html5
小光学长7 分钟前
基于ssm的考研复习平台w0ws1848(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
-大头.10 分钟前
数据库高可用架构终极指南
数据库·架构
Elastic 中国社区官方博客13 分钟前
Elasticsearch:构建一个 AI 驱动的电子邮件钓鱼检测
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
德育处主任Pro19 分钟前
在亚马逊云上解决RDS、MariaDB 与 Aurora MySQL复制延迟实战指南
数据库·mysql·mariadb
l1t24 分钟前
解决PostgreSQL中找不到uniq函数的错误
数据库·postgresql
墨白曦煜31 分钟前
深入剖析 Redis 客户端:Sentinel 模式下的“寻址”与“感知”艺术
数据库·redis·sentinel
水上冰石34 分钟前
harbor使用https之证书生成
服务器·数据库·https
韩zj1 小时前
服务器定时备份数据库脚本
服务器·数据库·adb
笨蛋少年派1 小时前
Maxwell数据变更捕获工具简介
数据库·mysql