MySQL多表查询操作

news2024/12/23 15:32:04

文章目录

  • 前言
  • 内连接
    • 表别名
  • 外连接
    • 左外连接
    • 右外连接
    • 全外连接
  • 总结

前言

JOIN 表示连接,inner表示内连接,outer表示外连接,缺省情况是内连接。
ON后面接<连接条件>

内连接

默认的表数据连接是内连接,只会查询出满足连接条件的行

语句格式FROM 表1 [inner] JOIN 表2 ON <连接条件>
在这里插入图片描述
表X和Y内连接结果

SELECT  a, X.b, Y.b, c 
FROM X  
JOIN Y  
ON X.b=Y.b;

在这里插入图片描述
一张表和自身连接。必须给表其别名

• 【例】查询与C语言在同一出版社的图书信息
分析:C语言一书在Book表中,与它在同一出版社的图书也在Book表中。二者通过publish相等进行连接

SELECT BookW.* FROM Book BookC 
JOIN Book BookW 
ON BookC.publish=BookW.publish 
WHERE BookC.name='C语言' 
AND BookW.name<> 'C语言';

• 内连接的特点:只会保留满足连接条件的数据到连接结果中

表别名

通过表别名简化查询语句,方便多表查询的编写
表别名一般是表的首字母

【例】查询员工名字,工作地点,部门名字
emp表内字段:ename,job,deptid
dept表内字段:deptid,dname

SELECT ename,job,dname
FROM emp e,dept d
WHERE e.deptid=d.deptid;

【例】写一个查询,显示所有员工姓名,部门编号,部门名称。
emp表内字段:ename,deptid
dept表内字段:deptid,dname

SELECT ename,d.deptid,dname
FROM emp e,dept d
WHERE e.deptid=d.deptid;

先要确定出查询数据来自几个表SELECT
在FROM把这多个表列出来,别名加空格起上
然后写连接条件WHERE
最后写其他条件AND

【例】查询在HK的员工编号,姓名,部门编号,工作地点
有两个表,分别是emp员工表与dept部门表
emp表内字段:empid,ename,deptid
dept表内字段:deptid,loc

SELECT empid,ename,emp.deptid,loc 
FROM emp,dept
WHERE emp.deptid=dept.deptid
AND loc='HK';

【例】查询工作在HK的员工姓名,职位,部门名字,工资等级,按工资等级升序排列

这里用到了三个表,但多于两个表时,也是拆成两两连接
emp表内字段:empid,ename,deptid,sal
dept表内字段:deptid,loc,empid
salgrade表内字段:grade,losal,hisal

SELECT ename,job,dname,grade
FROM emp e,dept d,salgrade s
WHERE e.empid=d.empid
AND e.sal BETWEEN s.losal AND s.hisal 
AND loc = 'HK'
ORDER BY grade;

外连接

和内连接相对的就是外连接。

外连接的特点:内连接只会查询出满足连接条件的行,外连接也会把不满足连接条件的数据显示到连接结果中。

外连接分类:

左外连接

表位置在左侧用左外连接

语法格式:FROM 表1 LEFT JOIN 表2 ON <连接条件>

LEFT JOIN表示左外连接

左外连接以FROM子句中的左边表为基准表,把左侧数据都查出来,无论是否满足连接条件

【例】表 X 和 Y 进行左外连接语句及连接结果

SELECT a,X.b,Y.b,c 
FROM x left outer 
JOIN y ON x.b=Y.b;

在这里插入图片描述
在连接过程中,左侧表一的元组 r 如果不能满足连接条件,r 保留在连接的结果中
在连接结果中,和 r 对应的表二的例值用NULL来代替

【例】使用左连接,查询每个学生的姓名,班长姓名,没有班长的King(班主任)也要显示出来。

stu表内字段:sname,mgr,stuid

SELECT s.sname,m.sname
FROM stu s left JOIN stu m
ON s.mgr=m.stuid;

右外连接

表位置在右侧用右外连接

语法格式:FROM 表1 RIGHT JOIN 表2 ON <连接条件>

右外连接以FROM子句中的右边表为基准表,把右侧数据都查出来,无论是否满足连接条件

【例】表 X 和 Y 进行右外连接语句及连接结果

SELECT a, X.b, Y.b, c 
FROM X RIGHT 
JOIN Y ON X.b=Y.b;

在这里插入图片描述
右侧表Y的元组(3,Q),虽未能在表X中找到相匹配的元组,单保留在结果当中
同时 a,X.b 的值用NULL填充

【例】使用右连接,查询每个学生的姓名,班长姓名,没有班长的King(班主任)也要显示出来。

stu表内字段:sname,mgr,stuid

SELECT s.sname,m.sname
FROM stu m right JOIN stu s
ON s.mgr=m.stuid;

全外连接

union 合并,把左外连接和右外连接连在一起

语法格式:FROM 表1 FULL [OUTER] JOIN 表2 ON <连接条件>

【例】表 X 和 Y 进行右外连接语句

SELECT a, X.b, Y.b, c 
FROM X FULL OUTER 
JOIN Y ON X.b=Y.b;

【例】查询所有读者借阅情况(包括没借阅图书的读者),显示读者编号,读者姓名,图书编号和书名。

SELECT R.reader_ID, R.name, B.book_ID, B.name 
FROM Reader AS R LEFT JOIN Borrow 
AS BW 
ON R.reader_ID=BW.reader_ID LEFT 
JOIN Book AS B ON B.book_ID=BW.book_ID;

总结

如果查询的数据超过两个表,那么就需要多表查询

当多于两个表时,拆分即可,两两连接

在from中,列出多个表名字,逗号分割

在where语句中,指定连接条件

在写多表连接时,如果语句中出现两个表都存在的列,需要加上表名前缀(否则不知道哪个表的)

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

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

相关文章

【C++进阶】继承详解

文章目录 前言一、继承的概念及定义1.概念2.继承定义定义格式继承关系和访问限定继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承1.单继承与多继承2.菱…

【Lychee图床】本地电脑搭建私人图床,公网远程访问

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转发自CSDN风浪越大%鱼越贵的文章&#xff1a;Lychee图床 - 本地配置属于自己的相册管理系统并远…

快速入手光学字符识别控件Aspose.OCR!如何从PDF中提取文本

Aspose.OCR是一款字符识别组件&#xff0c;它使得开发人员可以添加OCR功能到他们的ASP.NET Web应用程序、web服务和windows应用程序中。它提供了一个简单的类集用于控制字符识别。Aspose.OCR目的是为那些需要在他们自己的应用程序中使用图像&#xff08;BMP和TIFF&#xff09;的…

软件设计师计算机系统知识点笔记大总结

数据寄存器是一个中转站 指令寄存器 ir 保存暂存指令&#xff08;操作码加地址吗等于指令&#xff09; 地址寄存器 保存当前cpu所访问的内存单元地址 程序计数器 保存的是下一条指令的地址 状态寄存器 标志运算的结果 类似 0&#xff08;&#xff09;状态寄存器是运算器中的部件…

Ansible Automation Platform - 用 API 访问 Ansible Automation Platform

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 Ansible Automation Platform 2.3 的环境中验证 文章目录 AAP 的 API 索引Host 主机列表 API通过 API 操作 Ansible Automation Platform 说明&#xff1a;以下命令中 mycontroller-aap.apps-crc.t…

论文阅读-17-Deep Long-Tailed Learning: A Survey---3.3 Module Improvement

文章目录 1. Representation Learning1.1 Metric learning(1) large margin local embedding LMLE①##### ②##### ③ (2) Range loss(3) CRL(4) KCL(5) Hybrid(6) PaCo(7) DRO-LT 1.2 Sequential training(1) HFL(2) Unequal-training 1.3 Prototype learning(1) OLTR(2) IEM …

PPT背景图片怎么设置?4个详细教程在这!

案例&#xff1a;PPT背景图片怎么设置&#xff1f; 【因为论文答辩&#xff0c;最近需要制作PPT&#xff0c;昨晚之后感觉有点单调&#xff0c;我想设置一个背景图片&#xff0c;让我的PPT看起来更有风格&#xff0c;请问大家是怎么设置PPT背景图片的呢&#xff1f;】 PPT背景…

容器中的operator[]注意事项

首先看一张表格&#xff0c;支持operator[]的容器包括string、array、vector、deque、map、unordered_map&#xff0c;顺序容器和关联容器的operator[]不太一致。 string中的operator[] 在pos < size()时返回到位于指定位置pos的字符的引用&#xff0c;或在pos size()时…

信息安全数学基础笔记

三个数学难题: 群的定义: 满足乘法结合律&#xff0c;有单位元&#xff0c;逆元即为群&#xff0c;如果同时满足交换律则为交换群 满足乘法结合律&#xff0c;有单位元即为半群&#xff0c;如果同时满足交换律则为交换半群 希尔密码: 其中加密矩阵为n阶一般线性群&#xff0c;…

视频与音频一键同步嘴型数字人ai工具分享

在ai发展的今天,各种虚拟主播工具层出不穷,我们在选择ai工具的适合往往陷入一个使用陷阱。 比如, 看演示视频效果非常不错,自己去用却跟智障一样的。出现这种情况,我们首先不去评价这个工具的好用,我们得分析别人使用的前置条件。 大部分前置条件都是大量的训练数据, …

进程通信和信号量

1.进程通信 管道&#xff1a;包括无名管道(pipe)和命名管道(named pipe),无名管道可用于具有父进程和子进程之间的通信。命名管道除具有管道所具有的所有功能外&#xff0c;它还允许无亲缘关系进程间的通信。消息队列&#xff1a;进程可以向队列中添加消息&#xff0c;其他进程…

代码量原地缩减50%,这个Java工具类库太香了

Guava是google公司开发的一款Java类库扩展工具包&#xff0c;内含了丰富的API&#xff0c;涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码&#xff0c;使代码更为优雅&#xff0c;另一方面它补充了很多jdk中没有的功能&#xff0c;能让我们开发中更…

长沙银行财报启示录:“生态引擎”如何突破“低维竞争”?

众多行业当中&#xff0c;银行业一直被当做“经济晴雨表”。 今年以来&#xff0c;中国经济开启回暖模式。尤其是在前不久的五一假期&#xff0c;各地消费回暖&#xff0c;释放出经济持续向好的积极信号。此时&#xff0c;也正是各家银行发布成绩单的财报季&#xff0c;能发现…

OPC UA Client接口库

OPC UA库秉承简单、易用、可靠的设计理念&#xff0c;只需少量接口即可实现所需功能&#xff0c;同时使用者无需考虑多线程&#xff0c;时序等问题 1. 拷贝代码文件 将 \JngOpcUaClient\JngOpcUaClient\Input\ 文件夹拷贝到项目中&#xff0c;添加到项目。 2. 拷贝dll库及Secu…

ES+Redis+MySQL,高可用架构设计方案

ES高可用方案 1. ES双中心主备集群架构 全平台所有体系的会员总量是十多亿。在这么大的数据体量下&#xff0c;业务线的查询维度也比较复杂。有的业务线基于手机号&#xff0c;有的基于微信unionid&#xff0c;也有的基于卡号等查询会员信息。这么大的数据量&#xff0c;又有…

Java基础(40)反射机制

Java反射机制是 Java 语言的一个重要特性。先了解两个概念&#xff0c;编译期和运行期。编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些翻译功能&#xff0c;并没有把代码放在内存中运行…

平平无奇的Python为什么能一跃成为世界排名第一的语言

一、前言 本文将结合个人经历为各位同学客观的分析是否有学习Python的必要、Python适合谁学、为什么要学&#xff0c;希望能够给看到此文章的同学一点建议&#xff0c;树立学习目标&#xff0c;让学习有结果。 读完后&#xff0c;相信你一定能够有所收获。 二、简述个人经历…

Word控件Spire.Doc 【文本框】教程(4):如何将图像插入文本框

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

swift闭包底层本质

swift学习笔记 闭包底层原理 1、函数赋值给一个变量 func getFn(_ a: Int) -> Int {return a 1 }let funcVar getFn当在把一个函数赋值给一个变量funcVar的时候&#xff0c;funcVar变量会存储两个东西 funcVar总共占用16个字节前八个字节存储着getFn的函数地址后八个字…

浅聊一下NTP

浅聊一下NTP 仅了解&#xff0c;没实践过NTP 文章目录 浅聊一下NTP1.什么是NTP2.基本原理3.工作模式1.单播服务器/客户端模式2.对等体模式3.广播模式4.组播模式 4.NTP数据报文 1.什么是NTP 网络时间协议NTP&#xff08;Network Time Protocol&#xff09;是TCP/IP协议族里面…