**MySQL关联查询七种方式详解与应用实例**,你的掌握了吗

news2025/4/7 5:20:37

当我们需要从多个表中查询数据时,就需要使用关联查询了。MySQL支持七种不同类型的关联查询:内连接、左连接、右连接、全外连接、交叉连接、自连接和自然连接。本文将讲解这七种关联查询的SQL语句、示例以及应用场景。

一、 前言

关联查询是数据库操作中非常重要的一部分,通过关联查询可以将多个表中的数据进行联合查询,从而方便我们对数据进行统计和分析。在本文中,我们将会讲解MySQL中的七种关联查询,帮助读者更好地了解和掌握这七种查询方式。

二、 SQL解析

下面我们来介绍每一种关联查询的SQL语句和解析。

  1. INNER JOIN(内连接)
    INNER JOIN是关联查询中最常见的一种方式,它在两个表中查找匹配的行,并且只返回符合条件的记录。
    在使用INNER JOIN进行查询时,需要让MySQL知道连接条件。一般使用ON关键字显式指定连接条件。
SELECT a.column1, b.column2
FROM table1 AS a
INNER JOIN table2 AS b
ON a.id = b.id;
  1. LEFT JOIN(左连接)
    LEFT JOIN返回左表中所有的行,以及右表中匹配的行。如果没有匹配的行,则右表中对应的字段值为NULL。
SELECT a.column1, b.column2
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.id = b.id;

  1. RIGHT JOIN(右连接)
    RIGHT JOIN与LEFT JOIN正好相反,返回右表中所有的行,以及左表中匹配的行。如果没有匹配的行,则左表中对应的字段值为NULL。
SELECT a.column1, b.column2
FROM table1 AS a
RIGHT JOIN table2 AS b
ON a.id = b.id;
  1. FULL OUTER JOIN(全外连接)
    FULL OUTER JOIN返回左表和右表中的所有行,如果没有匹配的行,则对应的字段值为NULL。
SELECT a.column1, b.column2
FROM table1 AS a
FULL OUTER JOIN table2 AS b
ON a.id = b.id;
  1. CROSS JOIN(交叉连接)
    CROSS JOIN返回两个表中所有可能的行组合,结果集的行数等于左表的行数乘以右表的行数。
SELECT a.column1, b.column2
FROM table1 AS a
CROSS JOIN table2 AS b;
  1. SELF JOIN(自连接)
    SELF JOIN是指在同一表中进行连接操作的过程,它主要用于解决表中字段之间的关联问题。
SELECT a.column1, b.column2
FROM table AS a
JOIN table AS b
ON a.parent_id = b.id;
  1. NATURAL JOIN(自然连接)
    NATURAL JOIN会自动匹配两个表中相同的字段,并返回它们的交集。
SELECT a.column1, b.column2
FROM table1 AS a
NATURAL JOIN table2 AS b;

三、示例

下面我们通过一个示例来看看这七种关联查询的具体应用。
假设我们有两个表,一个是学生表students,一个是课程表courses。它们的结构如下:
students表:

 +----+-------+-------+
| id | name  | class |
+----+-------+-------+
| 1  | Alice | 1     |
| 2  | Bob   | 2     |
| 3  | Carol | 1     |
+----+-------+-------+

courses表:

 +----+------------+
| id | course     |
+----+------------+
| 1  | Math       |
| 2  | English    |
| 3  | Chemistry  |
+----+------------+

现在我们来看一下,如何使用这七种关联查询方式来查询学生和对应的课程信息。

  1. INNER JOIN查询
SELECT students.name, courses.course
FROM students
INNER JOIN courses
ON students.id = courses.id;

该查询会返回这样的结果:

| name  | course    |
+-------+-----------+
| Alice | Math      |
| Bob   | English   |
+-------+-----------+
  1. LEFT JOIN查询
SELECT students.name, courses.course
FROM students
LEFT JOIN courses
ON students.id = courses.id;

该查询会返回这样的结果:

| name  | course     |
+-------+------------+
| Alice | Math       |
| Bob   | English    |
| Carol | NULL       |
+-------+------------+
  1. RIGHT JOIN查询
SELECT students.name, courses.course
FROM students
RIGHT JOIN courses
ON students.id = courses.id;

该查询会返回这样的结果:

| name   | course    |
+--------+-----------+
| Alice  | Math      |
| Bob    | English   |
| NULL   | Chemistry |
+--------+-----------+
  1. FULL OUTER JOIN查询
SELECT students.name, courses.course
FROM students
FULL OUTER JOIN courses
ON students.id = courses.id;

该查询会返回这样的结果:

| name  | course    |
+-------+-----------+
| Alice | Math      |
| Bob   | English   |
| Carol | NULL      |
| NULL  | Chemistry |
+-------+-----------+
  1. CROSS JOIN查询
SELECT students.name, courses.course
FROM students
CROSS JOIN courses;

该查询会返回这样的结果:

| name  | course    |
+-------+-----------+
| Alice | Math      |
| Alice | English   |
| Alice | Chemistry |
| Bob   | Math      |
| Bob   | English   |
| Bob   | Chemistry |
| Carol | Math      |
| Carol | English   |
| Carol | Chemistry |
+-------+-----------+
  1. SELF JOIN查询
SELECT a.name, b.name
FROM students AS a
JOIN students AS b
ON a.class = b.class
WHERE a.id <> b.id;

该查询会返回这样的结果:

| name | name  |
+------+-------+
| Alice| Carol |
| Carol| Alice |
+------+-------+
  1. NATURAL JOIN查询
SELECT students.name, courses.course
FROM students
NATURAL JOIN courses;

该查询会返回这样的结果:

| name  | course    |
+-------+-----------+
| Alice | Math      |
| Bob   | English   |
+-------+-----------+

四、总结

关联查询是数据库操作中非常常用的一种方式,MySQL支持七种不同类型的关联查询:内连接、左连接、右连接、全外连接、交叉连接、自连接和自然连接。每种查询方式都有自己的特点和应用场景,我们需要根据实际情况选择最合适的查询方式来获取需要的数据。
更多经典内容:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/471372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 37 解数独

Leetcode解数独 题目描述题解1(按Board行列回溯&#xff1a;较直接) 题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次数字 1-9 在每一列只能出现一次数字 1-9 在每一个以粗实线分隔的…

postgresql|数据库|批量执行SQL脚本文件的shell脚本

前言&#xff1a; 对于数据库的维护而言&#xff0c;肯定是有SQL脚本的执行&#xff0c;例如&#xff0c;某个项目需要更新&#xff0c;那么&#xff0c;可能会有很多的SQL脚本需要执行&#xff0c;SQL脚本可能会包含有建表&#xff0c;插入数据&#xff0c;索引建立&#xff…

Vue项目的性能优化

前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术&#xff0c;帮我们处理了前端开发中最脏最累的 DOM 操作部分&#xff0c; 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM&#xff1b;但 Vue 项目中仍然存在项目首屏优化、Webpack 编译配置优化等问题&#xff0c;所…

Towards Principled Disentanglement for Domain Generalization

本文用大量的理论论述了基于解纠缠约束优化的域泛化问题。 这篇文章认为以往的文章在解决域泛化问题时所用的方法都是non-trivial的&#xff0c;也就是说没有作严格的证明&#xff0c;是不可解释的&#xff0c;而本文用到大量的定理和推论证明了方法的有效性。 动机 因为域泛…

客户管理系统的作用有哪些?

阅读本文您将了解&#xff1a;1.客户管理系统的作用&#xff1b;2.客户管理系统软件怎么用&#xff1b;3.客户管理的注意事项。 一、客户管理系统的作用 客户是企业的重要财富&#xff0c;因此客户管理是企业发展过程中至关重要的一部分&#xff0c;那么客户管理怎么做&#…

把字符串转换成整数

题目&#xff1a;把字符串转换成整数 思路&#xff1a; 如果对于一般规则的数字“字符串”转化为数字都很容易&#xff0c;比如&#xff1a; 对于“123456”可以利用如下代码进行转化&#xff1a; string str"123456"; int ans 0; for (int i0; i<str.size(); …

Elesticesearch

1. 概述 应用场景&#xff1a; 给你一个巨大的文档数据&#xff0c;文档中存储着许多非结构化的数据&#xff0c;如下&#xff1a; {“id” : “1”, “name” : “佛山张学友”, “age” : “15”}, {“name” : “广州周润发”, “height” : “182”}, …中间有10000万行……

ABAP 二分法查找与SORT排序

需求场景 需要对内表排序&#xff0c;按降序排列&#xff0c;获取第一行&#xff1b;二分法查找需要的数据 我按照降序排列后&#xff0c;获取到了第一行&#xff0c;但是通过二分法查找没有获取到 二分法查找 二分查找&#xff0c;对排序数组通过二分区间排除的方法进行快速…

最好用的六款虚拟机软件,赶紧收藏

在日常工作和学习中,我们常常需要在一台电脑上运行多个操作系统,以便进行软件测试、开发、学习以及实验等任务。虚拟机软件就是一种崭新的技术,它可以在一台电脑上运行多个操作系统,为用户提供了更高效、安全、稳定和智能化的工作和学习环境。今天我为大家介绍6款优秀的虚拟…

k8s安装监控工具metrics-server

我们需要监控cpu和内存的使用率.以便提供硬件资源的申请采购建议. 也方便我们知道运行负荷, 而不是糊里糊涂出了问题再去解决或者工具自动解决了而我们不知道, 话说回来集群的好处就是低成本的达到高性能, 性能不去监控就有点太不专业了. 但, k8s居然不自带监控工具 https://ku…

了解hiberfil.sys文件:计算机休眠模式的背后

简介: hiberfil.sys是Windows操作系统中的一个文件&#xff0c;它通常存储在计算机的根目录下&#xff0c;用于保存休眠模式下的内存映像。当您将计算机置于休眠模式时&#xff0c;Windows会将所有正在运行的程序和数据保存到hiberfil.sys文件中&#xff0c;然后关闭计算…

SAP MRP例外信息解释

SAP中MRP的例外信息&#xff0c;一共分为八类&#xff0c;下面是所有例外信息的解释 第一类&#xff1a; 69&#xff1a;BOM组件可能是递归的&#xff0c;即自己的子集中包括了自己。 02&#xff1a;订单创建日期在过去&#xff0c;可能是没有及时处理&#xff0c;这个建议表…

【Python爬虫实战】汽车城最好的十款车,第一名竟是这款车...Python教你一键采集二手车数据信息实现数据可视化展示哦~(附视频教程)

前言 驾考不易&#xff0c;天天早起去练车&#xff0c;无论烈日还是下雨&#xff0c;通通都在室外进行&#xff0c;但想要拿证&#xff0c;一定要坚 持不懈的去练车。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或…

【Docker】2、Docker 基本操作【镜像操作】

目录 一、镜像相关命令(1) 镜像名称格式(2) 常见镜像命令 二、从 DockerHub 拉取镜像案例三、镜像导出和导入案例四、拉取 Redis 镜像练习 一、镜像相关命令 (1) 镜像名称格式 &#x1f50b; 镜像名称一般由两部分组成&#xff1a;[repository]:[tag] &#x1f50b; 若没有指…

Java每日一练(20230428)

目录 1. 搜索旋转排序数组 &#x1f31f;&#x1f31f; 2. 用栈实现队列 &#x1f31f; 3. x 的平方根 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 搜索旋转排序…

机器学习:基于PCA对人脸识别数据降维并建立KNN模型检验

基于PCA对人脸识别数据降维并建立KNN模型检验 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&…

nodejs+vue+springboot+python电影放映厅购票网站

&#xff08;结合完成了以上的基本目标之后&#xff0c;能够帮助管理人员对系统的方便管理&#xff0c;从而能够为管理员节省时间&#xff0c;给了用户极大的方便。系统中的数据要存储于数据库当中&#xff0c;能够通过SQL代码把数据库中的数据取出&#xff0c;映射到实体类中&…

Classic AUTOSAR专题 | 存储模块简介

往期小怿向各位小伙伴介绍了Classic AUTOSAR的OS模块&#xff0c;相信看过的小伙伴对Classic AUTOSAR的OS已经有基本的认知了&#xff0c;本期我们将继续介绍Classic AUTOSAR专题之存储模块的知识。 目录 1.AUTOSAR存储模块概述 2.NvM功能简介 3.应用层SWC如何访问NvM 4.小…

在Docker中安装并运行Redis(纯步骤)

在Docker中安装并运行Redis容器实例 此文章只有操作步骤&#xff0c;没有原理解释&#xff0c;只供学习时提醒安装步骤。 安装并运行可以分为四步 第一步&#xff1a;安装redis镜像 从远程仓库上查询redis的相关版本信息&#xff08;可以省略&#xff09; docker search red…

mac环境VSCode 配置C++,并写Hello World

安装VSCode&#xff0c;点击下载链接&#xff0c;下载Mac版本的vscode。安装“C extension for VS Code”&#xff0c;在扩展 (⇧⌘X)中搜索c&#xff0c;并安装确保CLANG安装成功。在mac的终端下输入clang --version&#xff0c;如果安装成功会打印相关信息&#xff0c;未成功…