当前位置: 首页 > news >正文

mysql高级用法常用函数

mysql高级用法

1、自定义排序
select *
from movies
order by field(actors, '成龙', '靳东', '刘亦菲', '范冰冰');
// 字段中存在null值
select *
from movies
order by field
(coalesce(actors,'null'),'成龙', '靳东', '刘亦菲', '范冰冰','null')
2、空值NULL排序(ORDER BY IF(ISNULL))
order by if(isnull(字段),0,1)语法将null值转化为0或1,实现null值数据排序到数据集前面还是后面
// 如果actors为null时,赋值为0,不为null时,赋值为1.
select * from movies order by actors,price desc;
select * from movies order by if(ISNULL(actors),2,1),actors,price desc;
3、CASE表达式(CASE。。。WHEN)
select *,case when price > 80 then '高'else '低' end as levelfrom movies;
4、分组连接函数(GROUP_CONCAT)
分组连接函数可以在分组后指定字段的字符串连接方式,并且还可以指定排序逻辑,连接符默认为英文逗号。也可以加distinct
select actors,group_concat(movie_name),group_concat(price) from movies group by actors;select actors,group_concat(movie_name order by price desc separator '_'),group_concat(price order by price desc separator '_')
from movies group by actors;
5、分组统计数据后再进行统计汇总(with rollup)
with rollup在分组统计数据的基础上再进行数据统计汇总,即将分组后的数据进行汇总
select actors,sum(price) from movies group by actors with rollup ;
6、子查询提取(WITH AS)
查询中多个子查询需要使用同一个子查询结果
with m1 as(select * from movies where price > 50),m2 as(select * from movies where price >= 65)
select * from m1 where m1.id not in(select m2.id from m2) and m1.actors = '刘亦菲'
7、优雅处理数据插入,更新时主键,唯一键重复
更新数据时,有时会遇到主键重复的场景
1、插入数据时使用ignore,作用时插入的值遇到主键或唯一键重复时自动忽略重复的数据,不影响后面数据的插入,有则忽略,无则插入。
insert ignore into movies(id,movie_name,actors,price,release_date)
values (13,'神话','成龙',100,'2022-11-11')2、使用replace关键字,当插入的记录遇到主键或者唯一键重复时先删除表中重复的记录行再插入,即有则删除+插入,无则插入
replace into movies(id,movie_name,actors,price,release_date)
values (13,'神话','成龙',100,'2022-11-11')3、更新数据时使用on duplicate key update。作用就是当插入的记录遇到主键或者唯一键重复时,会执行后面定义的update操作,相当于先执行insert操作,再根据主键或者唯一键执行update操作,即有则更新,无则插入
insert into movies(id,movie_name,actors,price,release_date)
values (12,'神话','成龙',100,'2022-11-11') on duplicate key update price = price + 10
8、分页查询慢sql优化
1、order by 和 select 字段加联合索引
alter table t_file add index idx_score_date_name(score,release_date,film_name)
select score,release_date,film_name from t_film order by score desc limit 90000,20;
2、order by 字段加索引并手动回表
select score,release_date,film_name from t_film a join 
(select id from t_film order by score desc limit 900000,20) b on a.id = b.id
9、sql索引的分类
1、创建索引
create [unique|fulltext] index index_name on table_name(index_col_name,...)
2、查看索引
show index from table_name;
3、删除索引
drop index index_name on table_name;
例如:
普通索引:
create index idx_user_name on tb_user(name)
唯一索引:
create unique index idx_user_phone on tb_user(phone);
联合索引:
create index idx_user_pro_age_sta on tb_user(profession,age,status);
10、mysql常用函数
1、日期函数
1、Date函数
对于数据库中存在Timestamp类型可以使用DATE()转换
select user_id,DATE(create_at) from test_enum
2、if函数
1if(expression,v1,v2) 如果表达式expression成立,返回结果v1,否则,返回结构v2
select user_id,user_name,if(user_sex = '0', '女', if(user_sex = '1', '男', '未知')) as userSex,user_status
from test_enum;
2、ifnull(v1,v2),如果v1的值不为null,则返回v1,否则返回v2
select user_id,user_name,ifnull(user_sex,'男'),user_status
from test_enum;
3、isnull(expr) 如果expr的值为null,则返回1,如果expr的值不为null,则返回0,可用于含有null值的排序。
select user_id,user_name,user_status,isnull(user_sex)
from test_enum;
4nullif(expr1,expr2)比较两个字符串,如果字符串expr1和expr2相等,返回null,否则返回expr1
3、数据类型转换函数CAST():函数可以将任何类型的值转换为具有指定类型的值,利用该函数可以直接在数据库层处理部分因数据类型引起的问题
支持的类型:
BINARY	二进制型
CHAR	字符型
DATE	日期,格式为 ‘YYYY-MM-DD’
DATETIME	日期加具体的时间,格式为 ‘YYYY-MM-DD HH:MM:SS’
TIME	时间,格式为 ‘HH:MM:SS’
DECIMAL	float 型
SIGNED	intUNSIGNED	无符号int
1int类型值转为CHAR 字符型
select user_name,cast(user_status as char ) from test_enum;
2、固定时间字符串转为DATE 日期,格式为 'YYYY-MM-DD’
select user_name,cast(user_status as char ),cast(create_at as date) from test_enum;
3、固定时间字符串转为DATETIME 日期加具体的时间,格式为 'YYYY-MM-DD HH:MM:SS’
SELECT CAST('2019-08-29 16:50:21' as DATETIME) as result
4、固定时间字符串转为TIME 时间,格式为 'HH:MM:SS’
SELECT CAST('2019-08-29 16:50:21' as TIME) as result
运行结果:16:50:21
5float型值通过DECIMAL 获取精度
SELECT CAST(220.23211231 AS DECIMAL(10, 3)) AS result 
运行结果:220.232
6、固定字符串转为SIGNED intSELECT CAST("12321" AS SIGNED  ) AS result 
运行结果:12321
7、固定字符串转为UNSIGNED 无符号int
SELECT CAST("12321" AS UNSIGNED   ) AS result 
运行结果:12321
4、格式化函数FORMAT(x,n)
FORMAT(x,n)函数可以将数字x进行格式化,将x保留到小数点后n位。这个过程需要进行四舍五入。例如FORMAT(2.356,2)返回的结果将会是2.36;FORMAT(2.353,2)返回的结果将会是2.35。下面使用FORMAT(x,n)函数来讲235.3456和235.3454进行格式化,都保留到小数点后3位。
11、窗口函数

相关文章:

mysql高级用法常用函数

mysql高级用法 1、自定义排序 select * from movies order by field(actors, 成龙, 靳东, 刘亦菲, 范冰冰); // 字段中存在null值 select * from movies order by field (coalesce(actors,null),成龙, 靳东, 刘亦菲, 范冰冰,null)2、空值NULL排序(ORDER BY IF(ISN…...

【打印100个常用Linux命令】

#!/bin/bash 定义一个函数,用于打印100个常用Linux命令 print_commands() { echo “以下是一些常用的Linux命令:” echo “----------------------------------” echo “1. pwd - 显示当前工作目录” echo “2. ls - 列出当前目录下的文件和文件夹” …...

友情提示:lazarus的tsortgrid.autofillcolumns存在BUG

直接在tsortgrid的属性中设置autofillcolumns为true,会提示:123个错误。即使修改为false,编译运行照样会出现上述错误。唯一解决的办法就是删除sortgrid重新添加一个。 代码设置SortGrid1.AutoFillColumns : TRUE不受影响。...

github的个人readme文件

一个好的svg图: Simon-He95/profile-3d-contrib/profile-season-animate.svg at 4281d9f46e3d5416bd8f8cc5779157bfdaa8589d Simon-He95/Simon-He95 GitHub 请访问他的主页从提交记录就可以看到这个立体的登录github的图...

java面试题: HashMap、HashSet 和 HashTable 的区别

HashMap 常用方法 HashMap 是一个基于哈希表的 Map 接口的实现。它允许使用 null 值和 null 键。 java 复制 // 创建一个HashMap HashMap<KeyType, ValueType> map new HashMap<>(); // 添加元素 map.put(key, value); // 获取元素 ValueType value map.get…...

CPP初级:模板的运用!

目录 一.泛型编程 二.函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 三.函数模板的实例化 1.隐式实例化 2.显式实例化 3.模板参数的匹配原则 四.类模板 1.类模板的定义格式 2.类模板的实例化 一.泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码…...

排序---基数排序

前言 个人小记 一、简介 基数排序是一种非比较排序&#xff0c;所以排序速度较快&#xff0c;当为32位int整数排序时&#xff0c;可以将数分为个位十位分别为2^16,使得拷贝只需要两轮&#xff0c;从而达到2*n&#xff0c;然后给一个偏移量&#xff0c;使得可以对负数排序。以…...

“新高考”下分班怎么分?

来自安徽的张女士告诉我&#xff1a;上一年孩子升入了高中&#xff0c;但没想到才高一&#xff0c;孩子就面临了一个困难的挑选&#xff1a;312”分班&#xff01; 什么是312”分班呢&#xff1f;许多人或许不明白&#xff0c;便是要求学生在高一入学时&#xff0c;针对于3门必…...

二叉树的层序遍历-力扣

本题是二叉树的层序遍历&#xff0c;通过一个队列来控制遍历的节点&#xff0c;二叉树每层的节点和上一层入队的节点个数是相同的&#xff0c;根据这一点编写循环条件。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …...

N32G45XVL-STB之移植LVGL(lvgl-8.2.0)

目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 2 认识LVGL 2.1 LVGL官网 2.2 LVGL库文件下载 3 移植LVGL 3.1 准备移植文件 3.2 添加lvgl库文件到项目 3.2.1 src下的文件 3.2.2 examples下的文件 3.2.3 配置文件路径 3.2…...

【设计模式】创建型设计模式之 原型模式

介绍 原型模式是一种创建型设计模式&#xff0c;主要用于创建重复的对象&#xff0c;而无需重新初始化它们&#xff0c;从而提高效率并简化对象的创建过程。此模式的核心思想是利用已存在的对象实例&#xff0c;通过复制&#xff08;克隆&#xff09;的方式来生成新的对象&…...

【类型商店】字符字符串(下)

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#Y清墨&#xff0c;今天呐&#xff0c;我要介绍的是字符与字符串。 导语 前两期&#xff0c;我们已经懂得了概念&#xff0c;今天来看些函数。 正题 一.增加或连接 &#xff08;1) 后面增加() string s1,s2; //定义 s…...

『 Linux 』内存管理与文件系统

文章目录 交换分区页与页框(页帧)交换分区与内存之间的交换操作系统如何管理内存物理地址转换页号与页内偏移量 内存管理,文件系统与文件管理之间的联系 交换分区 在Linux的安装过程中,用户将会被提示创建一个交换分区; 这是一个特殊的分区,其大小可以由用户根据系统内存需求和…...

线性代数|机器学习-P8矩阵低秩近似eckart-young

文章目录 1. SVD奇异值分解2. Eckart-Young2.1 范数 3. Q A Q U Σ V T QAQU\Sigma V^T QAQUΣVT4. 主成分分析图像表示 1. SVD奇异值分解 我们知道&#xff0c;对于任意矩阵A来说&#xff0c;我们可以将其通过SVD奇异值分解得到 A U Σ V T AU\Sigma V^T AUΣVT&#xff0…...

平面设计神器CorelDRAW2021精简版,你值得拥有!

亲爱的设计师小伙伴们&#xff0c;今天我要为大家种草一款神奇的软件——CorelDRAW平面设计软件2021精简版&#xff01;&#x1f929;✨作为一名专业的图形设计师&#xff0c;我深知一个好工具对于我们的工作有多么重要。而这款软件简直就是我们设计师的救星&#xff01;&#…...

kafka是什么?

Kafka是一个由Apache软件基金会开发的开源流处理平台&#xff0c;最初由LinkedIn公司开发&#xff0c;使用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统&#xff0c;可以处理消费者在网站中的所有动作流数据&#xff0c;如网页浏览、搜索和其他用户行为等。Kafk…...

ABC351

C 栈的应用 #include<bits/stdc.h>using namespace std;stack<int>stk;int main() {int n;cin>>n;for(int i1;i<n;i){int a;cin>>a;while(!stk.empty()&&astk.top()){stk.pop();a;}stk.push(a);}cout<<stk.size()<<endl;retur…...

base上海,数据科学,数据挖掘,数据分析等岗位求收留

裁员了&#xff0c;base上海&#xff0c;数据科学&#xff0c;数据挖掘&#xff0c;数据分析等岗位&#xff0c;期望30k~40k&#xff0c;求推荐求收留 1&#xff0c;6年数据算法工作&#xff0c;做过指标体系搭建&#xff0c;用户画像&#xff0c;货品定价&#xff0c;社区分析…...

IC元器件

1.电阻&#xff1a; 电阻的作用&#xff1a; 1.与负载串联&#xff1a;做限流分压 2.电阻并联&#xff1a;将小功率电阻并联成大功率&#xff0c;防烧毁 2.电容&#xff1a; 电容就是两块金属板&#xff0b;中间的介质&#xff08;相当于两个人坐在一起加上中间的空气…...

SQL159 每个创作者每月的涨粉率及截止当前的总粉丝量

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-01 10:00:002021-09-01 10:00:20011NULL210520022021-09-10 11:00:002021-09-10 11:00:30101NULL310120012021-10-01 10:00:002021-10-01 10:00…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...