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

news/2024/6/18 22:02:58 标签: mysql

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,并在实际应用中能够正确使用它们。


http://www.niftyadmin.cn/n/5362890.html

相关文章

分布式(一)Redis的数据结构

五种数据结构 String 结构 字符串常用操作 SET key value //存入字符串键值对 MSET key value [key value ...] //批量存储字符串键值对 SETNX key value //存入一个不存在的字符串键值对 GET key //获取一个字符串键值 MGET key [key ...] //批量获取字…

寒假 day1

1、请简述栈区和堆区的区别? 2、有一个整形数组:int arr[](数组的值由外部输入决定),一个整型变量: x(也 由外部输入决定)。要求: 1)删除数组中与x的值相等的元素 2)不得创建新的数组 3)最多只允许使用单层循环 4)无需考虑超出新数组长度后面的元素,所以…

app逆向-frida-rpc详解

Frida-RPC是Frida工具的一个组件,用于在应用程序和Frida脚本之间进行远程过程调用(RPC)。远程过程调用是一种允许应用程序的不同部分或不同的应用程序之间进行通信的方法。在Frida中,RPC通过JavaScript脚本和应用程序之间建立通信…

Rust 第一个rust程序Hello Rust️

文章目录 前言一、vscode 安装rust相关插件二、Cargo New三、vscode调试rustLLDB 前言 Rust学习系列。今天就让我们掌握第一个rust程序。Hello Rust 🦀️。 在上一篇文章我们在macOS成功安装了rust。 一、vscode 安装rust相关插件 以下是一些常用的 Rust 开发插件…

编程笔记 html5cssjs 077 Javascript 关键字

编程笔记 html5&css&js 077 Javascript 关键字 一、关键字二、Javascript关键字注意 在计算机编程语言中,关键字(Keyword)是指那些被编程语言赋予特殊含义、具有预定义用途的保留字。这些词汇不能用作变量名、函数名或其他标识符&…

遗失的源代码之回归之路的探索与实践

背景 最近比较突然被安排接手一个项目,该项目的情况如下 原生和RN结合的混合开发模式组件化开发,有很多基础组件以及业务组件但是在梳理项目依赖时发现了个别组件源码不全的情况,于是写了个cli用于对比两个版本产物文件,生成差异结果以便于快速进行源码找回恢复。 结果如下…

springboot151基于web的人力资源管理系统的设计与实现

人力资源管理系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,员工信息因为其管理内容繁杂,管理数量繁…

瑞_23种设计模式_抽象工厂模式

文章目录 1 抽象工厂模式(Abstract Factory Pattern)1.1 概念1.2 介绍1.3 小结1.4 结构 2 案例一2.1 案例需求2.2 代码实现 3 案例二3.1 需求3.2 实现 4 总结4.1 抽象工厂模式优缺点4.2 抽象工厂模式使用场景4.3 抽象工厂模式VS工厂方法模式4.4 抽象工厂…