当前位置: 首页 > news >正文

一篇文章,讲清SQL的 joins 语法

SQL 中的不同 JOIN 类型:

1. (INNER)JOIN(内连接):返回两个表中具有匹配值的记录。

2. LEFT(OUTER)JOIN(左外连接):返回左表中的所有记录,以及右表中与之匹配的记录。

3. RIGHT(OUTER)JOIN(右外连接):返回右表中的所有记录,以及左表中与之匹配的记录。

4. FULL(OUTER)JOIN(全外连接):返回在左表或右表中有匹配的所有记录。

现在详细举例说明:

假设我们有两个表 employees 和 departments:

employee_idnamedepartment_id
1Alice1
2Bob2
3DavidNULL

employees表

department_iddepartment_name
1HR
2Engineering
3Sales

departments表

 INNER JOIN 

SELECT employees.name, departments.department_name  //要查的字段
FROM employees  //表1
INNER JOIN departments ON employees.department_id = departments.department_id;  //表2,连接条件

结果是

namedepartment_name
AliceHR
BobEngineering

LEFT (OUTER) JOIN

LEFT JOIN 返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配的记录,则结果中包含 NULL。

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;

结果是

namedepartment_name
AliceHR
BobEngineering
DavidNULL

RIGHT (OUTER) JOIN

RIGHT JOIN 返回右表中的所有记录,以及左表中匹配的记录。如果左表中没有匹配的记录,则结果中包含 NULL。

SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;

结果是

namedepartment_name
AliceHR
BobEngineering
NULLSales

 FULL (OUTER) JOIN

FULL JOIN 返回两个表中的所有记录,当左表或右表中有匹配时返回匹配的记录。如果没有匹配,则结果中包含 NULL。

SELECT employees.name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.department_id;

namedepartment_name
AliceHR
BobEngineering
DavidNULL
NULLSales

总结

  • INNER JOIN:只返回两个表中匹配的记录。
  • LEFT JOIN:返回左表中的所有记录,以及右表中匹配的记录。
  • RIGHT JOIN:返回右表中的所有记录,以及左表中匹配的记录。
  • FULL JOIN:返回两个表中的所有记录,当左表或右表中有匹配时返回匹配的记录。

希望这些示例能帮助你更好地理解 SQL 中的不同 JOIN 类型。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 架构设计——概念和基础
  • RabbitMQ(高阶使用)死信队列
  • 【机器学习】9 ——最大熵模型的直观理解
  • 集群聊天服务器项目【C++】项目介绍和环境搭建
  • ego-planner开源代码之traj_server数据流分析
  • 如何用安卓玩Java版Minecraft,安卓手机安装我的世界Java版游戏的教程
  • 深入浅出通信原理
  • Renesas R7FA8D1BH (Cortex®-M85)控制ISLS29035
  • QT + WebAssembly + Vue环境搭建
  • eclipse使用 笔记02
  • 【Linux系统编程】用互斥量和信号量加锁STL容器,避免并发问题
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】005 - Kernel 入口 C 函数 start_kernel() 源码分析
  • 在linux下,找到指定命令对应的路径信息
  • MCN跨国企业如何从0到1搭建ITSM运维体系
  • MATLAB、FPGA、STM32中调用FFT计算频率、幅值及相位差
  • 【Leetcode】101. 对称二叉树
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Angular数据绑定机制
  • Fastjson的基本使用方法大全
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • HTTP中GET与POST的区别 99%的错误认识
  • in typeof instanceof ===这些运算符有什么作用
  • Java比较器对数组,集合排序
  • java取消线程实例
  • Python爬虫--- 1.3 BS4库的解析器
  • 分布式熔断降级平台aegis
  • 技术胖1-4季视频复习— (看视频笔记)
  • 经典排序算法及其 Java 实现
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 配置 PM2 实现代码自动发布
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 突破自己的技术思维
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 新版博客前端前瞻
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 7行Python代码的人脸识别
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • (02)vite环境变量配置
  • (2)(2.10) LTM telemetry
  • (55)MOS管专题--->(10)MOS管的封装
  • (C++哈希表01)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (不用互三)AI绘画工具应该如何选择
  • (二)JAVA使用POI操作excel
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (转)负载均衡,回话保持,cookie
  • .“空心村”成因分析及解决对策122344