mysql 连表查询

news2024/9/23 17:23:20

文章目录

  • 一、内连接
  • 二、外连接
    • 2.1 左外连接
    • 2.2 右外连接
  • 三、总结

写在前面

在MySQL中join操作被称为连接,作用是能连接多个表的数据(通过连接条件),从多个表中获取数据合并在一起作为结果集返回给客户端。即使用连接查询一条SQL搞定需求。

  • 多表操作是实际开发时经常遇到的解决问题的方案
  • 多表操作能够在数据库层就实现大量数据的组合或者筛选

在写sql查询的时候,用的最多的就是where条件查询,这种查询也叫内连查询inner join,当然还有外连查询outer join,左外连接,右外连接查询,常用在多对多关系中,那他们区别和联系是什么呢?

用于本文档演示的数据表准备

  • 建表语句
CREATE TABLE `a_table` (
  `a_id` int(11) NOT NULL,
  `a_name` varchar(10) DEFAULT NULL,
  `a_blogs` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8



CREATE TABLE `b_table` (
  `a_id` int(11) NOT NULL,
  `a_blogs` varchar(10) DEFAULT NULL,
  `a_url` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 表测试数据

mysql连表查询测试数据

一、内连接

连接结果仅包含符合连接条件的行组合起来作为结果集,参与连接的两个表都应该符合连接条件使用关键词:INNER JOIN 连接多张表
也就是返回两个表的交集(阴影)部分,如下图所示:

mysql连表查询内连接

内连接查询结果:

  • 从左表中取出每一条记录,去右表中与所有的记录进行匹配;
  • 匹配必须是某个条件是左表中与右表中相同,才会保留结果,否则不保留;

内连接关键字:

inner join on

内连接基本语法:

左表 [inner] join 右表 on 左表.字段 = 右表.字段;

内连接演示:

  • sql语句
select * from a_table a inner join b_table b on a.a_blogs = b.b_blogs;
  • 执行结果

mysql连表查询内连接测试

内连接注意事项:

  • 1、on 表示连接条件;条件字段代表相同的业务含义(即两个表中的某个字段是一样的业务含义)
  • 2、内连接可以没有连接条件,没有on之后的内容,这时候系统会保留所有结果(笛卡尔集)
  • 3、内连接可以使用where 代替 on,通常不用where,因为where没有on效率高

on指匹配到第一条成功的就结束,其他不匹配;若没有,不进行匹配,而where会一直匹配,进行判断

  • 4、通常使用字段别名,表别名在查询数据的时候,不同表有同名字段,这时候需要加上表名才能区分,而若表名太长,使用表别名若不想使用默认的字段名 可以通过[as] 设置字段别名

二、外连接

2.1 左外连接

左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL,如下图所示:

mysql连表查询左外连接

左外连接查询结果:

  • 以第一张表为基表 进行相关查询,取出里面的所有记录,然后每条与另外一张表进行连接,
  • 第一张表的内容不管能不能匹配上条件,最终都会保留;
  • 第二张表能匹配,正确保留,不能匹配其他表的字段都置空null。

左外连接关键字:

LEFT JOIN ON
LEFT OUTER JOIN ON

left join 是 left outer join 的简写,它的全称是左外连接,是外连接中的一种。

左外连接基本语法:

左表 left join 右表 on 左表.字段 = 右表.字段;

左外连接演示:

  • sql语句
select * from a_table a left join b_table b on a.a_blogs = b.b_blogs;
  • 执行结果

mysql连表查询左外连接测试

2.2 右外连接

与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL,如下图所示:

mysql连表查询右外连接

右外连接查询结果:

  • 以第二张表为基表 进行相关查询,取出里面的所有记录,然后每条与另外一张表进行连接,
  • 第二张表的内容不管能不能匹配上条件,最终都会保留;
  • 第一张表能匹配,正确保留,不能匹配其他表的字段都置空null。

右外连接关键字:

RIGHT JOIN ON
RIGHT OUTER JOIN ON

right join 是 right outer join 的简写,它的全称是右外连接,是外连接中的一种。

右外连接基本语法:

左表 RIGHT JOIN 右表 on 左表.字段 = 右表.字段;

右外连接演示:

  • sql语句
select * from a_table a right outer join b_table b  on a.a_blogs = b.b_blogs;
  • 执行结果

mysql连表查询左外连接测试

三、总结

  • 内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

  • 外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

  • 左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。

  • 右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。

  • 全外连接:左外连接 union 右外连接,Mysql 中暂不支持。

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

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

相关文章

Redis 主从 + 哨兵模式搭建

前言:以Linux环境为示例 一、整体架构(1主 2从 3哨兵) 二、redis 安装 1、安装路径:/usr/local/redis/redis-6382(可自行指定) 2、解压安装包: 直接解压:tar -axvf redis-5.0.…

国内可以使用的chatgpt站点,有多种工具可用

看到很多人在寻找国内可以使用的chatgpt站点,忍不住来给大家分享一波,这个相对而言还是挺好用的,不限制字数,每天都能白女票使用。看下面正文。 chatgpt的使用方法 在浏览器或者打开我的电脑,顶部车俞入 人工智能聊…

C++好难(5):内存管理

这一节学完,我们 C嘎嘎 就算是正式入门了,但是之后的课还会更上一阶d(ŐдŐ๑) 继续坚持! 【本节目标】 1. C/C内存分布 2. C语言中动态内存管理方式 3. C中动态内存管理 4. operator new与operator delete函数 5. new和delete的实现原…

【在线OJ项目】项目环境与项目演示

目录 一、项目环境 二、项目展示 项目Gitee地址:online-oj: 在线OJ项目实现了核心模块,后续添加竞赛、考试等 (gitee.com)https://gitee.com/PG1886/online-oj 一、项目环境 采用SpringBootSpringMVCMybatis进行服务器开发 前端采用HTMLCSSJS&#…

mysql 5.7.32安装及主从安装信息

最方便的 就是 直接使用docker容器 搭建一个比较方便 或者 直接使用yum源安装,说白了就是少踩坑。 或者 是直接使用 宝塔等工具帮忙,直接脚本跑 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 以下是内网两台机器安装的方法 1: 下…

【数据结构】ArrayList与顺序表

目录 1.List接口 2.线性表 3.顺序表 3.1常用方法 3.2常用方法的实现 4.ArrayList 4.1构造方法 4.2遍历 4.3扩容 4.4CVTE面试题:删除相同字符 5.ArrayList的具体实现 5.1洗牌算法 5.2杨辉三角 6.ArrayList的优缺点 1.List接口 List 接口继承于 Collec…

3 天,入门 TAURI 并开发一个跨平台 ChatGPT 客户端

TAURI 是什么 TAURI 是一个使用 Rust 编写的程序框架,它允许我们使用 Web 技术和 Rust 语言构建跨端应用。它提供了大量特性,例如系统通知、网络请求、全局快捷键、本地文件处理等,它们都可以在前端通过 JavaScript 便捷的调用。 TAURI 应用…

《精英的傲慢:好的社会该如何定义成功》笔记与摘录

目录 作者简介 书内容简介 经典摘录 1、现状与现象 2、什么是优绩至上原则 3、对优绩至上原则赞同与否的讨论 4、 优绩至上原则存在的争议点 5、 作为哲学家,桑德尔从道德哲学角度的思考 6、作者对优绩制的批判 7、流动性与平等的关系 8、我们该如何摆脱优…

MyCat分片-垂直分库

文章目录 需求场景一、环境准备二、实现1.MyCat—schema.xml文件配置2.MyCat—server.xml文件配置3.MyCat启动4.MyCat登录5.创建表结构及数据导入 三、全局表配置全局表配置 此文档来源于网络,如有侵权,请联系删除! 需求场景 在业务系统中,涉…

使用ChatGPT辅助学习——让你的学生主动找到学习的方法!

ChatGPT就像一座巨大的金矿,能挖到多少金子,完全取决于你的思维、认知和行动力。 当大部分人还在观望,或者拿着ChatGPT随便玩一玩的时候。 有的人,已经快速把它切入垂直领域,开始深耕。 如果你的孩子或者学生正在上初…

静态库和动态库的制作与使用

1.静态库的制作与使用 小知识:删除命令行,或者是配置好的路径之类的:退出编辑模式后:dd 保存并退出:退出编辑模式后,:wq (1)静态库的制作 1.首先生成你需要加入的文件的.O文件。使用如下代码 …

网络编程六--UDP服务器客户端

写在前面 UDP(User Datagram Protocol)称为用户数据报协议,是一种无连接的传输协议。 UDP的主要应用在即使丢失部分数据,也不影响整体效果的场景。例实时传输视频或音频时,即使丢失部分数据,也不会影响整…

C++11大杂烩

C11大杂烩 文章目录 C11大杂烩介绍语法统一的列表初始化:{}初始化initializer_list简化声明的方式autotypeid().name():获取类型名decltype nullptr范围for循环stl库中的一些变化arrayforward_list final和override右值引用和移动语义左值引用和右值引用 移动构造和…

有没有好用的UI在线设计工具?这5个设计师必备!

这篇文章介绍了 5 款在线UI设计工具,分别是即时设计、InVision Studio、Axure、Framer 和 Principle。其中,即时设计是一款次世代的在线协作UI设计工具,支持多人协同在线设计一键交付、插入交互式动画等功能,最近还更新了全球首款…

网络基础知识1—网络

文章目录 1.网络划分1.1局域网(内网)1.2广域网(公网) 2.网络的作用3.端口号3.1作用3.2两台主机中的进程传输数据3.3格式3.4注意 4.协议4.1概念4.2三要素4.3最终体现4.4作用 5.五元组5.1源IP5.2源端口5.3目的IP5.4目的端口5.5协议 …

MySQL中这14个神仙功能

1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中,名称不同的用户的具体名称有哪些? 具体sql如下: select name from user group by name;但如果想把name相同的c…

IO 流学习总结

一:IO 流的概述 1. 什么是 IO 流? 存储和读取数据的解决方法 I:input O:output 流:像水流一样传输数据 2. IO 流的作用? 用于读写数据(本地文件,网络) 3. IO 流按…

三年亏百亿仍要造“跑车”,哪吒还有几次试错?

文丨智能相对论 作者丨leo陈 燃油车时代,国产品牌没有一款真正意义上成功的“低价跑车”,那在新能源时代,“电”是否可以创造这种可能? 第一个交出答卷的是哪吒汽车。不久前,哪吒发布首款纯电跑车“哪吒GT”&#x…

3个方法提高电脑运行速度,亲测有效!

案例:怎样提高电脑运行的速度? 【随着使用时间的增长,我的电脑运行速度越来越慢,这样我感到十分不方便和烦恼。有什么办法可以提高电脑的运行速度吗?】 在日常使用电脑过程中,我们难免会遇到电脑运行缓慢…

【C++】第13章: 类继承

文章目录 第十三章 类继承13.1 一个简单的基类13.1.1 派生一个类13.1.2 构造函数:访问权限的考虑13.1.3 使用派生类13.1.4 派生类和基类之间的特殊关系 13.2 继承:is-a关系13.3 多态公有继承13.4 静态联编与动态联编13.4.1 指针和引用类型的兼容性13.4.2…