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

news/2024/12/23 6:07:44/

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 类型。


http://www.ppmy.cn/news/1526891.html

相关文章

LabVIEW提高开发效率技巧----VI服务器和动态调用

VI服务器(VI Server)和动态调用是LabVIEW中的两个重要功能,可以有效提升程序的灵活性、模块化和可扩展性。通过这两者的结合,开发者可以在运行时动态加载和调用VI(虚拟仪器),实现更为复杂的应用…

【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(三十一)

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

java和kotlin 可以同时运行吗

Java 和 Kotlin 可以同时运行在同一个项目中,这主要得益于 Kotlin 对 Java 的互操作性。Kotlin 被设计为与 Java 100% 兼容,这意味着 Kotlin 代码可以很容易地调用 Java 代码,反之亦然。这种设计使得 Kotlin 能够无缝集成到现有的 Java 项目中…

腾讯百度阿里华为常见算法面试题TOP100(3):链表、栈、特殊技巧

之前总结过字节跳动TOP50算法面试题: 字节跳动常见算法面试题top50整理_沉迷单车的追风少年-CSDN博客_字节算法面试题 链表 160.相交链表

Flask中的钩子函数

在Flask中,钩子函数(Hook Functions)或称为回调函数(Callback Functions)是特殊的函数,它们在Flask的请求处理流程中的特定点被自动调用。这些钩子函数允许你在请求被处理之前或之后、视图函数执行之前或之…

大数据-134 - ClickHouse 集群三节点 安装配置启动

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

UniApp如何打包成客户端应用程序

像flutter是支持PC宽屏、桌面平台(Windows/macOS/Linux),我一直在期望UniApp什么时候也支持PC,桌面平台,终于盼到了。 1、支持PC宽屏 从uni-app 2.9起,支持PC宽屏的适配。 uni-app提供的屏幕适配方案&am…

spring Reactive 响应式编程

Spring 响应式编程(Reactive Programming)是一种编程范式,它专注于异步数据流和变化的传播。Spring 提供了对响应式编程的支持,主要通过 Spring WebFlux,它是 Spring 5 引入的一部分,用于构建异步和非阻塞的…