MySQL数据库第十一课---------SQl语句的拔高-------水平提升

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL数据库第十一课---------SQl语句的拔高-------水平提升

内置函数

日期函数

now()

select now();

获取当前时间(获取到秒)


year()

select year(now());

获取当前的年,注意一下year()里的()要填now()

month()

select month(now());

获取当前月份


day()

select day(now());

获取当前的日期

length

select first_name, length(first_name) from new_employees limit 0,10;

查看字符长度


round

select round(1.22, 3)

注意一下,这里的保留小数不会自动补全,会四舍五入

reverse()

字符串翻转

select first_name, reverse(first_name) from new_employees limit 0,10;

substring()

截取字符串

1. -- 截取字符串
2. -- start开始的位置,如果没有则默认从第一位开始,length截取的长度
3. SUBSTRING(column, start, length)

column:字段

start:从哪一位开始

length:截取的长度

select first_name, substring(first_name,1,5) from new_employees limit 0,10;

ifnull()

判空

会把null(空)变成别名

select ifnull(`daa`, '111') from aaa;;

isnull

nvl

coalesce

这三个都是一样的效果

case when(当...)

这个函数一点特别,就拿python的if ...elif....else(或者C语言的if.....else if.....else)来说,我们只需写好条件和代码块就行了,但是这个函数的写法是这样的

select 
case when 条件
    then '运行内容1'
when 条件
    then '运行内容2'
else "运行内容"
end  as  别名

其实sql语句没有格式,这样写是为了让大家好看,when 相当于else if()  

cast

以前的数据库的不同类型的数据不能相加和相减的,而现在的数据库有些可以,mysql就是之一

现在已经不支持了,这里演示不了

-- cast(column as data_type)
-- 更改字段类型
select cast(column as int(10)) from table
select cast(column as char(10)) from table

grouping sets

前面我们学过一个分组,group by,这个方法把所有的符合条件的分成一组,只显示出集体,不显示出个人,简单理解为分组加聚合

如图,而grouping sets

这个在mysql中也无法使用,但是我们可以做出这样的效果

select
depart
,gender
,count(id) cnt
from table
grouping sets(
(depart) -- 部门维度
,(gender) -- 性别维度
,(depart, gender) -- 部门及性别的维度
,() -- 不分组,全部人数
​​​​​​​)

结果:

排序函数

在前面中我们学过一个order by


而这个排序函数起到的就是给个编号这样可以方便我们查找

分三类

row_number() over()  as 别名   ====》从小到大,依次往下

rank() over() as 别名   ======》从小到大 相同数据位居一样,但是不同数据名次依旧

dense_rank()  over() as 别名  =====》从小到大,相同数据位居一样  名次从1开始无断层

-- row_number() 根据选择字段排序,若存在相同数据,则随机排顺序
-- 根据年龄从大到小排序
select
row_number() over(order by age desc) rk
from table
-- rank() 根据选择字段排序,若存在相同数据,则并列名次,但是名次个数任然占用
-- 根据年龄从小到大排序
select
rank() over(order by age) rk
from table
-- dense_rank() 根据选择字段排序,若存在相同数据,则并列名次,但是名次个数不占用
-- 根据年龄从小到大排序
select
dense_rank() over(order by age) rk
from table



4856eec119424433abb59c0bd66aa730.png

开窗函数

-- function([column]) OVER(partition by column [order by column])
-- function通常为聚合函数,也可以是排序的函数
-- 根据性别和年龄分组,对身高进行排序
select
row_number() over(partition by gender, age order by high) rk
from table
-- 根据性别和年龄分组,求出人数
select
count(id) over(partition by gender, age) cnt
from table
where id is not null

记住一定要有函数function,可以是avg() sum()等


partition by 是我们可以理解为是group by 的前半身,只分组不聚合,因为group by有有聚合的效果,而开窗函数缺少聚合效果,简单的说分组男女性别,就是会显示出哪个人是男性及相关信息

row_number() over () as 别名

select
emp_no
,age
,dept_no
,gender
,row_number() over(partition by dept_no,gender order by age desc) as kkk
from (
select
a.emp_no
,a.age
,a.gender
,b.dept_no
from new_employees as a join dept_emp as b on a.emp_no =b.emp_no
) as c
limit 30;

6ad7499e206f4c52b9695bd77bfaa729.png

count(0)over()as 别名

select
emp_no
,age
,dept_no
,gender
,count(1) over(partition by dept_no,gender) as kkk
from (
select
a.emp_no
,a.age
,a.gender
,b.dept_no
from new_employees as a join dept_emp as b on a.emp_no =b.emp_no limit 30
) as c;

3c721114a28046e8acb6294850cafb82.png

可以看出kkk有重复的数据,就拿第一条数据说 这条数据属于这19个数据,如果把count函数替换成avg(age)就可以明确哪个人超出平均值,哪些人没有超出

总结:

关于sql语句先介绍到这里,有不懂的小可爱可以私聊

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
11天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
11天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
13天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
12天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
20天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
97 1
|
22天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
65 2
|
22天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
16 2
|
25天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
96 4
|
27天前
|
SQL JSON Java
没有数据库也能用 SQL
SPL(Structured Process Language)是一款开源软件,允许用户直接对CSV、XLS等文件进行SQL查询,无需将数据导入数据库。它提供了标准的JDBC驱动,支持复杂的SQL操作,如JOIN、子查询和WITH语句,还能处理非标准格式的文件和JSON数据。SPL不仅简化了数据查询,还提供了强大的计算能力和友好的IDE,适用于多种数据源的混合计算。
下一篇
无影云桌面