MySQL基础知识每日总结(5)

news2024/11/16 15:28:57

regexp检查总是返回0(没有匹配)或者1(匹配)
一、CASE表达式
1.两种写法
①简单case表达式

case sex 
	when '1' then '男'
	when '2' then '女'
	else '其他'
end

②搜索case表达式

case
	when sex = '1' then '男'
	when sex = '2' then '女'
	else '其他'
end

以上两种写法结果相同,但是简单case表达式写法简单能实现的事情有限。
注:当when子句判断符合条件时,剩余子句不再进行。类似于java的continue。
注:不写else子句也是可以的,但是当所有条件不满足时,会返回结果null。
对case转换前的列进行group by得不到正确结果,需要对group by 也进行相同的case转换。
可以给case转换后的列定义别名,对别名进行group by就简单些。因为group by比select先执行,所以这样写并不被允许,如在Oracle和Sql server中会出错,但是Mysql不会。这是因为mysql在执行时会先对select子句里的列进行扫描。

case表达式可以判断表达式,如使用between、like、<、>、还可以使用in、exists等嵌套查询子句。

3.使用
在这里插入图片描述
需求,同一个平台month_hours>= 24为饱和,否则为不饱和
需要统计这个平台饱和的数量和不饱和的数量

select
	item_name,
	sum(case when month_hours >= 24 then 1 end) as saturation,
	sum(case when month_hours < 24 then 1 end) as no_saturation
from
	t_user_item_hours_m
group by
	item_code

二、自连接
1.在SQL里,只要给数据库表赋别名,即使是相同的表也会当作不同的表来处理。

2.当数据值中有null值时,不要使用in,应该使用exists
all实际是以多个and连接的省略写法,所以要注意null的情况
极值函数在统计时会把值为null的数据排除掉,极值函数如min,max
但是意义不同:
all:年龄比所以人都小
极值函数:年龄比最小的还小
极值函数对结果是空表会返回null
count以外的聚合函数对结果是空表会返回null

3.group by 是将一张表按照某列的不同值将表划分为一个个子集
在这里插入图片描述
如图,根据company分组

4.count(*) ,count(列名)区别:
一个是性能的区别,另一个是count(*)可以用于null,而count(列名)会先排除null再统计。

5.union:会去重,重复记录是指查询中各个字段完全重复的记录
union all:不会去重,所以效率高

6.外连接
在这里插入图片描述
NULL表示未知,所以在和任何其他值进行匹配时候都是返还的未知,所以在连接查询的时候 ON 条件后返回的是两个表的该记录是否匹配,结果需要true or false,当遇到NULL值,返回的是未知,所以不会返回数据。这是在连接查询时候切记。

7.一对多
假设两张表,一张水果种类表,一张各大超市各种水果销量表,现在要求各种水果总销量
方法①:
先对水果销量表进行种类分组求销量和再外连接水果种类表。
但是这样性能是有一定影响的,先对水果销量表进行处理后生成的临时视图存储在内存中且没有主键索引,所以无法进行索引优化。
方法②:
水果种类和水果销量表中的水果种类数据其实是一对多的关系,所以可以先进行一对多外连接再进行分组查询。

一对一或一对多的两个集合,在进行连接操作后行数不会异常地增加。

8.数字不连续求小于它的最接近的数字
步骤:①求小于它的数字;②使用max函数
函数的重要性:max函数和min函数

三、视图和临时表
1.视图
从SQL的角度来看,视图就是一张表,存在表名、字段列。视图和实体表的区别就在与:是否保存了实际数据。
视图本身是一个不含任何数据的虚拟表,数据库中存放视图的定义(保存好的SELECT语句),而不存放视图对应的数据。
使用实体表创建视图后,实体表中的数据发生变化,视图查询出的数据就会发生变化。这是因为视图每次使用时,都会调用创建视图时的SQL查询语句,所有相当于每次使用都会更新视图。
视图不是表,视图是虚表。

2.创建视图

create [or replace] view view_name
As 
select_statement  //sql查询语句

视图的使用和普通表一样直接使用视图名即可。

3.删除视图

DROP VIEW view_name

4.临时表
临时表是一个保存了实际数据的表。
临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。

5.创建临时表

CREATE TEMPORARY TABLE 临时表名 AS
select_statement  //sql查询语句

当然,也可以用创建普通表的语句创建临时表,唯一区别就是要加上TEMPORARY 。

6.区别
视图可以一直存在。临时表存在于它被创建的整个数据库会话过程中,下次会话就不存在了。
视图只存在于单个查询当中,每次使用该视图名,其虚拟表就会根据现有的数据重新被创建。临时表不会主动更新。
视图效率一般,因为都是每次用的时候才会查,而临时表效率更好,缺点就是临时表数据可能是旧的。
在一个查询SQL里面只能使用一次临时表。临时表不方便。

例:

SELECT *
FROM test t1, test t2
WHERE t1.task_code = t2.task_code;

test是一个临时表,当在一个sql里使用多次test时会报错Can't reopen table: 'test'

7.with介绍
WITH语句的作用是创建一个或多个临时命名结果集,这些结果集可以被后续语句引用。
语法:

WITH cte_name (column_list) AS (
  SELECT ...
)
SELECT ...

cte_name是临时命名结果集的名称,column_list是该结果集的列名列表,可以省略。WITH语句中使用的SELECT语句可以是任意有效的查询语句,包括聚合函数、联结等操作。
例:

with t1 as (
select
	task_code,
	task_name
from
	veh_task vt)
select
	*
from
	t1

WITH 和 temporary 临时表的主要区别
作用范围:WITH 子句生成的临时表(Common Table Expression, CTE)仅在当前查询中有效,在查询执行后即会被销毁。而 temporary 临时表可供所有会话和用户使用,只有在会话或连接关闭后才会被销毁。
使用方式:使用 WITH 子句生成的临时表(CTE)可直接集成在 SQL 查询中,在逻辑上将其视为一个子查询。而 temporary 临时表则需要通过 CREATE TEMPORARY TABLE 语句显式创建,并在使用后通过 DROP TEMPORARY TABLE 语句显式销毁。
执行时机:CTE 是在执行查询之前计算的,而 temporary 临时表是在查询执行时创建的。
执行效率:由于 CTE 不需要在磁盘上创建物理表,因此其生成速度通常比 temporary 临时表更快。但在一些情况下,temporary 临时表也可以以流的方式进行处理,从而提高查询性能。
一个SQL里的重复使用:CTE可以,temporary 临时表不可以。

with t1 as (
select
	task_code,
	task_name
from
	veh_task vt)
select
	*
from
	t1
inner join t1 as t2 on
	t1.task_code = t2.task_code;

8.关于递归查询
在这里插入图片描述
在这里插入图片描述
RECURSIVE是MySQL8.0以后引入的,用于在CTE中实现递归查询。当需要进行递归查询时,可以在WITH语句中使用RECURSIVE关键字,并使用UNION ALL语句来实现递归操作。

WITH RECURSIVE sub_depts(dept_id, dept_name) AS (
  SELECT dept_id, dept_name
  FROM sys_depart
  WHERE dept_id = X
  UNION ALL
  SELECT sd.dept_id, sd.dept_name
  FROM sub_depts sd
  JOIN sys_depart d ON sd.dept_id = d.parent_id
)
SELECT dept_id, dept_name
FROM sub_depts;

MySQL8.0之前的递归:

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

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

相关文章

SpringCloudAlibaba:服务注册与发现之Nacos学习

目录 一、服务注册与发现介绍 1、常见注册中心 2、服务注册与发现的基本流程是: 3、服务注册与发现的主要好处是: 二、Alibaba Nacos 介绍 三、Nacos基本使用 1.linux安装包方式单节点安装部署 1. jdk安装配置 2. nacos安装 2.Nacos集成SpringBoot实现服务注册与发现…

跨国企业的组网需求分析

【案例背景】 经济全球化的背景下&#xff0c;跨国企业如何解决数据远距离传输的问题&#xff0c;稳定、安全、快速地搭建企业内网&#xff0c;影响着业务的正常开展。 【客户需求】 这家跨国企业在国内外均有办事处&#xff0c;其中国内的办公人员需要访问位于国外的内部服务…

交直流系统潮流计算(含5种控制模式)matlab代码

目录 1主要内容 2 部分代码 3 程序结果 4 下载链接 1主要内容 该程序参考文献《交直流系统潮流计算及相互关联特性分析》&#xff0c;采用5种交直流潮流控制方式&#xff1a;1.定电流定电压 2.定电流定熄弧角 3.定功率定电压 4.定功率定熄弧角 5.定触发角定电流。以9节点系…

LNMP服务

目录 一、安装Nginx服务 1.编译安装nginx服务 2.添加nginx系统服务 二、安装Mysql服务 1.编译安装mysql服务 2.修改mysql配置文件 3.设置路径环境变量 4.初始化数据库 5.添加mysql系统服务 6.修改mysql 的登录密码 三、安装配置 PHP 解析环境 1.安装环境依赖包 2.编…

【论文阅读】Neuralangelo:高保真神经表面重建

【论文阅读】Neuralangelo&#xff1a;高保真神经表面重建 Abstract1. Introduction2. Related work3. Approach3.1.预备工作3.2.数值梯度计算3.3.渐进细节层次3.4.优化 4. Experiments4.1. DTU Benchmark4.2. Tanks and Temples4.3.细节水平4.4.消融 5. Conclusion paper proj…

(栈和队列) 1047. 删除字符串中的所有相邻重复项 ——【Leetcode每日一题】

❓1047. 删除字符串中的所有相邻重复项 难度&#xff1a;简单 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回…

小波和小波变换(应试)

零基础小白共计花费2小时38分04秒完成对小波的“平地起高楼”学习。 记录所有学习过程。 一、大致浏览PPT 这个阶段跳着看&#xff0c;太难的跳过 1.总结知识点 共四个部分 1.小波介绍 2.小波变换 小波变换的定义连续小波变换的定义离散小波变换小波重构 3.哈尔小波变换 …

华为OD机试真题 Java 实现【相对开音节】【2022Q4 100分】,附详细解题思路

一、题目描述 相对开音节构成的结构为辅音元音&#xff08;aeiou&#xff09;辅音(r除外)e&#xff0c;常见的单词有life,time,woke,coke,joke,note,nose,communicate&#xff0c;use&#xff0c;gate&#xff0c;same&#xff0c;late等。 给定一个字符串&#xff0c;以空格…

【Python接口自动化】--深入了解HTTP接口基本组成和网页构建原理

目录 引言 1、HTTP简介 2、HTTP原理和网页基础 2.1、 HTTP基本原理 2.2、 HTTP请求过程 2.3、 网页构成 引言 Python接口自动化有着广泛的应用场景&#xff0c;但是在实际使用过程中&#xff0c;可能会出现一些问题。比如&#xff0c;你不知道HTTP接口的基本构成&#xff0…

【Python编程从入门到实践第一版】P2 字符串入门

字符串入门 字符串的表示方法字符串基本函数.title().upper().lower()合并字符串删除空白 字符串&#xff0c;是一种常用的数据类别&#xff0c;而其值&#xff0c;可以顾名思义&#xff0c;是由字符组成的一串&#xff0c;故称为字符串&#xff1b; 字符串的表示方法 单引号、…

Andriod开发 SimpleAdapter BaseAdapter

1.SimpleAdapter 上一篇博客介绍的ArrayAdapter只能接受数组作为数据源&#xff0c;一般用于显示一行文字&#xff0c;更复杂的内容的显示可以用SimpleAdapter来实现。 SimpleAdapter接受List<Map<String, Object>>作为数据源&#xff0c;每个Map对应一个item&am…

为什么Pitch+Deck是创业者必备技能

投资术语简介&#xff1a;Pitch vs Deck vs BP BP以PPT形式出现的阅读式商业计划书&#xff0c;旨在无人讲解的前提下&#xff0c;通过文字和图表阐述项目商业信息。Deck单纯为营销演讲或融资推介所准备&#xff0c;以极少量文字图标和图像的介绍来辅助演讲的幻灯片。Pitch创业…

Spring Security 6.x 系列【52】扩展篇之集成第三方登录组件JustAuth

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 简介2. 入门案例3. 流程分析3.1 申请授权3.2 登录4. Spring Security 整…

MySQL 避「坑」指南 —— 你能设置出正确的主键吗?

前言 主键&#xff0c;可以唯一标识表中的某一行&#xff08;记录&#xff09;。合理地设置主键&#xff0c;可以帮助我们准确、快速地找到所需要的数据记录。但是设置出正确的主键似乎并没有那么简单&#xff0c;请思考如下几个问题&#xff1a; 表中的业务字段可以用来做主…

Java-Servlet解析

文章目录 前言Servlet定义内部解析总结servlet接口实际应用的servletGenericServlet类和HttpServlet类 HttpServlet中的设计模式首先看一下模板方法的定义逐步解析 SpringMVC应用 前言 从事Javaweb项目开发有一段时间了&#xff0c;一直不理解它是怎么一回事&#xff0c;后来查…

Fiddler抓包工具之高级工具栏中的Inspectors的使用

高级工具栏中的Inspectors的使用 Inspectors 页签允许你用多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片&#xff0c;HTML/JS/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合http标准的请求和响应头。Cookies标签可以看到…

【Web服务应用】搭建LNMP架构

搭建LNMP架构 一、编译安装MySQL服务二、安装Nginx服务三、安装配置PHP解析环境四、部署Discuz社区论坛Web应用五、部署博客论坛应用六fpm进程优化 一、编译安装MySQL服务 1.安装MySQL环境依赖包 yum -y install gcc gcc-c ncurses ncurses-devel bison cmake2、创建运行用户 u…

NIMA: Neural Image Assessment

摘要:基于自动学习的图像质量评估技术在评价图像采集管道、存储技术和共享媒体等方面具有广泛的应用价值&#xff0c;近年来已成为图像质量评估研究的热点。尽管这一问题具有主观性&#xff0c;但现有的大多数方法仅对AVA[1]和TID2013[2]等数据集提供的平均意见得分进行预测。我…

电脑怎么录屏?推荐2个好用的win7录屏方法!

案例&#xff1a;win7电脑怎么录屏&#xff1f; 【我的电脑是win7系统&#xff0c;我想录制它的电脑屏幕。有没有小伙伴知道win7电脑怎么录屏&#xff1f;有没有适合win7电脑的录屏工具】 随着数字时代的发展&#xff0c;屏幕录制已经成为一种常见的需求。在教育、演示、游戏…

❤️爆肝熬夜开发了一个基于SSM的办公用品领用系统,现在开源给你!毕设面试学习都不愁了!❤️

大家好&#xff0c;我是兔哥&#xff0c;我又来分享项目啦。 1.写在前面 之前有个粉丝找到我&#xff0c;问有没有什么真正手把手的教SSM框架的视频&#xff0c;说网上找到的大都很复杂或者资料不全。 我说不需要整这么麻烦&#xff0c;我自己给你录一套手把手的教程吧。 ❤…