当前位置: 首页 > news >正文

MySQL笔记-基础篇(二):多表查询

 ​

博客主页:     南来_北往

系列专栏:Spring Boot实战


前言

MySQL的多表查询是一项非常实用的数据库操作技术,它能够通过关联不同表中的数据来提供更加丰富和准确的信息。在实际应用中,数据通常不是孤立存在的,而是分布在多个相互关联的数据表中。因此,掌握多表查询的技术对于数据库设计和数据分析至关重要。

多表查询的基础是连接(JOIN)。连接操作允许将两个或多个表中的行按照某些相关的列组合起来。根据连接的方式,连接类型可以分为内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)以及全外连接(FULL OUTER JOIN)。其中,内连接只返回匹配的行,而外连接则除了返回匹配的行之外,还会返回其中一个表中不匹配的行。例如,一个左外连接会返回左表的所有行,即使它们在右表中没有匹配的行。

自连接是一种特殊的连接,它是表与其自身的连接。尽管涉及的是同一张表,但通过使用表别名,可以使得同一张表在查询中扮演不同的角色。例如,如果要找出每位员工及其上级的信息,可以使用自连接来实现。这时,员工表将被虚拟成两张表,一张代表员工本人,另一张代表其上级。

联合查询(UNION)是另一种多表查询的方法,它可以将两个或多个SELECT语句的结果组合成一个结果集。不同于连接查询的是,联合查询选取的是每个SELECT语句的完整结果集,并将它们按照列的位置进行拼接。在进行联合查询时,需要注意所有查询必须具有相同数量的列,并且相应列的数据类型需要兼容。

子查询是嵌套在其他查询中的查询,它的结果可以被用作外部查询的输入。子查询常用于WHERE或FROM子句中,可以简化复杂查询并实现逐层筛选数据。例如,可以使用子查询来首先确定某个特定条件下的数据集,然后再从这个结果集中进一步检索数据。

在实际的应用中,多表查询技术被广泛用于处理各种复杂的业务逻辑。例如,可以通过多表查询来确定订单和库存之间的关系,从而找出哪些商品缺货;或者根据用户的喜好来筛选推荐的商品;甚至计算各个员工的销售额等。这些案例体现了多表查询在解决实际问题时的灵活性和强大功能。

使用别名可以使查询语句更简洁易读,特别是在涉及长表名或进行自连接时。同时,在使用连接时应注意优化连接条件,尽量减少不必要的连接,使用索引来提高查询性能。虽然子查询可以简化一些复杂的查询,但过度使用可能会导致性能下降,因此要谨慎使用。

综上所述,MySQL的多表查询不仅是一种技术,更是一种艺术。通过熟练掌握和应用多表查询的各种技巧和方法,可以有效地从多个表中检索出所需数据,支持数据分析和业务决策。在面对越来越复杂的数据环境时,多表查询技术的重要性愈发凸显。因此,不断深化对多表查询的理解和应用,将对提升数据处理能力大有裨益。

案例

MySQL的多表查询是数据库操作中一项极为重要的技能,它能够通过关联不同表中的数据来提供更丰富的信息。在数据分析、应用程序开发等领域,多表查询技术的应用广泛且实用。

大家可以通过一个具体的案例来讲解多表查询的应用。假设有一个员工管理系统的数据库,其中有员工信息和部门信息分别存储在两个不同的表(employees表和departments表)中。employees表包含员工编号、姓名、部门编号等信息,而departments表则有部门编号、部门名称等信息。

在这个系统中,如果管理者需要获取员工的姓名及其所在部门的名称,就需要通过多表查询来实现。这种查询涉及到内连接操作(INNER JOIN),它是最常用的连接方式之一。

首先,大家使用内连接查询语句来从两张表中获取信息。SQL语句如下:

SELECT employees.name, departments.dept_name 
FROM employees 
INNER JOIN departments ON employees.dept_id = departments.id;

这条SQL语句的含义是选择employees表中的name字段和departments表中的dept_name字段,通过dept_id将这两个表连接起来,仅返回匹配成功的记录。这种查询确保只返回存在于两个表中的对应数据,即每个员工的部门名称。

但是,如果管理者还想了解那些尚未分配部门的员工信息,这时候就需要使用左外连接(LEFT JOIN)。左外连接会返回左表(这里是employees表)的所有记录,无论它们是否在右表(这里是departments表)中有匹配项。对应的SQL语句为:

SELECT employees.name, departments.dept_name 
FROM employees 
LEFT JOIN departments ON employees.dept_id = departments.id;

这样,即便某些员工没有分配到部门,他们的信息也会被显示出来,而对应的部门名称则为NULL。

进一步地,如果还想根据部门名称来过滤结果,可以加入WHERE子句来实现。比如,只查看属于“销售部”的员工:

SELECT employees.name, departments.dept_name 
FROM employees 
LEFT JOIN departments ON employees.dept_id = departments.id 
WHERE departments.dept_name = '销售部';

通过这些示例,可以看出多表查询的强大功能。在实际的应用中,根据需求灵活运用不同类型的连接,可以解决多种复杂的数据检索问题。

综上所述,多表查询不仅是SQL编程的基本技能,也是处理关系数据库中复杂数据关系的关键。通过熟练掌握和应用各种连接方法,可以有效增强数据查询的能力,满足不同的业务需求。尤其在数据驱动的今天,多表查询技术的重要性愈发凸显。

相关文章:

MySQL笔记-基础篇(二):多表查询

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 MySQL的多表查询是一项非常实用的数据库操作技术,它能够通过关联不同表中的数据来提供更加丰富和准确的信息。在实际应用中,数据通常不是孤立存在的,而是分布在多个…...

备战秋招60天算法挑战,Day15

题目链接: https://leetcode.cn/problems/minimum-window-substring/ 视频题解: https://www.bilibili.com/video/BV1sJ4m1g727/ LeetCode 76. 最小覆盖子串 题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s …...

【学习笔记】Matlab和python双语言的学习(整数规划和0-1规划)

文章目录 前言一、整数规划和0-1规划二、典型示例1.背包问题2.指派问题 三、代码实现----Matlab1.Matlab 的 intlinprog 函数2.Matlab 代码背包问题指派问题 四、代码实现----python背包问题指派问题 总结 前言 通过模型算法,熟练对Matlab和python的应用。 学习视频…...

【连续4届EI检索,SPIE 出版】第五届信号处理与计算机科学国际学术会议(SPCS 2024,8月23-25)

第五届信号处理与计算机科学国际学术会议(SPCS 2024) 将于2024年8月23-25日在中国哈尔滨举行。会议主要围绕信号处理与计算机科学等研究领域展开讨论。 会议旨在为从事信号处理与计算机科学研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技…...

Vue屏蔽Console.Log打印信息

Vue屏蔽打印信息 安装 npm install uglifyjs-webpack-plugin --save-dev 在vue.config.js文件或者webpack.prod.conf.js中配置 vue.config中 const UglifyJsPlugin require(uglifyjs-webpack-plugin) // 屏蔽打印数据 module.exports {optimization: {minimizer: [new Ugl…...

数据结构之《二叉树》(下)

在二叉树(中)了解了堆的相关概念后还实现了堆,并且还实现了堆排序,以及解决了TOP-K问题。接下来在本篇中将继续学习二叉树中的链式结构,会学习二叉树中的前、中、后三种遍历并实现链式结构的二叉树,接下来就开始本篇的学习吧&…...

用Python打造精彩动画与视频,9.3 项目案例分享与反思

第九章:综合项目 9.3 项目案例分享与反思 在本节中,我们将分享几个成功的项目案例,并进行反思总结。这些案例将展示如何将前面所学的Python技术运用于实际项目中,同时我们将讨论项目中的挑战和解决方案,以及从中得到…...

分布式主键 详解

文章目录 雪花算法结合分库分表的问题问题出现原因分析解决思路 分布式主键要考虑的问题主键生成策略雪花算法详解时间戳位问题工作进程位问题序列号位问题根据雪花算法扩展基因分片法 雪花算法结合分库分表的问题 问题出现 使用ShardingSphere框架自带的雪花算法生成分布式主…...

synchronzed为什么要升级为重量级锁,轻量级锁不好吗?

轻量级锁和重量级锁各有其适用场景和优缺点。轻量级锁旨在减少在无竞争情况下的同步开销,而重量级锁则在竞争激烈的情况下确保线程的同步。以下是为什么在某些情况下需要将轻量级锁升级为重量级锁的原因,以及轻量级锁的不足之处: 为什么需要…...

.NET 项目中发送电子邮件异步处理和错误机制的解决方案

在 .NET 中处理电子邮件,可以使用多种技术和库来实现高效的电子邮件发送、接收和管理。以下是一些常见的解决方案和最佳实践: 目录 1. 使用 SMTP 发送电子邮件 2. 使用 IMAP/POP3 接收电子邮件 3. 异步处理电子邮件 4. 处理大型邮件队列 5. 错误处…...

如何在银河麒麟操作系统上搭建 Electron (含 Electron 打包指南)

本次教程所用版本 Eletron版本:31.3.1 Electron-packager版本:17.1.2 VScode版本:1.92.0 Node版本:18.19.0 npm版本:10.2.3 前言: 随着跨平台应用开发的需求日益增长,Electron 和 Qt 成为…...

小怡分享之数据结构基础知识准备

前言: 🌈✨之前小怡给大家分享了JavaSE的知识,今天小怡要给大家分享一下数据结构基础知识。 一、初识集合框架 1.什么是集合框架 Java集合框架Java Collection Framework, 又称为容器container,是定义在Java.util 包…...

Linux安全与高级应用(三)深入探索MySQL数据库:安装、管理与安全实践

文章目录 深入探索MySQL数据库:安装、管理与安全实践MySQL数据库简介MySQL的安装与配置编译安装MySQL配置MySQL服务 MySQL数据库的基本操作数据库的创建与删除表的创建与管理数据记录的增删改查 MySQL用户管理与权限设置MySQL数据库的备份与恢复数据库备份数据库恢复…...

基于jsp的宠物领养与服务管理系统(源码+论文+部署讲解等)

博主介绍:✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍:我是程序员阿龙&#xff…...

基于STM32F407+NBIOT+华为云IOT平台设计的环境检测系统

基于STM32F407NBIOT华为云IOT平台设计的环境检测系统实现的功能: 【1】能够采集本地环境的温度、湿度、烟雾浓度,火光信息,在OLED显示屏上显示。 如果检测到烟雾、温度、火光超过阀值会触发蜂鸣器报警。 【2】能够通过NBIOT将本地设备采集的信…...

工具方法 - 如何表扬小孩子

赞扬小朋友的表现可以通过多种方法来进行,以鼓励他们的积极行为和努力,增强他们的自信心和动力。以下是一些有效的赞扬方法: 1. 具体表扬:指出具体的行为或成就,而不是泛泛地说“你很棒”。例如,“你今天很…...

【扒模块】DySample

逐行注释 import torch import torch.nn as nn import torch.nn.functional as F import warnings# 忽略警告信息,这通常用于开发过程中,避免警告干扰输出结果 warnings.filterwarnings(ignore)# 定义一个函数,用于对神经网络模块的权重进行…...

数学建模之数据分析【四】:变量及其分析

文章目录 一、单变量数据1.1 单变量数据1.2 单变量分析的要点: 二、双变量数据2.1 双变量数据2.2 双变量分析的要点 三、多元数据3.1 多元数据3.2 多元分析的要点 四、单变量,双变量和多变量数据之间的区别 公众号/小红书: 快乐数模 CSDN: 清上尘 本文&a…...

iOS ------ UIKit相关

UIView和CALayer UIView UIView表示屏幕上的一块矩形区域,它是基本上iOS中所有可视化控件的父类。UIView可以管理矩形区域里的内容,处理矩形区域的事件,包括子视图的管理以及动画的实现。 UIKit相关类的继承关系 UIView继承自UIResponde…...

24/8/9算法笔记 随机森林

"极限森林"(Extremely Randomized Trees,简称ERT)是一种集成学习方法,它属于决策树的变体,通常被归类为随机森林(Random Forest)的一种。极限森林的核心思想是在构建决策树时引入极端…...

如何在前后端分离项目中,使用Spring Security

使用 WebSecurityConfigurationAdapter 在前后端分离的架构中,通常使用 Token 进行认证和授权是一种常见的做法。Token 可以是 JSON Web Token(JWT),用于在客户端和服务器之间传递身份信息和访问控制信息。下面我将详细介绍如何在…...

c#怎么折叠代码快捷

在C#中,‌你可以使用快捷键来折叠或展开代码,‌以便更好地管理和浏览代码。‌以下是一些常用的快捷键:‌ 折叠所有方法:‌使用Ctrl M O。‌折叠或展开当前方法:‌使用Ctrl M M。‌展开所有方法:‌使用…...

数据库篇--八股文学习第十七天| 什么是慢查询?原因是什么?可以怎么优化?;undo log、redo log、binlog 有什么用?

1、什么是慢查询?原因是什么?可以怎么优化? 答: 数据库查询的执行时间超过指定的超时时间时,就被称为慢查询。 原因: 查询语句比较复杂:查询涉及多个表,包含复杂的连接和子查询&…...

插件、cookie存储,json,ajax详解

1.插件 下载地址:http://github.com/carhartl/jquery-cookie/zipball/v1.4.1 使用文档:jquery-cookie(github.com) 2.存储 初学前端用的是localStorage和sessionStorage,后来又引入了cookie进行存储。 localStorage使用如下 sessionStor…...

快速上手Spring Boot

快速上手Spring Boot (qq.com)...

思路超清晰的 LVS-NAT 模式实验部署

目录 一、实验原理 1、实验基础配置图 2、实验原理 二、实验环境准备 1、准备四台红帽9的主机 2、四台主机的基础配置 (1)client 1)配置主机名:client 2)配置ip:172.25.254.200 (2)lv…...

Android实时通信:WebSocket与WebRTC的应用与优化

文章目录 一、WebSocket在Android中的应用1.1 简介1.2 示例 二、WebRTC在Android中的应用2.1 简介2.2 示例 三、Android实时通信的优化策略3.1 网络优化3.2 延迟降低 四、Android实时通信的安全问题五、实时通信协议的比较六、总结 在现代移动应用中,实时通信已经成…...

力扣刷题之3131.找出与数组相加的整数I

题干描述 给你两个长度相等的数组 nums1 和 nums2。 数组 nums1 中的每个元素都与变量 x 所表示的整数相加。如果 x 为负数,则表现为元素值的减少。 在与 x 相加后,nums1 和 nums2 相等 。当两个数组中包含相同的整数,并且这些整数出现的频…...

非线性表之堆的实际应用和二叉树的遍历

目录 前言:前一篇我已经介绍过了二叉树和堆的介绍和相关代码的实现 一、堆的实现 1.1堆向上调整算法 1.2堆向下调整算法 二、堆的应用 2.1堆的排序 2.2TOP-K问题 三、二叉树的遍历 3.1 二叉树的创建 3.2遍历介绍 3.3前序遍历 3.4中序遍历 3.5后序遍历 …...

os.path库学习之splitext函数

os.path库学习之splitext函数 一、简介 os.path.splitext 是 Python 标准库 os.path 模块中的一个函数,用于将文件名分割成两部分:文件名和扩展名。这个函数非常有用,特别是在处理文件路径和文件扩展名时。 二、语法和参数 语法: os.path…...