MySQL2-多表查询、子查询、union、limit机制

news2025/1/8 4:16:40

一、多表查询
在实际开发中,大部分情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。一般一个业务都会对应多张表。
1.表的连接方式的分类
内连接:等值连接、非等值连接、自连接
外连接:左外连接(又称左连接)、右外连接(又称右连接)
全连接:(很少用,不介绍)
2.笛卡尔积连接
示例:
员工表emp(员工编号EMPNO,员工姓名ENAME,员工职位JOB,MGR上级领导编号,入职时间HIREDATE,工资SAL,津贴COMM,所属部门编号DEPTNO):
在这里插入图片描述
部门表dept(部门编号DEPTNO,部门名称DNAME,部门位置LOC):
在这里插入图片描述
select ename,dname from emp,dept;
上述sql语句emp表与dept表进行笛卡尔积连接,结果为56条记录(4*14)。
表的别名
select e.ename,d.dname from emp e,dept d;//emp表的别名为e,dept表的别名为d,使用表的别名是为了在select时区分不同表的同名字段
3.避免笛卡尔积现象
避免笛卡尔积现象的方法是加条件进行过滤,但是要注意,加条件进行过滤不会减少记录的匹配次数,只不过显示的是有效记录(即最开始的连接还是笛卡尔积连接,再在笛卡尔积连接的基础上进行过滤)。
在这里插入图片描述
说明:上述sql语法是sql92版本,现在很少使用。
4.内连接之等值连接
最大的特点是条件是等值关系。
语法:… <表A > join <表B> on <连接条件> where …(sql99语法)
示例:
在这里插入图片描述
上例中的sql语句也可以写为:select e.ename,d.dname from emp e join dept d on e.depton = d.deptno;
说明:(1)shang述sql语句省略了inner,即“select e.ename,d.dname from emp e join dept d on e.depton = d.deptno;”等价于“select e.ename,d.dname from emp e innner join dept d on e.depton = d.deptno;"。
(2)可以看出sql99语法的结构更清晰,把“表的连接条件”与“连接后的筛选条件(where)”区分开。
5.内连接之非等值连接
特点是连接条件是非等量关系。
工资等级表salgrade(GRADE工资等级,LOSAL该等级工资下限,HISAL该等级工资上限):
在这里插入图片描述
员工表emp(员工编号EMPNO,员工姓名ENAME,员工职位JOB,MGR,入职时间HIREDATE,工资SAL,津贴COMM,所属部门编号DEPTNO):
在这里插入图片描述
在这里插入图片描述
实现的sql语句为:
在这里插入图片描述
可以看出非等值连接就是连接条件不为等式的内连接。
6.内连接之自连接
特点是一张表看作两张表,自己连自己。
示例:
员工表emp(员工编号EMPNO,员工姓名ENAME,员工职位JOB,MGR上级领导编号,入职时间HIREDATE,工资SAL,津贴COMM,所属部门编号DEPTNO):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结:可以看出,自连接适用于一个表的两个字段属于同一类,两个字段之间具有一定的关联,这种关联有些类似于表之间的外键。
7.外连接
内连接:表A和表B进行连接,使用内连接,凡是A表与B表能够匹配上的记录查询出来,A、B两张表没有主副之分,两张表是平等的。
外连接:假设A和B进行连接,使用外连接,A、B两张表中有一张是主表,有一张是副表。主要查询主表中的数据,另外带上查询副表。当副表中的数据没有和主表中的数据匹配上,副表自动模拟出null与之匹配。即外连接的特点是主表的数据无条件的全部查询出来。
左外连接(左连接):表示左边的表是主表。
右外连接(右连接):表示右边的表是主表。
在这里插入图片描述
可以看出,如果使用内连接的自连接,上图中的empno为7839的记录会被去除,因为mgr无法匹配。这里需要使用外连接。
使用左外连接:
在这里插入图片描述
等价于:
在这里插入图片描述
说明:任何一个左外连接都有一个对应的右外连接写法。left和right后省略了outer,outer可写可不写。
8.三张以上表连接查询
案例:找出每一个员工的部门名称以及工资等级。
员工表emp(员工编号EMPNO,员工姓名ENAME,工资SAL,所属部门编号DEPTNO)
在这里插入图片描述
部门表dept:
在这里插入图片描述
工资等级表salgrade(GRADE工资等级,LOSAL该等级工资下限,HISAL该等级工资上限):
在这里插入图片描述
执行的sql语句为:
在这里插入图片描述
再例:
在这里插入图片描述
二、子查询(这里举的例子参考上面例子中出现的表)
子查询就是select语句中嵌套了select语句,被嵌套的select语句是子查询。子查询可以出现的位置:
select …<select子句>
from …<select子句>
where …<select子句>
1.where后嵌套select语句
员工表emp(员工编号EMPNO,员工姓名ENAME,工资SAL,所属部门编号DEPTNO)
在这里插入图片描述
在这里插入图片描述
使用子查询:
在这里插入图片描述
2.from后嵌套select子查询
员工表emp(员工编号EMPNO,员工姓名ENAME,工资SAL,所属部门编号DEPTNO)
在这里插入图片描述
工资等级表salgrade(GRADE工资等级,LOSAL该等级工资下限,HISAL该等级工资上限):
在这里插入图片描述
在这里插入图片描述
使用嵌套子查询:
在这里插入图片描述
3.select后嵌套子查询
在这里插入图片描述
另一种方式是在select后嵌套子查询(能看懂就行):
在这里插入图片描述
解释:如果内层子查询不依赖外层子查询,称为不相关嵌套查询,可由内向外逐层处理,也就是每个内层子查询在上一层查询处理之前求解,内层子查询的结果用于建立其外层查询。如果内层查询依赖于外层查询称为相关嵌套查询,对于外层查询结果的每一行根据它与内层查村相关的列值处理内层查询。
三、union(将查询结果集相加)
在这里插入图片描述
在这里插入图片描述
注意:union的结果union前面的子句的查询结果排在前面,union后面的子句的查询结果排在后面。
除此之外,unon可以处理or和in子句不能处理的情况,即将两张不相关的表的查询结果拼在一起:
在这里插入图片描述
注意:union连接的两个查询结果的列数需相同。
四、limit(limit是mysql特有的,其他数据库中没有,不通用;Oracle中有一个相同的机制,叫做rownum)
limit机制很重要,是分页机制的基础。
limit取结果集中的部分数据。
语法机制:limit startIndex, length
startIndex表示起始位置,length表示取几个。如果只写了一个数字,则表示length,startIndex默认为0。
在这里插入图片描述
注意:limit是select语句最后执行(在order by之后)的环节。

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

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

相关文章

HTML+CSS实训——Day02——写一个登陆界面

前言 今天要继续完成我们的音乐软件了&#xff0c;昨天写完了封面&#xff0c;今天该完成开屏广告和登陆界面了。 登陆界面代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-C…

00后太卷了,老油条感叹真干不过...

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

Whatsns内容付费seo优化带采集和熊掌号运营问答系统

正文&#xff1a; 付费课程增加付费课程试听功能基础版和高级企业版&#xff0c;Plus版增加微信消息模板回答通知&#xff0c;采纳答案通知改进兼容因导入Discuz用户密码规则不兼容导致登录失败问题基础版和高级企业版&#xff0c;Plus版增加改进微信文本回复&#xff0c;支持…

【搭建服务器】Win10 IIS搭建webdav服务以及公网访问教程 - 挂载webdav

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表 4. 公网远程访问4.1 浏览器访问测试4.2 映射本地盘符访问4.3 安装Raidrive客户端 总结&#xff1a; 自己用W…

你真的会写测试用例吗?如何写?测试用例之中的细节拉满了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试用例中的细节…

进程间通信之system V共享内存

目录 &#x1f39e;一、共享内存---shm 1.1shmget ①ftok得到一个key ②shmget得到shm ③shm的性质 1.2 shmctl ①ipcrm ②shmctl 1.3shmat&&shmdt ①shmat ②shmdt 1.4通过shm完成进程间通信 1.5shm的特点 ①shm共享内存的优点 ②shm的缺点 1.6shm的内核…

78.建立一个Web应用程序的布局第二部分

上节课中&#xff0c;我们实现的页面如下图所示&#xff1a; 而最终的页面如下图所示&#xff1a; ● 首先我们 先添加menu的按钮 <menu><button>New</button><button>Reply</button><button>Forward</button><button>Mar…

中兴新支点操作系统电力主站和变电站安全操作系统解决方案

近日&#xff0c;由中国软件行业协会主办的“第二届中国国际软件发展大会”在北京国家会议中心成功召开&#xff0c;国家部委领导、两院院士、行业领袖、龙头企业代表等齐聚一堂&#xff0c;剖析行业热点、分享趋势前瞻。中兴新支点操作系统凭借在国网和南网广泛应用的出色表现…

彻底明白IP地址如何计算相关地址【收藏】

通过IP地址和子网掩码与运算计算相关地址&#xff0c;知道ip地址和子网掩码后可以算出&#xff1a; 1、 网络地址 2、 广播地址 3、 地址范围 4、 本网有几台主机 例1&#xff1a;下面例子IP地址为1921681005 子网掩码是2552552550。算出网络地址、广播地址、地址范围、主…

17种常见VR推广渠道,你知道几个?

随着各方面技术的成熟&#xff0c;VR内容越来越多地出现在了生活的各个角落&#xff0c;凭借其身临其境的3D沉浸式体验&#xff0c;惊艳了不少消费者&#xff0c;为线上平台、实体店铺导流变现实现了极大的价值&#xff0c;成为了当下商企最受欢迎的营销模式。 此前我们经常收…

TFM—用于实时监控和数据管理的远程试验管理平台

随着信息技术的高速发展&#xff0c;企业对远程试验实时监控与数据管理的需求日益增强。而利用远程试验信息协同技术&#xff0c;可突破部门与地域的限制&#xff0c;并把试验现场的车辆状态信息、试验数据和分析结果实时传输给数据分析部门和设计部门等&#xff0c;从而缩短时…

死锁知识记录

一、类型 一般性死锁&#xff1a;这是最经典的死锁方式。指的是多个线程的执行下必须拥有多个资源&#xff0c;但是这些资源又分别被不同的线程占有着&#xff0c;即造成了一种僵持的状态。 嵌套性死锁&#xff1a;指的就是锁的互相嵌套使用。上面这种情况的死锁类型&#xf…

自动化测试的简单认识

1.什么是自动化测试 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 2.常见的WebDriver的API 定位元素常用的是 findelement方法 比…

MySQL 锁篇

1. MySQL 有哪些锁&#xff1f; 1&#xff09;全局锁 执行后整个数据库就处于只读状态&#xff0c;一般用于全库逻辑备份 2&#xff09;表级锁&#xff1a; 表锁&#xff1a; 表级别的共享锁&#xff1a;读锁 表级别的独占锁&#xff1a;写锁 元数据锁&#xff08;MDL&am…

一文吃透 Vue 框架教程(下)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【Spring】— MyBatis配置文件元素

目录 MyBatis配置文件元素properties元素settings元素typeAliases元素typeHandler元素objectFactory元素plugins元素environments元素mappers元素 MyBatis配置文件元素 使用MyBatis框架进行开发&#xff0c;需要创建MyBatis的核心配置文件&#xff0c;该配置文件包含重要的元素…

sqlite数据如何转成mysql数据类型

一、使用工具Navicat Premium 16 1.把db文件拖到Navicat Premium中&#xff0c;选择数据库&#xff0c;点击工具&#xff0c;数据传输 选择下一步 下一步 开始 这样就成功了&#xff0c;生成的sql文件就在你保存的位置了。 二、使用SQLiteStudio转换成mysql文件 1.打开SQLite…

关键字volatile 和信号

volatile是c语言中的一个关键字&#xff0c;在语言层面我们很难理解它&#xff0c;今天从信号角度我们来理解一下。 我们来看下面一段代码&#xff1a; 从代码表面看上去运行逻辑应该是&#xff0c;flag为0时候一直while循环&#xff0c;当有信号2产生进入到信号2的处理函数中…

Java - 集合工具类Collections

文章目录 目录 文章目录 前言 二.collections提供的方法 三. 方法详解 1.addAll:将所有指定元素添加到指定 collection 中。 可变参数 添加方式 二.shuffle()&#xff1a;随机打乱List集合中的元素 三. sort()&#xff1a;对List集合进行排序&#xff1b; 实现compata…

软件测试:提升jemeter报告输出品质,精通动态参数处理技巧并进行组件极致优化

目录 引言 一.测试报告生成 二.动态参数处理 1.正则 2.json提取器 3.JMeter动态参数处理逻辑是什么&#xff1f;【面试必考】 三.jemter常用的组件 四.JMeter是怎么做API自动化测试的&#xff1f; 五.针对一个服务&#xff0c;你怎么测试&#xff1f; 引言 当今互联网…