MySQL第六七弹,自连接等复杂查询,索引部分知识

一、💛

自连接:自己和自己笛卡尔积(奇淫巧技,特殊场景很牛逼)

SQL:编写条件都是列和列之间的比较,但是SQL无法进行,行与行之间的比较。

如:显示所有java比计算机原理高的(就是偏爱java✨✨✨)

⚠️⚠️注意:自连接的多个表名不可以相同,所以需要给表名重命名

第一步是自连接(表太长的懒得截图,直接从第二步开始)

(select*from student as s1,student as s2;   重命名别忘啊)

第二步可以用学生id/课程id来精确范围(注意哈用学生的ID就相当于是一个学生针对课程的所有信息,👫👫肯定刚开撕有人和我有疑惑,为什么不是学生ID和课程ID同时筛选呢,因为我们的目的是把不同的科目放到不同的列,而不是把相同的科目放到不同列)

下图是错误的写法 ,把两个放到一起,正确的应该是第二个那个图片

第三步加上业务条件,让左侧表只保留course_id=2的记录同时,右侧表保留course_id=1

1-2 ,2-1 留一条就行,

现在是筛选出来了带java和计算机组成原理的,下一步就应该是去筛选哪个大,哪个小了

第四部筛选出java大于计算机组成原理成绩的人。

最后在对列进行精简,就完成了一次自连接 

 二、💚

子查询:属于是套娃操作(不常用,也不推荐用,了解即可)

正常推荐做法是分两步去完成:

假如说查找叫不想毕业的“同班同学”

首先找不想毕业,然后找他的同班同学,太过鸡肋了,就不拿代码实际操作具体说明了

正常情况:我么选择分两步完成

select classes_id from student where name!='不想毕业';

select name from student where class_id=1(和不想毕业这个同学同班的) and name!='不想毕业'

使用单行子查询:

select name from student where class_id=(select classes_id from student where name!='不想毕业')    and name!='不想毕业'

多行子查询:使用的是IN,EXIST(不介绍,一点用没有了解就好)

由此可见:使用子查询可读性低。

三、💜

化繁为简是我们的理念,'封装':当拆成多个小的模块之后,同一时刻只需要关注一个模块即可,不必考虑其他模块,让咱们的注意力能聚合在一个点上————模块之间的关系考虑的是高内聚,低耦合

四、💙 

​​​​​​​合并查询:把多个select查询到的结果集合,合并成一个集合

如下图是,把两个表相当于放一起了,还给他来了给类似于去重的操作

⚠️⚠️可以合并的前提,两个列的类型一定要对应

 那我我么如何能够不去重,完整的显示全部捏?

只需要你在union后面写一个all即可 

五、💖 

 ⭐️ ⭐️ ⭐️(前面的总结非常重要)

聚合查询:多行进行运算,分组,聚合 :group by having

多表联合查询

(1).内连接:select *from 表1 join 表2 on连接条件

                     select*from 表1 ,表2 where连接条件

(2).外连接:select *from 表1 left join 表2 on 连接条件

                      select*from  表1 right join 表2 on 连接条件 

(3).自连接:奇淫巧技

(4).子查询:不建议用(💩💩💩)


引言:数据库本身是很复杂的软件,mysql更是复杂里面的大哥,下面来说说面试的大哥之一。  ‘索引’

一、🌟🌟🌟

索引:如同你想的像是一本书的那种目录那样,是方便我们用于查找的

一个表里有很多数据,在查询表的时候,最基本的方式就是遍历表,一条一条的筛选。因此,给这个表来建立索引(以列为维度建立的)来提高查找速度

student  :id,name,qqmail classId

                  1  张三   ···省略

我们可以根据(id/name来进行筛选查找)

按照ID这一列建立索引:

在数据的情况下额外搞了一个空间,维护一些和ID相关的信息,这里就通过一些特定的数据结构,来去维护,表示ID相关的索引情况。

id:1->表中某个位置(id:2也是某个位置),后续再按照id查询就不需要直接遍历了,而是在索引中查询·根据索引就能初步锁定出数据所在的位置。(如果是id索引,那么你拿name也无法提高效率)

二、✨✨✨ 

索引的优缺点:

优点:(1).可以用来去提高查询的效率

缺点:(1).消耗额外空间

            (2).有可能拖慢增删改的速度(提升了查呗,新增这种往里面插入数据的还好一点,删除,修改,如果删除修改的是带索引的还可以快一点,但假如涉及到索引的删除和修改,同时也要维护索引

肯定是有代价,但也肯定是值的

这种带索引的就像是教务系统:多查,少改(期末之类的才去改东西)

三、💫💫💫

在SQL中如何使用索引呢

1.查看索引:show index from 表名,下面的这个就没有索引 

那么什么是有索引的呢,我们之前说过(unique ,primary key,和具有外键约束的表是自己就带索引的) 

​​​​​​​

primary key(再说一遍是非空,并且不可以重复的意思

外键约束会产生索引的原因:

父类的ID要+unique或者primary
(原因:索引!! 
我们在设置外键的时候就会导致操作子表中,频繁查父表,这一个操作,非常耗时间,为了加快查询速度,如果父亲表中(ID这一列就索引就会非常香,primary,unique自带索引),因此约定:没有索引,不能建立这样的外键)

插入或者修改自表中受约束来的数据,就必须保证,插入/修改后的结果,必须要在父表中存在。  
————————————————
版权声明:本文为CSDN博主「轮到我狗叫了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_72953218/article/details/132000951

!!

 👳😁

 2.创建索引:

手动给指定的列创建索引:create index 索引名 on 表名(字段名)

如:create index idx_student_name on student(name);

⚠️注意: 只有下划线,没有英文的-这个横线,是不可以的。

补充:创建索引操作,可能十分危险,(设计表的时候尽量提前考虑好那些列要有索引,如果表是空的或者表里包含数据本身就不多,创建索引没事,但是如果表非空,并且里面包含非常多的数据,创建索引会引起大规模的硬盘IO操作,会导致数据库卡死。

👧😁

3.删除表中的索引:

drop index 索引名字 on 表名   创建的才可以删除,主键,unique,外部约束的不受删除影响,当然了删除索引也是很危险的操作

 🐬🐟 🐳

4.场景思考:

如果实在是要给一个很多数据的表 创建/删除/索引,并且这个数据库还是生产环境的数据库,怎么办呢?

一般一架民用飞机有两个发动机,发动机A和B,那么我么如何更换B发动机呢(飞机正在飞的情况下)?(两个发动机有一个运作,就可以支持飞机的飞行)

——👊 👊 ✊

一般数据库服务器也往往不是单台服务器,为了整个系统的可靠性,通常搞多个mysql服务器节点,这些节点往往数据相同,能够提供相同服务(如果某个挂了,也不会影响大况),那么我们只要准备一个新的MySQL服务器,把表和索引都创建好,然后把数据导过来,再把替换的mysql服务器关闭,把新的mysql服务器换上就好了

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

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

相关文章

服务端高并发分布式结构演进之路

目录 一、常见概念 1.1基本概念 二、架构演进 2.1单机架构 2.2应用数据分离架构 2.3应用服务集群架构 2.4读写分离 / 主从分离架构 2.5引入缓存 —— 冷热分离架构 2.6垂直分库 2.7业务拆分 —— 微服务 一、常见概念 1.1基本概念 应用(Application&am…

2023华数杯数学建模C题思路分析 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、 压力等,可能会对婴儿的认知、情…

硬件串口通信协议学习(UART、IIC、SPI、CAN)

0.前言 学习资料:江协科技的个人空间-江协科技个人主页-哔哩哔哩视频 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 全双工:通信…

腾讯云COS+PicGO+截图工具+Obsidian+Typora+蚁小二:打造丝滑稳定的Markdown写作和分发环境

目录 背景 工具说明 腾讯云COS PicGO图片上传工具 截图工具 Obsidian Typora 蚁小二 首次配置完整演示步骤 腾讯云COS PicGO图片上传工具 截图工具 Obsidian Typora 蚁小二 使用总结(简单又丝滑的编辑步骤) 背景 很久很久以前&#xff…

【蓝图】p47下车减速功能

p47下车减速功能 p47下车减速功能加速功能下车减速功能 p47下车减速功能 加速功能 上图是ue自带的加速功能,检测到按w时输入轴会传1给设置油门输入,就会加速 所以,减速也可以通过蓝图反方向制作 下车减速功能 打开Sedan蓝图类的上下车图表…

Java网络编程

目录 1.网络编程 2.Echo模型(服务器与客户端实现通信) 3.BIO处理模型(实现多用户访问同个服务器) 4.UDP程序 1.网络编程 有两种通信模型 C/S(Client/Server)基于客户端和服务器端,实现代码时候需要实现客户端与服务器端 B/S(Browser/S…

QtWebApp开发https服务器,完成客户端与服务器基于ssl的双向认证

引言:所谓http协议,本质上也是基于TCP/IP上服务器与客户端请求和应答的标准,web开发中常用的http server有apache和nginx。Qt程序作为http client可以使用QNetworkAccessManager很方便的进行http相关的操作。Qt本身并没有http server相关的库…

使用Git在GitHub上部署静态页面

在GitHub中,我们可以将自己的静态页面部署到GitHub中,它会给我们提供一个地址使得我们的页面变成一个真正的网站,可以供用户访问。 一、在GitHub下创建仓库 二、将项目部署到GitHub上 1. 初始化Git仓库 2. 提交代码 3. 关联远程仓库 在Gi…

【java安全】原生反序列化利用链JDK7u21

文章目录 【java安全】原生反序列化利用链JDK7u21前言原理equalsImpl()如何调用equalsImpl()?HashSet通过反序列化间接执行equals()方法如何使hash相等? 思路整理POCGadget为什么在HashSet#add()前要将HashMap的value设为其他值? 【java安全】…

WSL1升级为WSL2

首先需要启用组件 使用管理员打开Powershell并运行 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform启用后会要求重启计算机 从https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi获取WSL2 Linux内核更新包,…

HTML 是什么?它的全称是什么?

聚沙成塔每天进步一点点 专栏简介HTML是什么?HTML的全称是什么?写在最后 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对We…

ad+硬件每日学习十个知识点(16)23.7.27 (总线保持、lin报文、逻辑器件手册解读)

文章目录 1.总线保持是怎么实现的?有什么需要注意的(驱动电流和电阻)?2.LIN报文3.芯片datasheet的features、applications、description看完,应该能大致判断逻辑器件能否满足我们的要求。4.什么是逻辑器件的传输延时&a…

WiFi无线组网温湿度实时监测系统

近年来随着我国电子技术和无线通信技术的快速发展,远距离数据采集传输被应用到众多领域,由于事关环境安全和生命健康,受到了各行各界的关注。在温湿度监测中,目前采用的通信技术主要是4G、WiFi、以太网、LoRa等,今天&a…

docker删除容器(步骤详解)

要在Docker中删除容器,需要使用命令docker rm。 下面是详细步骤: 1. 首先,使用docker ps命令查看当前正在运行的容器。这个命令会列出所有正在运行的容器的ID、名称、状态等信息。 如果没有正在运行的容器可以通过docker ps -a 查看当前所…

[Qt]FrameLessWindow实现调整大小、移动弹窗并具有Aero效果

说明 我们知道QWidget等设置了this->setWindowFlags(Qt::FramelessWindowHint);后无法移动和调整大小,但实际项目中是需要窗口能够调整大小的。所以以实现FrameLess弹窗调整大小及移动弹窗需求,并且在Windows 10上有Aero效果。 先看一下效果&#xf…

zabbix监控mysql容器主从同步状态并告警钉钉/企业微信

前言:被监控的主机已经安装和配置mysql主从同步,和zabbix-agent插件。 mysql创建主从同步:http://t.csdn.cn/P4MYq centos安装zabbix-agent2:http://t.csdn.cn/fx74i mysql主从同步,主要监控这2个参数指标&#xf…

Python入门【​编辑、组合、设计模式_工厂模式实现 、设计模式_单例模式实现、工厂和单例模式结合、异常是什么?异常的解决思路 】(十七)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…

弘扬“两弹一星”精神,勇攀科学技术高峰——道本科技商业大学党日活动圆满落幕

2023年8月2日,道本科技与商业大学携手举办了一场主题为“弘扬‘两弹一星’精神,勇攀科学技术高峰”的党日活动。本次活动旨在了解党领导下的中国核工业发展历程,传承和弘扬“两弹一星”精神,同时展示道本科技创新产品,…

ThinkPHP5使用phpqrcode生成二维码

生成指定跳转地址二维码图片: 首先将下载好的phpqrcode.php文件放到指定目录内(我这里用的放在public/phpqrcode目录下),准备调用 之后控制器中调用 public function qrcode(){require_once "./phpqrcode/phpqrcode.php&quo…

opencv-33 图像平滑处理-中值滤波cv2.medianBlur()

中值滤波是一种常见的图像处理滤波技术,用于去除图像中的噪声。它的原理是用一个滑动窗口(也称为卷积核)在图像上移动,对窗口中的像素值进行排序,然后用窗口中像素值的中值来替换中心像素的值。这样,中值滤…