[MySQL]常用函数,统计函数,分组查询和过滤,以及子查询

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 哈喽,大家好!我是保护小周ღ,本期为大家带来的是 MySQL 数据库常用函数,以及分组查询和子查询数据表的基本操作:创建、删除、修改表,针对修改表的结构进行了讲解,随后是如何向数据表中添加数据,浅浅的提了一下表中数据的查询,更多相关知识敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★*

哈喽,大家好!我是保护小周ღ,本期为大家带来的是 MySQL的常用函数,统计函数,分组查询和过滤,以及子查询,更多相关知识敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★*

一、函数

1.1 常用函数(了解)

--数学运算SELECTABS(-8)  --绝对值SELECTCEILING(9.4) --向上取整SELECTFLOOR(9.4) --向下取整SELECTROUND(3.1415926,2)
--重要SELECTrand()  --生成一个随机数--字符串函数SELECTCHAR_LENGTH('你好') --字符串长度SELECTCONCAT('你','好') --字符串拼接SELECTLOWER('HELLO') --字符串转换成小写SELECTUPPER('hello') --字符串转换成大写--时间和日期函数SELECTCURRENT_DATE() --获取当前日期--重要SELECTSYSDATE() --获取当前日期时间

1.2 统计函数|聚合函数|分组函数(常用)(掌握)

--简单使用SELECTSUM(`sal`) AS总和FROMempSELECTAVG(`sal`) AS平均值FROMempSELECTMAX(`sal`) AS最大值FROMempSELECTMIN(`sal`) AS最小值FROMempSELECTCOUNT(`sal`) AS计数FROMemp;
--同时显示多个SELECTSUM(`sal`) ,
AVG(`sal`) 平均值,
MAX(`sal`) 最大值,
MIN(`sal`) 最小值,
COUNT(`sal`) 个数FROMemp;
--聚合函数支持哪些类型SELECTSUM(ename), AVG(ename)
FROMempSELECTSUM(hiredate), AVG(hiredate)
FROMempSELECTMAX(ename),MIN(ename)
FROMempSELECTMAX(hiredate),MIN(hiredate)
FROMempSELECTCOUNT(ename)
FROMemp;
SELECTCOUNT(comm)
FROMemp;
--count()
SELECTCOUNT(mgr) fromemp; --Count(指定列,字段)会忽略所有的null值--本质都是计算行数,count*把所有列都计算一遍,count1是把所有的行都变成1返回一个结果SELECTCOUNT(*) fromemp; --不会忽略null值SELECTCOUNT(1) fromemp; --不会忽略null值

二、 分组查询和过滤(掌握)

--查出所有员工的平均工资selectavg(sal)
fromemp--我想根据不同的部门看一下不同部门的平均工资

image.png

group by 字句语法

select列(要求出现在groupby的后面),分组函数fromwhere筛选条件groupby分组的列表orderby字句--注意:查询列表比较特殊,要求是分组函数和groupby后出现的字段
--简单的分组查询--查出每个工种的最高工资SELECTjob,MAX(sal)
fromempGROUPBYjob;
--查出每个部门的人数SELECTdeptno, COUNT(*)
fromempGROUPBYdeptno--查询每个岗位的平均工资SELECTjob,avg(sal) 
FROMscott.empGROUPBYjob;
--查询每个部门中每个岗位的人数和平均工资SELECTdeptno,job,count(*),avg(sal) 
FROMscott.empGROUPBYdeptno,job;
--分组前查询--查出每个岗位名称带E的人数个数SELECTjob,count(*)
FROMscott.empWHEREenamelike'%E%'GROUPBYjob--查询除去财务部门外不同部门名称的最高薪资,最低薪资,平均薪资SELECTdname, MAX(sal), MIN(sal),AVG(sal)
fromdeptdINNERJOINempeond.deptno=e.deptnowheredname!='财务'GROUPBYd.dname--分组后查询--查询哪个部门的员工个数<6SELECTdeptno, count(*)
fromempGROUPBYdeptnoHAVINGCOUNT(*) <6--查询每个部门的人数,只显示4人以上的部门SELECTdeptno,count(*)
FROMscott.empGROUPBYdeptnoHAVINGcount(*)>4;
--查询每个岗位中名字包含E的员工人数,只显示超过2人的岗位和人数SELECTjob,count(*)
FROMscott.empWHEREenamelike'%E%'GROUPBYjobHAVINGcount(*)>2;
--分组后查询,查询不同部门名称的最高薪资,最低薪资,平均薪资,平均薪资大于900SELECTdname, MAX(sal),MIN(sal),AVG(sal)fromdeptdINNERJOINempeond.deptno=e.deptnoGROUPBYd.dnameHAVINGMIN(sal) >900--总结:--聚合函数count、sum、avg、max、min等不能在where子句中使用。--where语句先执行过滤,having语句后执行过滤--WHERE后面不允许写分组函数,HAVING后面不允许写未分组的字段--查询除了财务部门外不同部门的最高薪资,最低薪资,平均薪资且平均薪资大于900SELECTdname, MAX(sal), MIN(sal),AVG(sal)
fromdeptdINNERJOINempeond.deptno=e.deptnowheredname!='财务'GROUPBYd.deptnoHAVINGMIN(sal) >900--查询出各个分组里面的工作人员SELECTdname, GROUP_CONCAT(ename)
fromdeptdINNERJOINempeond.deptno=e.deptnoGROUPBYd.dname

三、子查询(掌握)

  • 1.一般来说,连接查询都可以用子查询替换。
  • 2. 相对于表连接,子查询适合于作为查询的筛选条件。
  • 3. where(值是固定的,这个值是计算出来的)
  • 4. 本质:==在where语句中嵌套一个查询语句==
--子查询|嵌套查询--执行顺序由里到外--子查询返回一个值--innerjoin展示两个表的表头信息,子查询展示一个表的信息--查询销售的所有员工(员工编号,员工姓名)
SELECTempno, ename, dnamefromempeINNERJOINdeptdone.deptno=d.deptnowhered.dname='销售'--查询销售的所有员工(员工编号,员工姓名)
SELECTempno, enamefromempewheredeptnoin (SELECTdeptnofromdeptwheredname='销售')
--查询在广州工作的员工中,哪些人的名字中包含有E,要求显示员工姓名和部门编号SELECTename, deptnofromempwheredeptno= (selectdeptnofromdeptwhereloc='广州') andenamelike'%E%'--查询SMITH的领导姓名SELECTenameFROMscott.empWHEREempno=(SELECTmgrFROMscott.empWHEREename='SMITH');
--查询编号是7521,7566,7654,7698,7782的员工,哪些是BLAKE的下属SELECT*FROMempWHEREempnoin (7521,7566,7654,7698,7782) andmgr= (selectempnofromempwhereename='blake')
--查询KING的下属哪位在上海工作,要求显示员工编号,员工姓名,岗位,领导工号,部门编号SELECTempno, ename, job, mgr, deptnoFROMempWHEREdeptno= (selectdeptnofromdeptwhereloc='上海') andmgr= (selectempnofromempwhereename='king')    
--子查询返回多个值--查询北京和上海的所有员工信息SELECT*FROMscott.empWHEREdeptnoin(SELECTdeptnoFROMscott.deptWHERElocin('北京','上海'));
--查询KING的工资占公司总工资的比例SELECT (SELECTsalFROMscott.empWHEREename='KING')/(SELECTsum(sal) FROMscott.emp) FROMdual;
SELECTsal/(SELECTsum(sal) FROMscott.emp) FROMscott.empWHEREename='KING';


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
20天前
|
SQL 关系型数据库 MySQL
Mysql-常用函数及其用法总结
以上列举了MySQL中一些常用的函数及其用法。这些函数在日常的数据库操作中非常实用,能够简化数据查询和处理过程,提高开发效率。掌握这些函数的使用方法,可以更高效地处理和分析数据。
37 19
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
本文详细介绍了MySQL中的多表查询,包括多表关系、隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询及其实现方式,一文全面读懂多表联查!
【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数
|
19天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
152 0
|
2月前
|
存储 关系型数据库 MySQL
10个案例告诉你mysql不使用子查询的原因
大家好,我是V哥。上周与朋友讨论数据库子查询问题,深受启发。为此,我整理了10个案例,详细说明如何通过优化子查询提升MySQL性能。主要问题包括性能瓶颈、索引失效、查询优化器复杂度及数据传输开销等。解决方案涵盖使用EXISTS、JOIN、IN操作符、窗口函数、临时表及索引优化等。希望通过这些案例,帮助大家在实际开发中选择更高效的查询方式,提升系统性能。关注V哥,一起探讨技术,欢迎点赞支持!
171 5
|
2月前
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
69 8
|
2月前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
103 11
|
15天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
61 42
|
2月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
66 3