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

news2025/1/18 21:07:16

一、💛

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

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.coloradmin.cn/o/829197.html

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

相关文章

中电金信杜啸争:逐“数”兴业,智胜未来

在数字化转型大潮中,数据要素市场未来如何发展?作为天然具有大量数据应用场景和需求的金融行业,能否逐“数”兴业,实现“换道超车”? 本期分享由中电金信商业分析事业部总经理,中电金信数据研发委员会主席…

Cpp8 — 二叉搜索树

二叉搜索树(搜索二叉树、二叉排序树) 二叉搜索树又称二叉排序树,它要么是一棵空树,要么是具有以下性质的二叉树: 1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 2.若它的右子树不为空&…

刷题笔记 day5

力扣 202 快乐数 首先来分析什么样的数是快乐数, 解题思路: 1)定义快慢指针 ; 2)快指针走两步,慢指针走一步 ;3)两个指针相遇时判断相遇的数值是否为1。 怎样处理 取各分位数的平…

ReentrantLock源码解析和AQS常见问题分析

ReentrantLock和AQS常见问题分析 一、前言 本文利用ReentrantLock作为阅读AQS的切入口,通过问答的方式让大家更好的去理解今天要掌握的点,也欢迎大家说说自己的答案。 二、本文大纲 脑图是个很好的辅助记忆工具,也能提高自己的逻辑思维能…

计算机中数据的表示

计算机数据表示 送入计算机的数字,字母,符号等信息必须转换成0、 1组合的数据形式才能被计算机识别。 能够进行算术运算得到明确数值概念的信息成为计算机数值数据,其余的信息成为非数值数据。 从计算机本质的角度而言啊,它所处理…

《零基础入门学习Python》第077讲:Tkinter 模块:标准对话框

Tkinter 为了提供了三种标准对话框模块,它们分别是: messageboxfiledialogcolorchooser 注:这三个模块原来是独立的,分别是 tkMessageBox、tkFileDialog 和 tkColorChooser,需要导入才能使用。在 Python3 之后&#…

http和https的区别?(网络通讯)

HTTP: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种 网络协议 HTTPS: 是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。 两者区别: 1、HTTPS …

Vue3_02 创建Vue3.0工程

1.使用 vue-cli 创建 ## 查看 vue/cli 版本,确保 vue/cli 版本在4.5.0以上 vue -V 或 vue --version## 安装或升级你的 vue/cli npm install -g vue/cli## 创建 vue create vue_test## 启动 cd vue-test npm run serve 2.使用 vite 创建 什么是vite?——新一代…

Golang之路---03 面向对象——接口与多态

接口与多态 何为接口 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。   在 Go 语言中,…

24考研数据结构-二叉树的遍历

目录 5.3二叉树的遍历和线索二叉树数据结构:树的遍历前序遍历中序遍历后序遍历层次遍历遍历方法的选择结论 树的遍历应用5.3.1二叉树的遍历1. 先序遍历(根左右 NLR)2. 中序遍历(左根右 LNR)3. 后续遍历(左右…

基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程

基于JenkinsPythonUbuntuDocker的接口/UI自动化测试环境部署详细过程 1 Jenkins是什么?2 Jenkins目标是什么?3 什么是CI/CD?3.1 CI持续集成3.2 CD持续部署3.3 CD持续交付 4 Ubuntu环境4.1 环境需求4.2 实现思路 5 Ubuntu下安装Docker6 安装Jenkins6.1 拉…

电力巡检无人机助力迎峰度夏,保障夏季电力供应

夏季是电力需求量较高的时期,随着高温天气的来临,风扇、空调和冰箱等电器的使用量也大大增加,从而迎来夏季用电高峰期,电网用电负荷不断攀升。为了保障夏季电网供电稳定,供电公司会加强对电力设施设备的巡检&#xff0…

新抗原预测的计算工作流程

参考文献:Xie N, Shen G, Gao W, Huang Z, Huang C, Fu L. Neoantigens: promising targets for cancer therapy. Signal Transduct Target Ther. 2023 Jan 6;8(1):9. doi: 10.1038/s41392-022-01270-x. PMID: 36604431; PMCID: PMC9816309. 文章目录 *新抗原预测的…

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原 一、前言二、Cloud Studio 简介1.Cloud Studio 是什么2.Cloud Studio 的优点 三、Cloud Studio 登录注册四、Cloud Studio 的初体验五、使用 Cloud Studio 开发一个简版的点餐系统1.安装 a…

开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

大家好,我是独孤风。 开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本,来咨询我的小伙伴也越来越多,特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论,总结出安装部署Datahub最新版本的部署手…

SpringCloud深入理解 | 生产者、消费者

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! SpringCloud Spring Cloud是一组用于构建分布式系统和微服务架构的开源框架和工具集合。它是在Spring生态系统的基础上构建的,旨在简化开发人员构建分布式…

Tomcat添加第三方jar包、如何在IDEA中启动部署Web模板

前言:公司最近维护老项目,是最原始的web项目,servlet和jsp结合的web项目,启动的时候配置了好几遍, 都起不来,很折磨人,这个文档比较全配置一遍准备工作 首先 拉取代码: git clone xxx.git ,如需要别的操作,自行baidu 也可以在idea中拉取第一步File ->Project Structure->…

张驰咨询:精益生产管理的独特特点和显著优势

精益生产管理是一种注重效率和优化生产流程的管理方法,旨在通过最小化浪费和提高生产效率来降低成本和提高产品质量。以下是精益生产管理的主要特点: 优化生产流程 精益生产管理强调通过优化生产流程来提高效率和降低成本。这包括通过标准化工作流程、…

【数据结构与算法】TypeScript 实现图结构

class Grapg<T> {// 用于存储所有的顶点verteces: T[] [];// 用于存储所有的边 采用邻接表的形式adjList: Map<T, T[]> new Map();// 添加顶点addVertex(v: T) {this.verteces.push(v);// 初始化顶点的邻接表this.adjList.set(v, []);}// 添加边addEdge(v: T, w:…

通向架构师的道路之Tomcat性能调优

一、总结前一天的学习 从“第三天”的性能测试一节中&#xff0c;我们得知了决定性能测试的几个重要指标&#xff0c;它们是&#xff1a; 吞吐量 Responsetime Cpuload MemoryUsage 我 们也在第三天的学习中对Apache做过了一定的优化&#xff0c;使其最优化上…