MYSQL练题笔记-子查询-换座位

一、题目相关内容

1)相关的表和题目

2)帮助理解题目的示例,提供返回结果的格式

二、自己初步的理解

没啥思路,我还没做过交换的这种题,所以我觉得这类交换的题以后值得做一个合集,是有点灵活度在里面的,看到很多的题解,但是我这里还是先把基本的做好,我不要走都不会就想着跑。这里老老实实分析两个官方题解。第一下看到官方题解的时候真的是很惊讶,原来可以换id而不是换名字。

三、题解展示和分析

1.利用case和交叉连接的题解

题外话:从最近几次学习题解的过程上,其实我看出来了,很多用到不规范的交叉连接的,如果之前的题我没有去百度交叉连接,知道了他的两种书写方式,我也不知道交叉连接还可以(select * from a,b)这样写的,对于新手来说有点难理解的,这里给出我之前笔记的找到的解释吧,如下图这里其实讲的很清楚了。

第一个官方题解如下:

关键的点是这两个红框里的子查询和case语句,而且他们还是有关联的,case语句的counts字段是第二个子查询建的新表的唯一字段。

1)从第二个子查询建的seat_counts表和seat进行交叉连接开始理解,通过交叉连接这样就达到了每个id和student和counts(seat表的记录数)合并。结果类似于下面的表

2)然后返回去理解case语句就好理解了。三种选择以及相应的结果

①如果id为奇数并且seat表的记录数不等于id,就返回id的下一个。

②如果id为奇数且seat表的记录数等于id,就返回id本身

③其他情况就是id为偶数,返回id的上一个即可。

然后就可以完全理解了。

2.利用位运算和Coalesce函数

第二个题解如下

这个还是要从后往前理解才行,先理解位运算和左连接操作出来的结果,然后你就能理解Coalesce函数呈现出来的效果。

1)理解左连接和on条件后面的位运算

①on条件后面的位运算评论区有个大佬解释的很好,这里放上来,没有他我也理解不了,就是理解二进制换算和异或运算,不理解二进制运算的话百度一下,自己算一下基本就理解了,至于异或运算简单粗暴的理解就是:相同的对象,结果就是0,不相同的对象结果就是1

((s1.id + 1)^1)-1的作用就是id为奇数的话变成id+1,如果id是偶数的话就变成id-1,因为seat表的记录数是奇数的话,他就会变成id+1,但是整个表是没有id+1这个记录的,所以就不满足((s1.id + 1)^1)-1=s2.id。

②而这是左连接(s1和s2进行左连接,就是左边即使有没有满足on后面条件也会输出,但是右边的表和左边的表同一行的就会返回null。),那s1的记录都是保留的,但s2因为不满足on后面的这个条件,那就都返回null。下图我查询两张表的id和student你就可以看出来,左连接给你达到的效果。

2)理解Coalesce函数

在这里用法是,如果第一个参数为空就返回第二个参数,第一个参数不为空就返回第一个参数的值。

联系上面左连接达到的效果,第一个参数就一定是s2的student,因为s2的最后一项为奇数项的时候才会返回null,那为空的时候就返回s1的student,这样就接上了啊!!

其实我Coalesce函数还是有其他的用法的,但是我又用不到,至少目前来说,所以我不加上去了,等再有疑问的时候再说,现在不庸人自扰了,因为我还提不出关于这个函数的问题,目前我只要知道这个函数在这里是怎么使用的就行。

四、总结

综合两个题解,我都认为先理解from后面的,select ??From 问号部分永远是最后理解的,因为到了最外层select这一步的话,都是在后面一系列的操作上。很不错完成了整个复杂的题解,但确实理解了很久,一直又畏难情绪,想逃避,但现在自己确实已经充分理解了,希望也帮你理解了这一道题!!

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

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

相关文章

【mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar安装】linux安装mysql5.7

之前安装的时候遇到了很多问题,浪费了一些时间。整理出这份教程,照着做基本一遍过。 这是安装包: 链接:https://pan.baidu.com/s/1gBuQBjA4R5qRYZKPKN3uXw?pwd1nuz 1.下载安装包,上传到linux。我这里就放到downloads目录下面…

猫粮选什么牌子好?好的主食冻干猫粮品牌十大排行

主食冻干猫粮作为一个猫咪的新主食产品越来越频繁的出现在各位猫主人们的视野中,但是国内的人对主食冻干猫粮的认知却仅仅止步于它是生肉制作而成,可以当作主食长期喂养猫咪,对于主食冻干猫粮的选购并没有更深入的思考和探索,如今…

大象elephant目标检测数据集VOC+YOLO格式2300张

大象是长鼻目象科的哺乳动物,有两个属,是世界上最大的陆生动物。其像柱子一样的四肢和宽厚的脚掌可以稳稳支撑住庞大的身体。巨大的头上长有蒲扇状的大耳朵和长且有弹性的鼻子。象耳上有丰富的血管,可以有效散热。鼻子和上唇合而为一的象鼻由…

【MATLAB】基于SVMD分解的信号去噪算法(基础版)

代码的使用说明 【MATLAB】基于SVMD去噪的信号去噪算法(基础版) 代码的原理 1.SVMD原理 连续变分模式分解(Successive Variational Mode Decomposition,SVMD)是一种用于将混合信号根据其频率特性分离成各个独立分量的…

Nginx rewrite 参数

目录 常用的Nginx 正则表达式 rewrite 和 location的区别 location location 大致分三类: location 常用的匹配规则: location 优先级: rewrite rewrite跳转实现 rewrite 执行顺序如下 语法格式 flag标记说明 rewrite实际操作 基…

Ubuntu服务设置

0. systemd介绍 Linux系统的systemd是第一个运行的进程,用来创建系统的守护进程,管理整个Linux系统。systemd支持并行启动守护进程,systemd初始化整个系统所需的资源。 0.1 systemd基本命令 systemctl systemctl是systemd中最基本的命令&a…

SQL命令---修改字段的数据类型

介绍 使用sql语句修改字段的数据类型。 命令 alter table 表明 modify 字段名 数据类型;例子 有一张a表,表里有一个id字段,长度为11。使用命令将长度修改为12 下面使用命令进行修改: alter table a modify id int(12) NOT NULL;下面使修…

绿盟 SAS堡垒机 local_user.php 权限绕过漏洞复现

绿盟 SAS堡垒机 local_user.php 权限绕过漏洞复现 一、 产品简介二、漏洞概述三、 复现环境四、漏洞复现五、小龙检测 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&…

Java数据类型相关

数据类型 Java有哪些数据类型 定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类 型,在内存中分配了不同大小的内存空间。 分类: 基本数据类型 数值型 整数类型(byte,short,int,long) 浮点类型(float,dou…

实战章节:在Linux上部署各类软件

详细资料见文章的资源绑定 一、前言 1.1 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用,但是并没…

Vue3-08-条件渲染-v-if 的基本使用

v-if 是什么 v-if 一个指令, 它是用来根据条件表达式,进行选择性地【展示】/【不展示】html元素的。比如 : 有一个按钮A,当条件为真时,展示该按钮;条件为假时,不展示该按钮。与 js 中的 条件判…

HBuilderX

HBuilderX.3.98.2023112510 HBuilderX-高效极客技巧 HBuilderX的项目结构: vue-cli的项目结构: HBuilderX的项目要脱离该工具用vue-cli启动的话,要把源代码拷贝到src里面,把项目结构修改后才可以启动完成。【知道我为什么很讨厌维…

孩子都能学会的FPGA:第三十一课——用FPGA实现SPI主机发送数据

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门,作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿…

什么时候使用匿名类,匿名类解决了什么问题?为什么需要匿名类 ?

匿名类通常在以下场景下使用: 一次性使用: 当你需要创建一个类的实例,但该类只在一个地方使用,而不打算在其他地方重复使用时,可以考虑使用匿名类。 简化代码: 当创建一个小型的、一次性的类会让代码更简洁…

赛氪为第五届全球校园人工智能算法精英大赛决赛选手保驾护航

12月10日,以“智青春算未来”为主题的2023年第五届全球校园人工智能算法精英大赛全国总决赛在河海大学江宁校区举行。本次大赛由江苏省人工智能学会主办,自9月份启动以来,共吸引了全国近400所高校的3000多支参赛团队参加。经过校赛、省赛选拔…

LeetCode1143.最长公共子序列

这道题看完就大概知道要用动态规划,然后想想如何建立动态转移方程,就很简单了,我都感觉我不是想出来的,是根据直觉应该是这样的然后边想边写就出来,以下是我的代码: class Solution {public int longestCom…

虚幻学习笔记15—C++和UI(一)

一、前言 在C可以直接创建按钮、滚轮等UI,并且可以直接绑定并处理响应事件。在创建C代码后还是需要通过蓝图来显示到应用中,总体来说还是不如直接用蓝图来的方便。 本文使用的虚幻引擎为5.2.1。 二、实现 2.1、创建UUserWidgetl类型的C类 声明两个按钮…

Peter算法小课堂—简单建模(2)

太戈编程736题 题目描述: 你是一只汪星人,地球毁灭后你回到了汪星,这里每天有n个小时,你需要为自己选择正好连续的m小时作为每天睡眠的时间。从凌晨开始,第i小时内的睡眠质量为xi,请问经过选择后&#xf…

SpringBoot - application.yml 多环境切换解决方案

问题描述 这个问题玩过 SpringCloud 的小伙伴估计会想到用 bootstrap.yml 来解决这个问题。但是如果说为了解决这个问题引入了一堆的 SpringCloud Jar,就感觉杀鸡用牛刀。 于是今天我们想只有 application.yml 自己就可以解决这个问题,如何搞定&#x…

Gin之GORM 查询语句

前期工作可以看之前的(连接数据库;以及确定要操作的库) Gin之GORM 操作数据库(MySQL)-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134948202?spm1001.2014.3001.5502这次我们操作gin库下的另外一个…