mysql多表查询

Mysql 多表查询详解 纸上得来终觉浅 1.前言:上篇讲到Mysql中关键字执行的顺序,只涉及了一张表;实际应用大部分情况下,查询语句都会涉及到多张表格 : 1)多表连接有哪些分类; 2)针对这些分类有哪些连接方法? 3)这些连接方法分别作用于哪些应用场景? 这篇针对这三个点通过实例来讲述,目的是穷尽所有的场景和所有的方法,并且对每个方法的使用做实例。 2.假设有两张表格A和B,把表格当作一个集合,那么表格中 阅读详情

union, union all

-- 第一张表与第二张表纵向地合并,有去重的功能
MariaDB [hellodb]> select * from teachers
    -> union
    -> select stuid,name,age,gender from students;

MariaDB [hellodb]> select * from teachers union select * from teachers;

-- 纵向合并不去重
MariaDB [hellodb]> select * from teachers union all select * from teachers;

cross join

-- 交叉连接(横向笛卡尔)
MariaDB [hellodb]> select * from students cross join select * from teachers;

inner join

MariaDB [hellodb]> select * from students inner join teachers on students.teacherid=teachers.tid;
MariaDB [hellodb]> select s.stuid,s.name,s.age,t.tid,t.name,t.age from students s inner join teachers t on s.teacherid=t.tid;
MariaDB [hellodb]> select s.stuid,s.name,s.age,t.tid,t.name,t.age from students s,teachers t where s.teacherid=t.tid;
MariaDB [hellodb]> select s.stuid,s.name student_name,s.age student_age,t.tid,t.name teacher_name,t.age teacher_age from students s inner join teachers t on s.teacherid=t.tid and s.age > 30;

left [outer] join

-- 左边表全要,右边的表取left_name 与 right_name的交集 (left outer join)
MariaDB [hellodb]> select s.stuid,s.name,s.age,t.tid,t.name,t.age from students as s left join teachers as t on s.teacherid=t.tid;
MariaDB [hellodb]> select s.stuid,s.name,s.age,t.tid,t.name,t.age from students as s left outer join teachers as t on s.teacherid=t.tid;

right [outer] join

右边的表全要,左边的表取left_name与right_name的交集 (right outer join)

MariaDB [hellodb]> select s.stuid,s.name,s.age,s.teacherid,t.tid,t.name,t.age from students s right outer join teachers t on s.teacherid=t.tid;
A-(A与B的交集)
MariaDB [hellodb]> select s.stuid,s.name,s.age,s.teacherid,t.tid,t.name,t.age from students as s left outer join teachers as t on s.teacherid=t.tid where t.tid is null;
B-(A与B的交集)
MariaDB [hellodb]> select s.stuid,s.name,s.age,s.teacherid,t.tid,t.name,t.age from students s right outer join teachers t on s.teacherid=t.tid where s.teacherid is null;
A 并 B(full outer join)

MariaDB [hellodb]> select s.stuid,s.name,s.age,s.teacherid,t.tid,t.name,t.age from students s left outer join teachers t on s.teacherid=t.tid
    -> union
    -> select s.stuid,s.name,s.age,s.teacherid,t.tid,t.name,t.age from students s right outer join teachers t on s.teacherid=t.tid;
(A并B)-(A交B)
MariaDB [hellodb]> select * from (select s.stuid,s.name s_name,s.teacherid,t.tid,t.name t_name from students s left outer join teachers t on s.teacherid=t.tid union select s.stuid,s.name s_name,s.teacherid,t.tid,t.name t_name from students s right outer join teachers t on s.teacherid=t.tid) as a where a.teacherid is null or a.tid is null;

自连接

MariaDB [hellodb]> select * from emp;
+------+----------+--------+
| id   | name     | leader |
+------+----------+--------+
|    1 | zhangsan |   NULL |
|    2 | lisi     |      1 |
|    3 | wangwu   |      2 |
|    4 | zhaoliu  |      3 |
+------+----------+--------+

MariaDB [hellodb]> select e.name,l.name from emp e left outer join emp l on e.leader=l.id;
+----------+----------+
| name     | name     |
+----------+----------+
| lisi     | zhangsan |
| wangwu   | lisi     |
| zhaoliu  | wangwu   |
| zhangsan | NULL     |
+----------+----------+

三张表内连接

MariaDB [hellodb]> select  st.stuid,st.name,sc.courseid,co.course,sc.score from students st inner join scores sc on st.stuid=sc.stuid inner join courses co on co.courseid=sc.courseid;
+-------+-------------+----------+----------------+-------+
| stuid | name        | courseid | course         | score |
+-------+-------------+----------+----------------+-------+
|     1 | Shi Zhongyu |        2 | Kuihua Baodian |    77 |
|     1 | Shi Zhongyu |        6 | Weituo Zhang   |    93 |
|     2 | Shi Potian  |        2 | Kuihua Baodian |    47 |
|     2 | Shi Potian  |        5 | Daiyu Zanghua  |    97 |
|     3 | Xie Yanke   |        2 | Kuihua Baodian |    88 |
|     3 | Xie Yanke   |        6 | Weituo Zhang   |    75 |
|     4 | Ding Dian   |        5 | Daiyu Zanghua  |    71 |
|     4 | Ding Dian   |        2 | Kuihua Baodian |    89 |
|     5 | Yu Yutong   |        1 | Hamo Gong      |    39 |
|     5 | Yu Yutong   |        7 | Dagou Bangfa   |    63 |
|     6 | Shi Qing    |        1 | Hamo Gong      |    96 |
|     7 | Xi Ren      |        1 | Hamo Gong      |    86 |
|     7 | Xi Ren      |        7 | Dagou Bangfa   |    83 |
|     8 | Lin Daiyu   |        4 | Taiji Quan     |    57 |
|     8 | Lin Daiyu   |        3 | Jinshe Jianfa  |    93 |
+-------+-------------+----------+----------------+-------+

子查询

-- 大于平均年龄的学生信息
MariaDB [hellodb]> select * from students where age > (select avg(age) from students);

-- 将老师表的平均年龄的值赋给25号学生
MariaDB [hellodb]> update students set age=(select avg(age) from teachers) where stuid=25;
MySQL多表查询 因此他关注的是内部的,共同的,共享的数据部分。注意:其实在实际开发者使用一种外连接就可以了,一般使用的较多的是左外连接,但其实看个人习惯即可,因为左外连接与右外连接一样,其实就是把表的摆放位置调转一下就可以了。1、上述可以发现,这里存在一个坑,在我的数据表中,我的id是int类型,name是varchar类型,他们两个数据格式不一样,但执行sql却未报错,这是什么原因呢?去除重复行的前提是结果集中所有列的组合是唯一的【注意这里的组合,组合指的是一行,这一行包含了所有查询出来的字段】 阅读详情

相关推荐

手把手教你为STM32设备生成自定义MAC地址(基于芯片ID的5种算法对比)

本文详细介绍了基于STM32芯片ID生成自定义MAC地址的5种算法,包括直接截取、异或折叠、CRC32哈希、自定义混合运算及SHA-256摘要。通过对比分析各算法的计算复杂度、唯一性及适用场景,帮助嵌入式开发者根据项目规模与资源,选择最合适的方案,确保设备MAC地址的唯一性与合规性。

weixin_29170327的博客 527

mysql 查询存在A表中而不存在B表中的数据

有两张表,学生信息表infolist: 学生姓名表namelist: 现要查询出,存在infolist中,而不存在namelist中的学生,语句如下: select * from infolist where (select count(1) as num from namelist where infolist.name = namelist.name) = 0; 查询结...

weixin_30784945的博客 3408

LABVIEW学习之MODBUS-TCP通讯

LABVIEW学习之MODBUS-TCP通讯 1,MODBUS-TCP通讯介绍: MODBUS通讯是工业上面经常用到的一种通讯协议。该协议的原理及介绍不在此累述,下面直接介绍LABVIEW对此协议的应用。 2,MODBUS通讯所需的函数: 安装了DSC模块之后可以在数据通信内找到相关函数 3 ,主VI 主要思路就是使用状态机来进行连接 读取 写入 断开。使用枚举类型来选择状态: 1,连接 2,写入多个M继电器: 3,写入单个M继电器 4,写入双字节D...

风动9527的博客 2万+

MySQL 多表查询

此为MySQL专栏文章之一,讲解MySQL多表查询。多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。

Java 技术专栏,从入门到精通,熟悉企业级开发 1万+

M2DGR数据集在主流SLAM框架中的实战配置指南:从ORB-SLAM到FAST-LIO的完整流程

本文提供了M2DGR多传感器数据集在主流SLAM框架中的实战配置指南。详细介绍了从ORB-SLAM、VINS-Mono等视觉/视觉惯性框架,到A-LOAM、FAST-LIO等激光/激光惯性框架的完整配置流程、参数调整要点及常见问题解决方案。通过实际测试对比,分析了各算法在M2DGR数据集上的表现,为机器人定位与建图研究提供了宝贵的实战经验。

k9l0m1的博客 481

抖音自定义卡片链接(图文链接)

抖音自定义可以自定义标题,打开链接,和展示图片 效果 主要代码 public void sendMessage(String conversationId, Object aBaseContent) throws Exception { // C233282u5.LIZIZ.LIZ().LIZIZ(LIZ).LIZ(obtain).LIZ(hLn).LIZ((AbstractC59811HHc) new H9Q()); Object HOa = ReflectionUtil

傅恒的博客 4140

【MySQL】不就是多表查询

嗨!小伙伴们大家好呀,忙碌的一周就要开始!在此之前我们学习的MySQL数据库的各种操作都是在一张表之中,今天我们学习要对多张表进行相关操作,相比较于单一的表来说,多张表操作相对复杂一些,我相信只要认真学习多表查询也不再话下!项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对一(多对一)一对多多对多概述: 指从多张表中查询数据,多表查询就是要消除笛卡尔积。

super大雄的博客 7499

华为AR6140E/S5735设备密码策略配置全攻略:从复杂度到锁定机制

本文详细介绍了华为AR6140E/S5735设备的密码策略配置方法,涵盖密码复杂度、时效性和防护性三大核心维度。通过具体的CLI命令示例,指导管理员如何设置密码长度、字符组合、有效期及登录失败锁定等安全机制,为企业网络提供全面的用户名密码防护策略。

weixin_30836759的博客 531

MySQL- 多表查询(上)

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库

一起努力共同进步,为了未来一起奋斗吧! 4439

从 SAP Gateway 旧 add-ons 卸载到 SAP S/4HANA 转换的清理路线

摘要: SAP Gateway系统的维护难点往往源于历史遗留组件的堆积,而非OData服务本身的复杂性。早期系统为支持多种服务类型而安装的各类add-ons(如IW_SCS、IW_CNT、GW_CORE等),随着系统升级和团队更替逐渐成为技术负债。自SAP NetWeaver 7.40起,核心功能已整合至SAP_GWFND组件,使架构显著简化。在向S/4HANA迁移时,需重点清理已废弃的add-ons(如IW_SCS、IW_GIL等),但必须谨慎验证其关联服务是否仍被调用。组件清理需结合系统日志和调用链分析

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 423

YOLOv12改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制

这篇文章带来一个经典注意力模块的汇总,虽然有些模块已经发布很久了,但后续的注意力模块也都是在此基础之上进行改进的,对于初学者来说还是有必要去学习了解一下,以加深对模块,模型的理解。

Limiiiing的博客 1509

【MySQL基础教程】多表查询

本文为【MySQL基础教程】多表查询相关知识,下边将对多表关系,多表查询概述,内连接,外连接,自连接,子查询,多表查询案例等进行详尽介绍~

小新要变强的博客 3047

Linux性能调优之CPU时间分布(亲和性、带宽、权重)配置

带宽权重亲和性进程级别Cgroup-v2服务级别systyemd我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼·黑塞《德米安》

山河已无恙 1712

MYSQL多表查询

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。

weixin_42894555的博客 4631

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MySQL的多表查询

MySQL的多表查询

weixin_55734444的博客 4574

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【MySQL】多表查询

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一)、多对多、一对一 的关系,有时需要通过这些关系查询另一张表的数据,这时就需要进行多表查询

m0_72532428的博客 2158

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【MySQL】多表操作 —— 多表查询

MySQL 有时在信息查询时需要进行对表自身进行关联查询,即一张表自己和自己关联,一张表当成多张表使用。子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,通俗一点就是包含。多表查询就是同时查询两个或两个以上的表,因为有的时候用户在查看数据的时候,需要显示的数据来自多张表。在子查询中,有一些常用的逻辑关键字,这些关键字可以提供更丰富的查询功能。对于联合查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。注意:交叉连接查询会产生很多错误的冗余数据。

m0_72516377的博客 1389

MySQL 多表查询详解

本文系统讲解MySQL多表查询技术,主要内容包括:1)三种多表关系(一对多、多对多、一对一)及其实现方式;2)多表查询方法,重点介绍连接查询(内连接、外连接、自连接)、联合查询和子查询;3)通过示例代码演示如何避免笛卡尔积,正确关联多表数据。文章强调在实际业务中,合理设计表关系和选择查询方法对数据提取效率至关重要。

2301_80204744的博客 2170

MySQL多表查询小总结

作为MySQL数据库的初学者,多表查询的知识点多,内容复杂,很令人头大。这篇文章作为总结,以案例的形式,供大家理解和记忆。 目录 概述 一、内连接 概述 多表查询主要分以下两个方面: 一、连接查询 1.内连接 2.外连接 3.自连接 二、子查询 1.标量子查询 2.列子查询 3.行子查询 4.表子查询 我们就用这样的两张学生选课信息表格作为数据 studen...

qq_63708623的博客 5075

MySQL之多表查询

指从多张表中查询数据子查询(Subquery)是在一个 SQL 查询中嵌套的另一个查询,它可以出现在SELECTINSERTUPDATEDELETE语句的内部,或者用于WHEREFROMHAVING等子句中。

gege_0606的博客 1545

MySQL——多表查询

摘要:本文介绍了数据库表关系设计和多表查询方法。表关系分为一对多(部门-员工)、多对多(学生-课程)和一对一(用户-详情)三种,分别通过外键和中间表实现。多表查询包括内连接(显式/隐式)、外连接(左/右)和自连接,需注意消除笛卡尔积。联合查询使用UNION/UNION ALL合并结果集。子查询根据返回结果分为标量、列、行和表子查询,可嵌套在SELECT/WHERE/FROM等语句中实现复杂查询。合理使用这些方法能有效处理多表数据关联查询需求。

m0_73128353的博客 1105

MySQL数据库——多表查询

MySQL中的多表查询是指在一个查询中同时使用两个或多个表,通过某种关系将它们连接起来,以检索所需的数据。多表查询在数据库操作中非常常见,尤其是在处理复杂的数据关系时。简单讲就是:多表查询是指从多个表中检索数据。当你需要从多个表中获取信息并将它们组合在一起时,可以使用多表查询。

sakurapaid的博客 2446
上一篇: Mysql单表查询
下一篇: 视图函数存储过程和触发器和用户管理
studywinwin
博客等级 码龄7年 18粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值