MySQL基础查询篇(4)-INNER JOIN和OUTER JOIN的区别

2024-02-04 09:04

本文主要是介绍MySQL基础查询篇(4)-INNER JOIN和OUTER JOIN的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MySQL数据库中的INNER JOIN和OUTER JOIN是两种常用的连接查询操作,用于联合多张表中的数据。本文将详细介绍它们的区别和示例用法。

INNER JOIN

INNER JOIN(内连接)是连接查询中最常见的一种方式。它基于两个或多个表之间的共同字段(通常是主外键关系),将匹配的行合并为一行。它只返回两个表中共有的、符合连接条件的数据。

语法:

SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列 = 表2.列;

示例:

假设我们有两张表 usersorders,它们之间有一个共同的字段 user_id。我们希望获取所有有订单的用户的信息。

SELECT users.user_id, users.username, orders.order_id FROM users INNER JOIN orders ON users.user_id = orders.user_id;

上述语句将返回如下结果:

user_id | username | order_id --------|----------|--------- 1 | Alice | 101 2 | Bob | 102 3 | Charlie | 103

INNER JOIN仅返回同时在 usersorders 表中存在的用户数据。

OUTER JOIN

OUTER JOIN(外连接)是连接查询中的另一种方式。它可以返回两个表中共有的数据,以及一个表中没有匹配数据的行。

语法:

SELECT 列名 FROM 表1 [LEFT/RIGHT] JOIN 表2 ON 表1.列 = 表2.列;

OUTER JOIN又分为LEFT JOIN和RIGHT JOIN两种形式,分别是基于左表和右表返回结果。LEFT JOIN返回左表的所有行以及与右表匹配的行,而RIGHT JOIN返回右表的所有行以及与左表匹配的行。在MySQL中,可以使用LEFT OUTER JOINRIGHT OUTER JOIN关键字来替代LEFT JOINRIGHT JOIN

示例:

继续以上述 usersorders 表为例,我们希望获取所有用户的信息,包括没有订单的用户。

  • LEFT JOIN示例:

SELECT users.user_id, users.username, orders.order_id FROM users LEFT JOIN orders ON users.user_id = orders.user_id;

上述语句将返回如下结果:

user_id | username | order_id --------|----------|--------- 1 | Alice | 101 2 | Bob | 102 3 | Charlie | 103 4 | David | NULL

LEFT JOIN返回了左表 users 中的所有用户数据,同时也返回了在右表 orders 中有匹配的数据。由于用户David没有订单,所以 order_id 列显示为NULL。

  • RIGHT JOIN示例:

SELECT users.user_id, users.username, orders.order_id FROM users RIGHT JOIN orders ON users.user_id = orders.user_id;

上述语句将返回如下结果:

user_id | username | order_id --------|----------|--------- 1 | Alice | 101 2 | Bob | 102 3 | Charlie | 103 NULL | NULL | 104

RIGHT JOIN返回了右表 orders 中的所有订单数据,同时也返回了在左表 users 中有匹配的数据。由于没有与订单ID = 104匹配的用户,所以 user_idusername 列显示为NULL。

总结

INNER JOIN和OUTER JOIN是MySQL数据库中常用的连接查询操作。INNER JOIN基于两个或多个表之间的共同字段返回匹配的行,而OUTER JOIN除了返回匹配的行,还可以返回某个表中没有匹配的行。LEFT JOIN和RIGHT JOIN是OUTER JOIN的两种形式,分别基于左表和右表返回结果。根据实际需求,我们可以选择合适的连接方式进行数据查询。

希望本文能够帮助读者更好地理解INNER JOIN和OUTER JOIN,并在实际应用中能够正确使用它们。

这篇关于MySQL基础查询篇(4)-INNER JOIN和OUTER JOIN的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676961

相关文章

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会