SQL命令详解之多表查询(连接查询)

目录

1 简介

2 内连接查询

2.1 内连接语法

2.2 内连接练习

3 外连接查询

3.1 外连接语法

3.2 外连接练习

4 总结


1 简介

连接的本质就是把各个表中的记录都取出来依次匹配的组合加入结果集并返回给用户。我们把 t1 和 t2 两个表连接起来的过程如下图所示:


在 MySQL 中多表查询分为连接查询和子查询,而连接查询又分为内连接查询和外连接查询,外连接查询的方式有左外连接查询和右外连接查询。

2 内连接查询

2.1 内连接语法

内连接查询分为隐式内连接查询和显式内连接查询,表示查询 A 集合和 B 集合的交集。


语法:

-- 隐式内连接查询
SELECT 字段列表 FROM 表1,表2… WHERE 条件;
-- 显示内连接查询
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;

2.2 内连接练习

练习一:查询每名同学的姓名、成绩

student 表:
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
| 01   | 赵雷   | 1990-01-01 | 男    |
| 02   | 钱电   | 1990-12-21 | 男    |
| 03   | 孙风   | 1990-05-20 | 男    |
| 04   | 李云   | 1990-08-06 | 男    |
| 05   | 周梅   | 1991-12-01 | 女    |
| 06   | 吴兰   | 1992-03-01 | 女    |
| 07   | 郑竹   | 1989-07-01 | 女    |
| 08   | 王菊   | 1990-01-20 | 女    |
+------+--------+------------+-------+

score 表:
+------+------+---------+
| s_id | c_id | s_score |
+------+------+---------+
| 01   | 01   |      80 |
| 01   | 02   |      90 |
| 01   | 03   |      99 |
| 02   | 01   |      70 |
| 02   | 02   |      60 |
| 02   | 03   |      80 |
| 03   | 01   |      80 |
| 03   | 02   |      80 |
| 03   | 03   |      80 |
| 04   | 01   |      50 |
| 04   | 02   |      30 |
| 04   | 03   |      20 |
| 05   | 01   |      76 |
| 05   | 02   |      87 |
| 06   | 01   |      31 |
| 06   | 03   |      34 |
| 07   | 02   |      89 |
| 07   | 03   |      98 |
+------+------+---------+

Course 表:
+------+--------+------+
| c_id | c_name | t_id |
+------+--------+------+
| 01   | 语文   | 02   |
| 02   | 数学   | 01   |
| 03   | 英语   | 03   |
+------+--------+------+

编写一个 SQL 查询 学生姓名、课程名、成绩

mysql> SELECT
    ->     t2.s_name,
    ->     t3.c_name,
    ->     t1.s_score
    -> FROM
    ->     score t1
    ->     JOIN student t2 ON t1.s_id = t2.s_id
    ->     JOIN Course t3 ON t1.c_id = t3.c_id;
    
+--------+--------+---------+
| s_name | c_name | s_score |
+--------+--------+---------+
| 赵雷   | 语文   |      80 |
| 赵雷   | 数学   |      90 |
| 赵雷   | 英语   |      99 |
| 钱电   | 语文   |      70 |
| 钱电   | 数学   |      60 |
| 钱电   | 英语   |      80 |
| 孙风   | 语文   |      80 |
| 孙风   | 数学   |      80 |
| 孙风   | 英语   |      80 |
| 李云   | 语文   |      50 |
| 李云   | 数学   |      30 |
| 李云   | 英语   |      20 |
| 周梅   | 语文   |      76 |
| 周梅   | 数学   |      87 |
| 吴兰   | 语文   |      31 |
| 吴兰   | 英语   |      34 |
| 郑竹   | 数学   |      89 |
| 郑竹   | 英语   |      98 |
+--------+--------+---------+

3 外连接查询

3.1 外连接语法

外连接查询分为左外连接查询和右外连接查询。

  1. 左外连接查询:相当于查询 A 表所有数据和交集部分数据。

  2. 右外连接查询:相当于查询 B 表所有数据和交集部分数据。


语法:

-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

3.2 外连接练习

练习一:连续出现的数字

表:Logs
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| num         | varchar |
+-------------+---------+
在 SQL 中,id 是该表的主键。
id 是一个自增列。

找出所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列。
结果格式如下面的例子所示:

示例 1:
输入:
Logs 表:
+----+-----+
| id | num |
+----+-----+
| 1  | 1   |
| 2  | 1   |
| 3  | 1   |
| 4  | 2   |
| 5  | 1   |
| 6  | 2   |
| 7  | 2   |
+----+-----+
输出:
Result 表:
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+
解释:1 是唯一连续出现至少三次的数字。

找出所有至少连续出现三次的数字:

select 
    distinct t1.num as ConsecutiveNums
from
    Logs t1 
leftjoin
    logs t2 on t1.num = t2.num and t1.id = t2.id-1
leftjoin
    logs t3 on t1.num = t3.num and t2.id = t3.id-1
where t3.num isnotnull;

4 总结

本文介绍了MySQL中的连接查询,包括内连接和外连接的使用方法。内连接查询用于获取两个表中交集部分的数据,分为隐式内连接和显式内连接两种方式。通过内连接,我们可以实现多表联合查询,如查询学生的姓名、课程名称和成绩。外连接查询分为左外连接和右外连接,左外连接返回左表的所有数据和右表匹配的数据,而右外连接则返回右表的所有数据和左表匹配的数据。通过外连接,我们能够处理一些不完全匹配的数据,比如查找连续出现至少三次的数字。通过本文的练习,读者可以掌握多表查询的基本技巧,并理解连接查询的实际应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二、QT和驱动模块实现智能家居-----问题汇总1

1、文件地址改变后必须在QT下更改地址 2、指定了QT内Kits下的Sysroot头文件地址,但是还是找不到头文件: 3、提示无法执行QT程序:先干掉之前的QT程序 ps //查看程序PIDkill -9 PID 4、无法执行QT程序 1)未设置环境变量 …

CentOS7安装Mysql5.7(ARM64架构)

1.第一步:下载 arm 版本离线 mysql 5.7 安装包 arm 版本离线 mysql 5.7 安装包 2.第二步:查询并卸载 CentOS 自带的数据库 Mariadb 找到数据库 mariadb,如果有会给出一个结果,结果是 mariadb 名称 rpm -qa | grep mariadb 如果…

AI数字人口播源码开发全解析

——源码即未来:揭秘千亿级市场的技术底层逻辑 一、为什么源码开发是数字人赛道的“核武器”? 2025年全球AI数字人市场规模预计突破6402.7亿元,而源码开发能力正成为企业竞争的核心壁垒。与标准化SaaS工具相比,源码开发赋予三大…

Versal - XRT(CPP) 2024.1

目录 1.简介 2. XRT 2.1 XRT vs OpenCL 2.2 Takeways 2.3 XRT C APIs 2.4 Device and XCLBIN 2.5 Buffers 2.5.1 Buffer 创建 2.5.1.1 普通 Buffer 2.5.1.2 特殊 Buffer 2.5.1.3 用户指针 Buffer 2.5.2 Data Transfer 2.5.2.1 read/write API 2.5.2.2 map API 2…

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推荐指数:#paper/⭐⭐#​ 动机 本文探讨了图神经网络(GNN)在迁移学习中“预训练-微调”框架的局限性及改进方向。现有方法通过预训练&#xff08…

微信小程序上如何使用图形验证码

1、php服务器生成图片验证码的代码片段如下: 注意红框部分的代码,生成的是ArrayBuffer类型的二进制图片 2、显示验证码 显示验证码,不要直接image组件加上src显示,那样拿不到cookie,没有办法做图形验证码的验证&…

MAX232数据手册:搭建电平转换桥梁,助力串口稳定通信

在现代电子设备的通信领域,串口通信因其简单可靠而被广泛应用。MAX232 芯片作为串口通信中的关键角色,发挥着不可或缺的作用。下面,我们将依据提供的资料,深入解读 MAX232 芯片的各项特性、参数以及应用要点。 一、引脚说明 MAX2…

HTTP 与 HTTPS 协议:从基础到安全强化

引言 互联网的消息是如何传递的? 是在路由器上不断进行跳转 IP的目的是在寻址 HTTP 协议:互联网的基石 定义 HTTP(英文:HyperText Transfer Protocol,缩写:HTTP),即超文本传输协…

记录linux安装mysql后链接不上的解决方法

首先确保是否安装成功 systemctl status mysql 如果没有安装的话,执行命令安装 sudo apt install mysql-server 安装完成后,执行第一步检测是否成功。 通常初始是没有密码的,直接登陆 sudo mysql -u root 登录后执行以下命令修改密码&…

精讲坐标轴系统(Axis)

续前文: 保姆级matplotlib教程:详细目录 保姆级seaborn教程:详细目录 seaborn和matplotlib怎么选,还是两个都要学? 详解Python matplotlib深度美化(第一期) 详解Python matplotlib深度美化&…

OSPF路由ISIS路由与路由学习对比(‌OSPF vs ISIS Routing Learning Comparison)

OSPF路由ISIS路由与路由学习对比 1.OSPF 路由学习规律 OSPF使用链路状态数据库(Link State Database)来存储网络拓扑信息。每个OSPF路由器通过交换链路状态更新(Link State Updates)来了解整个网络的拓扑,并根据收到…

【基于Mesh组网的UWB技术讨论】

基于Mesh组网的UWB技术讨论 Mesh 组网无线Mesh与无线中继的区别 基于Mesh拓扑的UWB技术可行性星型拓扑 / Mesh拓扑的UWB技术比较 Mesh 组网 Mesh(网格)是一种无中心、自组织的高度业务协同的网络。通常分为无线Mesh和有线Mesh,但在实际应用场景,有线Mes…

拼电商客户管理系统

内容来自:尚硅谷 难度:easy 目 标 l 模拟实现一个基于文本界面的 《 拼电商客户管理系统 》 l 进一步掌握编程技巧和调试技巧,熟悉面向对象编程 l 主要涉及以下知识点: 类结构的使用:属性、方法及构造器 对象的创建与…

day51 shell

在终端提示输入一个成绩,通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 提示并输入一个文件 判断文件是否存在 如果存在,判断文件是否为普通文件 如果是,则将 “hello world”写…

Docker 模拟 kubernetes 的 pod

1.安装Docker 环境 1.安装 epel 源 yum install -y epel-release 它是为了给我们的bridge utils 提供我们对应的 源支持 2.安装 bridge-utils yum install -y bridge-utils 3.加载 br_netfilter 模块 modprobe br_netfilter echo br_netfilter >> /etc/modules-l…

Hugging Face 推出 FastRTC:实时语音视频应用开发变得得心应手

估值超过 40 亿美元的 AI 初创公司 Hugging Face 推出了 FastRTC,这是一个开源 Python 库,旨在消除开发者在构建实时音频和视频 AI 应用时的主要障碍。 "在 Python 中正确构建实时 WebRTC 和 Websocket 应用一直都很困难,"FastRTC…

Spark核心之02:RDD、算子分类、常用算子

spark内存计算框架 一、目标 深入理解RDD弹性分布式数据集底层原理掌握RDD弹性分布式数据集的常用算子操作 二、要点 ⭐️1. RDD是什么 RDD(Resilient Distributed Dataset)叫做**弹性分布式数据集,是Spark中最基本的数据抽象&#xff0c…

Redis中常见的延迟问题

使用复杂度高的命令 Redis提供了慢日志命令的统计功能 首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近1000条慢日志记录: # 命令执行超过…

LangGraph实战:构建智能文本分析流水线

LangGraph实战:构建智能文本分析流水线 1. 智能文本分析 LangGraph是基于图结构的工作流开发框架,通过节点函数和条件流转实现复杂业务逻辑。四大核心能力: 1.1 状态容器 统一管理流程执行上下文,支持JSON序列化存储 1.2 智能路由 基于条件判断实现动态分支跳转 1.3 可…

【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…