软件设计之MySQL(3)

devtools/2024/9/25 21:27:11/

软件设计之MySQL(3)

此篇应在JavaSE之后进行学习:
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
Navicat可以在软件管家下载
使用navicat连接mysql数据库创建数据库、表、转储sql文件,导入sql数据

学习内容:

  1. 函数概述
  2. 数值函数
  3. 字符串函数
  4. 日期和时间函数
  5. 流程控制函数
  6. 加密与解密函数
  7. MySQL信息函数
  8. 聚合函数

1、函数概述

1、DBMS(数据库管理系统)函数之间的差异性很大,很多是不通用的
2、MySQL提供的内置函数从实现的功能角度可以分为数值函数字符串函数日期和时间函数流程控制函数加密与解密函数获取MySQL信息函数聚合函数等。这里,我将这些丰富的内置函数再分为两类:单行函数聚合函数(或分组函数)。

单行函数

单行函数:接收参数返回一个结果,只对一行进行变换,每行返回一个结果,其中参数可以是一列或者一个值

2、数值函数

基本函数

**> 这里是引用**

SELECT ABS(-10),SIGN(-23),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32),
FLOOR(-43.23),MOD(12,5)
#10	-1	3.141593 33	-43	32	-44	2
SELECT RAND(),RAND(10),RAND(10)
#0.7992655269794776	0.6570515219653505	0.6570515219653505 
SELECT ROUND(123.4),ROUND(123.456,1),ROUND(123,-1)
#123 123.5(保留1位小数) 120
SELECT TRUNCATE(12.55,1)
# 12.5(截断)

三角函数

角度与弧度互换函数:
1、RADIANS(x):将角度化为弧度
2、DEGREES(x):将弧度化为角度
3、圆周长:2πr,一段r长度对应1弧度,所以整个圆的弧度是2π

在这里插入图片描述

指数和对数

在这里插入图片描述

进制间的转换

在这里插入图片描述

#1111从2进制转换为8进制
SELECT CONV(1111,2,8)

3、字符串函数

在这里插入图片描述

SELECT ASCII('abc')
# 97
SELECT CHAR_LENGTH('hello'),CHAR_LENGTH('我'),LENGTH('hello'),LENGTH('我')
#5 1 5 3
#CONCAT
SELECT CONCAT(emp.last_name,' worded for',mgr.last_name)
FROM employees emp JOIN employees mgr
WHERE emp.manager_id = mgr.employee_id;
#CONCAT_WS  HELLO-WORLD
SELECT CONCAT_WS('-','HELLO','WORLD') 
#INSERT 字符串索引从1开始,按索引替换
SELECT INSERT('helloword',2,3,'aaa') #haaaoword
#REPLACE 将选定字符串替换
SELECT REPLACE('hello','ll','mew')#hemewo
#UPPER,LOWER 改变大小写
SELECT UPPER('a'),LOWER('A')

在这里插入图片描述

#LPAD:右对齐效果,若不到10个字符,则左补*(字符数10和*都可以改)
SELECT employee_id,last_name,LPAD(salary,10,' ')
FROM employees;
#RPAD:左对齐效果,若不到10个字符,则右补*(字符数10和*都可以改)
SELECT employee_id,last_name,RPAD(salary,10,' ')
FROM employees;
#TRIM(s1 FROM s)去除首尾指定s1
SELECT TRIM('o'FROM'ooheollo')#heoll
#REPEAT返回重复n次的结果
SELECT REPEAT('a',4)#aaaa
#STRCMP比字符串ASCII码大小,前者大返回1,后者大返回-1
SELECT STRCMP('ABC','ABA')#1
#SUBSTR返回从位置2开始返回的3个字符
SELECT SUBSTR('hello',2,3)#ell
#LOCATE返回指定字符串在另一字符串首次出现的位置
SELECT LOCATE('l','hello')#3

4、日期和时间函数

获取日期、时间

在这里插入图片描述

日期与时间戳的转换

在这里插入图片描述

#UNIX_TIMESTAMP返回的是毫秒数
#FROM_UNIXTIME将输入的毫秒数转化为UNIX时间戳形式(2024-08-15 17:01:18)
SELECT UNIX_TIMESTAMP(),FROM_UNIXTIME(1723712478)
SELECT UNIX_TIMESTAMP('2022-10-10 11:11:11')

获取月份、星期、星期数、天数等函数

在这里插入图片描述

日期的操作函数

EXTRACT(type FROM date):返回指定日期中特定的部分,type指定返回的值

在这里插入图片描述

#获取秒数
SELECT EXTRACT(SECOND FROM NOW())

时间和秒钟转换的函数

在这里插入图片描述

SELECT TIME_TO_SEC(CURTIME()),TIME_TO_SEC('12:12:12')
SELECT SEC_TO_TIME(1000)#00:16:40

计算日期和时间的函数

在指定的日期时间进行加减操作

在这里插入图片描述

#指定日期减一年
SELECT DATE_ADD(NOW(),INTERVAL -1 YEAR) 

在这里插入图片描述

日期的格式化与解析

格式化:日期转化为字符串
解析:字符串转化为日期
在这里插入图片描述
在这里插入图片描述

#格式化:
SELECT DATE_FORMAT(CURRENT_DATE,'%Y:%c:%e'),
TIME_FORMAT(CURRENT_TIME,'%k:%i:%s')
FROM DUAL;
#解析:
SELECT STR_TO_DATE('2014-04-22 15:47:06','%Y-%m-%d %H:%i:%s')
FROM DUAL;

5、流程控制函数

流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。
在这里插入图片描述

#IF 对高低工资进行分类
SELECT last_name,salary,IF(salary>=6000,'高工资','低工资')
FROM employees;
#IF 如果commission_pct字段为NULL,输出0
SELECT last_name,commission_pct,IFNULL(commission_pct,0)
FROM employees;
#CASE WHEN THEN END 类似ifelse
SELECT last_name,salary,CASE WHEN salary>=15000 THEN'有钱'WHEN salary>=10000 THEN'还行'ELSE '穷人'END 'details'
FROM employees;
#类似switch case
SELECT employee_id,last_name,department_id,salary, 
CASE department_id
WHEN department_id=10 THEN salary*1.1
WHEN department_id=20 THEN salary*1.2
ELSE salary*1.4 END 'details'
FROM employees;

6、加密与解密函数

在这里插入图片描述

#MD5加密方式与SHA加密方式
SELECT MD5('123456'),SHA('123456')
#8.0 ENCODE、DECODE、PASSWORD被弃用

7、MySQL信息函数

在这里插入图片描述

8、聚合函数

输入是一组数据的集合,输出是单个值

常见聚合函数

AVG、SUM、MAX、MIN

分别对应平均值、总和、最大值、最小值
AVG、SUM只适用于数值类型的字段
MAX、MIN适用于数值类型、字符串类型、日期时间类型的字段

SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary)
FROM   employees

COUNT

作用:计算指定字段在查询结构中出现的个数(不包含空值NULL)
计算表中有多少条记录的方法:
1、COUNT(*)
2、COUNT(1)

SELECT COUNT(commission_pct)
FROM   employees

GROUP BY

聚合字段:COUNT、MAX等
SELECT中出现的非聚合字段必须出现在GROUP BY中,反之不需满足
GROUP BY声明在FROM后、WHERE后、ORDER BY前、LIMIT前
当使用ROLLUP时,不能同时使用ORDER BY进行结果排序

#查询各部门、各工种的平均工资
SELECT department_id,job_id,AVG(salary)
FROM   employees
GROUP BY department_id,job_id;
#不同点在于,会多一条记录计算总体平均值(因为此处是AVG)
SELECT department_id,AVG(salary)
FROM   employees
GROUP BY department_id WITH ROLLUP

HAVING的使用

如果过滤条件中使用了聚合函数,则必须使用HAVING来替换WHERE;
如果过滤条件中没有聚合函数,则此过滤条件声明在WHERE中或HAVING中,但最好WHERE中
HAVING必须声明在GROUP BY后面

SELECT department_id,MAX(salary)
FROM   employees
GROUP BY department_id
HAVING MAX(salary)>10000;

SQL底层执行原理

SELECT语句完整结构

在这里插入图片描述
在这里插入图片描述

SQL语句执行过程

FROM–>ON–>(LEFT/RIGHT JOIN) -->WHERE
WHERE–>GROUP BY -->HAVING -->SELECT
SELECT -->DISTINCT–>ORDER BY–>LIMIT


http://www.ppmy.cn/devtools/94891.html

相关文章

Vue 3 中的观察者效果:从 watch 到 watchEffect、watchSyncEffect 和 watchPostEffect

目录 watch 函数 watchEffect 函数 watchSyncEffect 函数 watchPostEffect 函数 watchEffect 与 watch 的差异 watchSyncEffect 的特定用例 watchPostEffect 的优势 使用场景对比 Vue.js 是一个广受欢迎的前端框架,以其直观的数据绑定和组件化架构著称。Vue 3…

AI技术重塑招聘流程

一、引言 随着科技的飞速发展,人工智能(AI)技术正以前所未有的速度渗透到社会的各个领域,其中,人力资源管理领域也不例外。在全员招聘这一关键环节中,AI技术的应用不仅极大地提高了招聘效率,还…

合规性导航:处理爬虫数据用于机器学习的最佳实践

在数据驱动的时代,机器学习已成为企业和研究者的重要工具。然而,使用爬虫技术抓取的数据进行机器学习时,合规性问题不容忽视。本文将详细探讨在使用爬虫抓取的数据进行机器学习时可能遇到的合规性问题,并提供相应的最佳实践。 一…

STL简介

文章目录 STL简介1. 什么是STL2. STL的版本3. STL的六大组件4. STL的重要性5. 如何学习STL STL简介 1. 什么是STL ​ STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构…

用爬虫技术探索石墨文档:数据自动化处理与个性化应用的创新实践

用爬虫技术探索石墨文档:数据自动化处理与个性化应用的创新实践 在当今这个信息爆炸的时代,文档管理与协作成为了企业运营和个人工作中不可或缺的一部分。石墨文档,作为一款轻量级的云端Office套件,凭借其强大的在线协作、实时同…

通过JPA映射数据库

在 JPA (Java Persistence API) 中,实体类通常通过一系列注解来配置,以便与数据库表进行映射,与Mybatis-plus在功能上,具有一定的相似性,都是持久化框架。 package com.plumcarefree.demo.entity.user; import javax.persistence.*; impor…

针对thinkphp站点的漏洞挖掘和经验分享

0x1 前言 浅谈 目前在学习和研究thinkphp相关漏洞的打法,然后最近对于thinkphp资产的收集方面有了一个简单的认识,然后写一篇新手看的thinkphp相关的漏洞收集和挖掘的文章来分享下。然后后面是给师傅们分享下后台文件上传,然后直接打一个ge…

【成功解决】串口重定向输出

使用场景介绍&#xff1a; 适用于可以远程通道进行ssh连接的情况 将串口打印输出的日志进行重定向 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/ioctl.h> #include <unistd.h>#if 1 i…