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.rhkb.cn/news/74788.html

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

相关文章

想参加华为杯竞赛、高教社杯和数学建模国赛的小伙伴看过来

本文目录 ⭐ 赛事介绍⭐ 辅导比赛 ⭐ 赛事介绍 ⭐ 参赛好处 ⭐ 辅导比赛 ⭐ 写在最后 ⭐ 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛。该竞赛旨在通过实际问题的建模和解决,培养研究生的创新能力和团队合作精神&a…

【Winform学习笔记(五)】引用自定义控件库(dll文件)

引用自定义控件库dll文件 前言正文1、生成dll文件2、选择工具箱项3、选择需要导入的dll文件4、确定需要导入的控件5、导入及使用 前言 在本文中主要介绍 如何引用自定义控件库(dll文件)。 正文 1、生成dll文件 通过生成解决方案 或 重新生成解决方案 生成 dll 文件 生成的…

Centos部署Springboot项目详解

准备启动jar包,app.jar放入指定目录。 一、命令启动 1、启动命令 java -jar app.jar 2、后台运行 nohup java -jar app.jar >/dev/null 2>&1 & 加入配置参数命令 nohup java -Xms512M -Xmx512M -jar app.jar --server.port9080 spring.profiles…

[代码案例] 快速入手matlab绘图基本指令

主要内容 Matlab绘图指令基本语法,涵盖画布位置大小,坐标调整,图例标签,子图绘制等 part 1 生成绘图数据据 part 2 绘图基本指令 part 3 多条曲线绘制 part 4 子图分块绘制方法 part 5 指定画布绘制 代码 % part 1 t0:0.01:30;…

Swish for MacBook触控板窗口管理软件

Swish可以帮助您使用触控板,轻松对mac窗口进行管理,只需提前设置好预定的设置即可,非常方便! 几乎所有的窗口管理工具用的都是快捷键或者鼠标拖移的方式来管理窗口,Swish 却另辟蹊径,为窗口管理引入了手势…

静态路由综合实验

实验拓扑如下: 实验要求如下: 【1】R6为isp,接口IP地址均为公有地址;该设备只能配置IP地址,之后不能再对其进行任何配置 【2】R1~R5为局域网,私有IP地址192.168.1.0/24,请合理分配 【3】所有路由器上环回…

寒假作业(蓝桥杯2016年省赛C++A组第6题 )

题目: 注:蓝桥杯2016年省赛CA组第6题 请填写表示方案数目的整数。 题解: 由题可知这是一道全排列问题,因此我们可以使用c的next_permutation函数对于1-13的数字进行全排列即可,并每次排列判断是否满足题意。 注意…

2023 蓝桥杯真题B组 C/C++

https://www.dotcpp.com/oj/train/1089/ 题目 3150: 蓝桥杯2023年第十四届省赛真题-冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V,V 是一个正整数,这意味着消耗 V 个普通金 属 O…

RF手机天线仿真介绍(二):孔径调谐和阻抗调谐

目录 简介孔径调谐阻抗调谐孔径调谐组件选择分析 简介 由于手机运行所需的频段、功能和模式的数量不断增加,现代手机的 RF 前端 (RFFE) 设计也日益复杂。需要采用更多天线,使用载波聚合 (CA)、4x4 MIMO、Wi-Fi MIMO 和新的宽带 5G 频段来提供更高的数据…

【初阶C语言】学会结构体

1.结构体类型的声明 2.结构体初始化 3.结构体成员访问 4.结构体传参 前言:结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 一、结构体类型的声明 1.结构的声明 结构体声明的模板: struct tag {member-li…

某银行软件测试笔试题

(时间90分钟,满分100分) 考试要求:计算机相关专业试题 一、填空题(每空1分,共10分) 1. ______验证___是保证软件正确实现特定功能的一系列活动和过程。 2. 按开发阶段分,软件测试可…

寻找旋转排序数组中的最小值——力扣153

文章目录 题目描述解法 二分法 题目描述 解法 二分法 int findMin(vector<int>& nums){int l0, rnums.size()-1;while(l<r){int mid (lr)/2;if(nums[mid]<nums[r]) rmid;else lmid1;}return nums[l];}

【雕爷学编程】 MicroPython动手做(38)——控制触摸屏

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…

git常用指令

git add命令 作用&#xff1a;移动文件&#xff1a;工作区-->暂存区 git add .&#xff1a;把所有文件都放到暂存区 git commit命令 作用&#xff1a;移动文件&#xff1a;暂存区-->本地仓库 git status命令 作用&#xff1a;查看修改状态 git log命令 作用&#xf…

小研究 - 主动式微服务细粒度弹性缩放算法研究(四)

微服务架构已成为云数据中心的基本服务架构。但目前关于微服务系统弹性缩放的研究大多是基于服务或实例级别的水平缩放&#xff0c;忽略了能够充分利用单台服务器资源的细粒度垂直缩放&#xff0c;从而导致资源浪费。为此&#xff0c;本文设计了主动式微服务细粒度弹性缩放算法…

c语言实现八大排序详细解析

首先先看排序算法的整体分类 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff…

unity摄像机跟随玩家

1.下载摄像机包 2.创建摄像机 3.拖拽玩家

SOME/IP学习笔记1

SOA概念 在SOA中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。服务提供者将功能具象为一组接口,这样使用者就能知道如何调用服务,完成某件事情,得到某个…

如何编写一个易于维护的考试系统源码

编写一个易于维护的考试系统源码对于开发人员来说非常重要。一个易于维护的系统可以使代码更易于理解、修改和扩展&#xff0c;从而提高开发效率和系统稳定性。 第一步&#xff1a;良好的项目结构 良好的项目结构是一个易于维护的源码的基础。可以按照模块、功能或层次等方式…

为机器人装“大脑” 谷歌发布RT-2大模型

大语言模型不仅能让应用变得更智能&#xff0c;还将让机器人学会举一反三。在谷歌发布RT-1大模型仅半年后&#xff0c;专用于机器人的RT-2大模型于近期面世&#xff0c;它能让机器人学习互联网上的文本和图像&#xff0c;并具备逻辑推理能力。 该模型为机器人智能带来显著升级…