SQL 基础 | JOIN 操作介绍

embedded/2024/10/22 14:43:53/

在SQL中,JOIN是一种强大的功能,用于将两个或多个表中的行结合起来,基于相关的列之间的关系。

JOIN操作通常用在SELECT语句中,以便从多个表中检索数据。

以下是几种基本的JOIN类型以及它们的用法:

  1. INNER JOININNER JOIN是最常用的连接类型。它返回两个表中连接条件相匹配的行。
SELECT column_names
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;

例如,获取所有有订单的客户信息:

SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
  1. LEFT (OUTER) JOINLEFT JOIN返回左表( table1)的所有行,即使右表( table2)中没有匹配的行。如果右表中没有匹配的行,那么结果集中右表的部分将为NULL。
SELECT column_names
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;

例如,获取所有客户信息,包括那些没有订单的客户:

SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
  1. RIGHT (OUTER) JOINRIGHT JOINLEFT JOIN相反,它返回右表( table2)的所有行,即使左表( table1)中没有匹配的行。左表中没有匹配的行的部分将为NULL。
SELECT column_names
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
  1. FULL (OUTER) JOINFULL JOIN返回左表和右表中所有行的信息。如果某一侧的表中没有匹配的行,那么该侧的结果集中相应的部分将为NULL。
SELECT column_names
FROM table1
FULL OUTER JOIN table2
ON table1.common_field = table2.common_field;
  1. CROSS JOINCROSS JOIN将一个表中的每一行与另一个表中的每一行组合,如果表中数据量很大,结果集可能会非常庞大。
SELECT column_names
FROM table1
CROSS JOIN table2;
  1. SELF JOINSELF JOIN是一个表与其自身的连接。这通常用于当表中有一个列引用了同一表中的另一个值时。
SELECT column_names
FROM table1 t1, table1 t2
WHERE t1.common_field = t2.common_field;
  1. NATURAL JOINNATURAL JOIN基于两个表中同名的列进行连接。如果表中有多个同名的列,可能会产生不确定的连接逻辑。
SELECT column_names
FROM table1
NATURAL JOIN table2;
  1. JOIN with subqueries: 子查询也可以被连接。你可以在子查询中定义一个结果集,然后将其作为一个临时表与其他表连接。
SELECT column_names
FROM table1
INNER JOIN (SELECT column_names FROM table2 WHERE condition) AS subquery
ON table1.common_field = subquery.common_field;

使用JOIN时,需要确保理解连接条件,以及如何影响结果集的大小和性能。合理的索引和查询优化可以显著提高JOIN操作的性能。

-- END --

alt

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布


http://www.ppmy.cn/embedded/33629.html

相关文章

Web Storage 笔记12 操作购物车

相关内容:购物车实例 WebStorage存储空间足够大,访问都在客户端(Client)完成。有些客户端先处理或检查数据,就可以直接使用WebStorage进行存储,不仅可以提高访问速度,还可以降低服务器的练习。负担。例如,购…

写一个在创建css文件之后的初始化样式

创建CSS文件后,进行初始化样式是一个很好的做法,因为它可以消除不同浏览器之间的默认样式差异,使得页面在不同浏览器中表现得更一致。下面是一个简单的CSS初始化样式示例: css /* 初始化样式 */ /* 清除内外边距 */ * { mar…

力扣数据库题库学习(5.4日)--1661. 每台机器的进程平均运行时间

1661. 每台机器的进程平均运行时间 问题链接 解题思路 现在有一个工厂网站由几台机器运行,每台机器上运行着 相同数量的进程 。编写解决方案,计算每台机器各自完成一个进程任务的平均耗时。 完成一个进程任务的时间指进程的’end’ 时间戳 减去 ‘sta…

css基础之盒子模型、浮动问题

盒子模型 一、盒子模型的组成 border边框、content内容、padding内边距、margin外边距(与另外盒子的距离) 1.边框 border-width border-style: solid实线 border-style: dashed虚线 border-style: dotted点线 border-color border: 1pxx solid pink;复合写法,无…

【小浩算法 cpp题解】层次遍历与BFS

层次遍历与BFS 前言我的思路思路一:队列思路二 递归 我的代码运行结果 前言 二叉树的层次遍历应该是数据结构里面最基础的算法了,比较容易想到的就是用队列,刚好C的模板库里面也有queue这个数据结构,入队出队已经给我们实现好了,…

深入探索 MySQL:成本模型解析与查询性能优化

MySQL作为最流行的关系型数据库管理系统之一,在各种应用场景中都有着广泛的应用。 然而,在处理大规模数据时,查询性能往往成为了关注焦点。 本文将深入探讨MySQL的成本模型,解析其工作原理,并提供一系列优化策略&…

RabbitMQ之延迟队列

为什么要有延迟队列? 延迟消息就是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。 使用场景: 短信通知:下单成功后60s之后给用户发送短信通知。 失败重…

MySQL纪录慢SQL

查看慢SQL是否启用,查看命令:show variables like ‘log_slow_queries’ 查看慢查询参数,即设置超过多少秒的查询归为了慢查询。参数为:long_query_time 查询命令: show global variables like ‘long_query_time’; …