数据库|(四)SQL常见函数

news/2024/4/19 19:47:19/文章来源:https://blog.csdn.net/weixin_62608816/article/details/129198583

1. 基础

1.1 概念

将一组逻辑语句封装在方法中,对外暴露方法名。

SQL 提供给了我们内置函数,同时,我们也可以自定义函数。

1.2 调用

SELECT 函数名(实参列表) [FROM];

1.3 分类

常见函数分为 单行函数分组函数

单行函数分组函数
字符函数SUM
日期函数AVG
数学函数MAX
其他函数MIN
流程控制函数COUNT

2. 字符函数

  1. LENGTH
    LENGTH() 获取参数的 字节 个数

  2. CONCAT
    CONCAT() 拼接字符串

  3. uppser、lower
    示例:姓变大写,名变小写,拼接

    SELECT CONCAT(UPPER(last_name),'_', LOWER(first_name)) AS 姓名 FROM employees;
    
  4. SUBSTR、SUBSTRING
    语法:

    • SUBSTR(str, start, len)
    • SUBSTR(str, len)
      注意:索引从1开始
    SELECT SUBSTR('李莫愁爱上了陆展元', 7) AS output;
    SELECT SUBSTR('李莫愁爱上了陆展元', 1, 3) AS output;
    SELECT CONCAT(UPPER(SUBSTR(last_name, 1, 1)),'_', LOWER(SUBSTR(last_name, 2))) 
    AS 姓名 
    FROM employees;
    
  5. insert
    返回子串第一次出现的位置,如果找不到则返回 0

    SELECT INSTR('杨殷六侠不悔爱上了殷六侠', '殷八侠') AS output;
    
  6. TRIM

    SELECT LENGTH(TRIM(' 张翠山 ')) AS output;#9
    SELECT LENGTH(' 张翠山 ') AS output;#11
    SELECT TRIM('aa' FROM 'aaa张aaaaa翠aaa山aaaaaaaa') as output;
    
  7. LPAD
    用指定字符左填充至指定长度

    SELECT LPAD('殷素素', 12, '*') AS output;
    
  8. RPAD
    用指定字符右填充至指定长度

    SELECT RPAD('殷素素', 12, '*') AS output;
    
  9. REPLACE

    SELECT REPLACE('张无忌爱上了周芷若', '周芷若','赵敏') AS output;
    

3. 数学函数

  1. round 四舍五入

    SELECT ROUND(-1.5);
    重载:小数点后保留2SELECT	ROUND(1.567, 2);
    
  2. ceil 向上取整,返回>=该参数的最小整数

    SELECT CEIL(-1.2) AS 结果;
    
  3. floor 向下取整,返回<=该参数的最大整数

    SELECT FLOOR(-1.7) AS 结果;
    
  4. TRUNCATE 截断

    SELECT TRUNCATE(1.65,1) AS 结果;
    
  5. mod 取余

    SELECT MOD(19,3);
    

4. 日期函数

返回当前系统日期+时间

SELECT NOW();

返回当前系统日期,不包含时间

SELECT CURDATE();

获取指定部分,年、月、日、小时、分钟、秒

SELECT YEAR(NOW()) AS;
SELECT YEAR(hiredate) FROM employees;
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());

5. 其他函数

SELECT VERSION(); --当前数据库服务器的版本database当前打开的数据库
SELECT USER();  --当前用户
SELECT PASSWORD('字符'); -- 返回该字符的密码形式md5(字符):返回该字符的md5
SELECT VERSION(); 
SELECT DATABASE();

6. 流程控制函数

  1. IF 函数

    SELECT IF(10>5, '大', '小');
    SELECT last_name, commission_pct, IF(commission_pct IS NULL,'没奖金呵呵','有奖金,哈哈')
    FROM employees;
    
  2. CASE 函数:类似 switch-case

    case 要判断的字段或者表达式
    WHEN 常量1 THEN 要显示的值1或语句1;
    WHEN 常量2 THEN 要显示的值2或语句2;
    ...
    ELSE 要显示的值n或语句n;
    END
    

    案例:查询员工的工资,
    要求部门号=30,显示的工资为1.1倍
    都门号=40,显示的工资为1.2倍
    都门号=50,显示的工资为1.3倍
    其他部门,显示的工资为原工资

    SELECT salary 原始工资, department_id, 
    CASE department_id
    WHEN 30 THEN salary*1.1
    WHEN 40 THEN salary*1.2
    WHEN 50 THEN salary*1.3
    ELSE salary
    END AS 新工资
    FROM employees;
    
  3. case 函数使用二:类似多重 if

    CASE 
    WHEN 条件1 THEN 要显示的值1或语句1
    WHEN 条件2 THEN 要显示的值2或语句2
    ...
    ELSE 要显示的值n或语句n
    END
    

    案例:查询员工的工资的情况
    如果工资>20000,显示A级别
    如果工资>15000,显示B级别
    如果工资>10000,显示C级别
    否则,显示D级别

    SELECT salary,
    CASE
    WHEN salary>20000 THEN 'A'
    WHEN salary>15000 THEN 'B'
    WHEN salary>10000 THEN 'C'
    ELSE 'D'
    END AS 工资级别
    FROM employees;
    

7. 分组函数

7.1 功能

功能:用作统计使用,又称为聚合函数或统计函数或组函数。

函数含义
SUM求和
AVG平均值
MAX最大值
MIN最小值
count计算个数

7.2 简单使用

SELECT SUM(salary) AS 工资和 FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT COUNT(salary) FROM employees;SELECT SUM(salary) AS, ROUND(AVG(salary),2) AS 平均,MAX(salary) 最大, MIN(salary) 最低, COUNT(salary) 个数
FROM employees;

7.3 参数支持类型

  1. sumavg 只支持数值型
  2. maxmincount 支持所有类型
# 不支持以下类型,不合法
SELECT SUM(last_name), AVG(last_name) FROM employees;
# max和min支持字符型和日期型
SELECT MAX(last_name), MIN(last_name), MIN(hiredate) FROM employees;
# count 支持所有
SELECT COUNT(commission_pct), COUNT(last_name) FROM employees;

7.4 忽略 null

这些分组函数都忽略null值:

SELECT SUM(commission_pct), AVG(commission_pct), SUM(commission_pct)/35,SUM(commission_pct)/107 FROM employees;
SELECT MAX(commission_pct),MIN(commission_pct) FROM employees;

7.5 和 DISTINCT 搭配

SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
SELECT COUNT(DISTINCT salary), COUNT(salary) FROM employees;

7.6 count 函数详细介绍

统计行数:

SELECT COUNT(*) FROM employees;

参数为常量值,则也统计行数:

SELECT COUNT(1) FROM employees;

效率:

  • MYISAM 存储引擎下,count(*) 的效率最高
  • INNODB 存储引擎下,count(*)count(字段) 的效率差不多,比 count(字段) 效率高

7.7 和分组函数一同查询的字段有限制

和分组函数一同查询的字段要求是 group by 后的字段

SELECT AVG(salary),employee_id FROM employees;

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子技术——输出阶类型

电子技术——输出阶类型 输出阶作为放大器的最后一阶&#xff0c;其必须有较低的阻抗来保证较小的增益损失。作为放大器的最后一阶&#xff0c;输出阶需要处理大信号类型&#xff0c;因此小信号估计模型不适用于输出阶。尽管如此&#xff0c;输出阶的线性也非常重要。实际上&a…

为什么要用线程池?

1.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2.提高响应速度。当任务到达时&#xff0c;任务可以不需要的等到线程创建就能立即执行。 3.提高线程的可管理性。线程是稀缺资源&#xff0c;如果无限制的创建&#xff0c;不仅会消耗系统资源&#…

Python实现贝叶斯优化器(Bayes_opt)优化支持向量机回归模型(SVR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景贝叶斯优化器 (BayesianOptimization) 是一种黑盒子优化器&#xff0c;用来寻找最优参数。贝叶斯优化器是…

AI_News周刊:第三期

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 2023.02.20—2023.02.25 News 1.OpenAI 现在正在帮助可口可乐改善其营销和运营 2023 年 2 月 21 日——贝恩公司今天宣布与 OpenAI 建立全球服务联盟&#xff0c;OpenAI 是人工智能系统 ChatGPT、DA…

java Spring JdbcTemplate配合mysql实现数据库表数据添加

本文为 java Spring JdbcTemplate 准备工作的续文 如果您还没有大家好JdbcTemplate 的基础环境 可以先查看前文 首先 之前数据库我们已经弄好了 然后 我们在下面创建一个表 我这里叫 user_list 每一个数据库表 要对应一个实体类 这里 我们打开上一文搭建的项目环境 src下创建…

【华为OD机试模拟题】用 C++ 实现 - 英文输入法(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 分积木(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 吃火锅(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - RSA 加密算法(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 构成的正方形数量(2023.Q1) 【华为OD机试模拟…

【原创】java+swing+mysql生肖星座查询系统设计与实现

今天我们来开发一个比较有趣的系统&#xff0c;根据生日查询生肖星座&#xff0c;输入生日&#xff0c;系统根据这个日期自动计算出生肖和星座信息反馈到界面。我们还是使用javaswingmysql去实现这样的一个系统。 功能分析&#xff1a; 生肖星座查询系统&#xff0c;顾名思义…

【CSS】CSS 层叠样式表 ① ( 简介 | CSS 引入方式 - 内联样式 | 内联样式语法 | 内联样式缺点 )

文章目录一、CSS 层叠样式表二、CSS 引入方式 - 内联样式1、内联样式语法2、内联样式缺点3、内联样式代码示例① 核心代码示例② 完整代码示例③ 执行结果一、CSS 层叠样式表 CSS 全称 Cascading Style Sheets , 层叠样式表 ; 作用如下 : 设置 HTML 页面 文本内容 的 字体 , 颜…

【华为OD机试模拟题】用 C++ 实现 - 最少停车数(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

绝对让你明明白白,脚把脚带你盯着 I2C 时序图将 I2C 程序给扣出来(基于STM32的模拟I2C)

目录前言一、关于STM32 I/O端口位的基本结构讲解二、模拟I2C编写前的需知道的知识1、I2C简介2、根据时序编写模拟I2C程序重要的两点Ⅰ、主机发送数据给从机时的时序控制Ⅱ、主机接收来自从机的数据时的时序控制Ⅲ、完整的I2C时序图&#xff08;按写程序的思想分割时序&#xff…

2023年湖北住建厅七大员建筑八大员怎么报考?启程别

2023年湖北住建厅七大员建筑八大员怎么报考&#xff1f;启程别 建筑施工企业关键技术岗位人员可以叫七大员也可以叫八大员&#xff0c;施工现场专业人员&#xff0c;从事相关岗位人员都应该持证上岗。 为什么有的叫七大员&#xff1f;有的叫八大员呢&#xff1f;甚至还有五大员…

sklearn学习-朴素贝叶斯(二)

文章目录一、概率类模型的评估指标1、布里尔分数Brier Score对数似然函数Log Loss二、calibration_curve&#xff1a;校准可靠性曲线三、多项式朴素贝叶斯以及其变化四、伯努利朴素贝叶斯五、改进多项式朴素贝叶斯&#xff1a;补集朴素贝叶斯ComplementNB六、文本分类案例TF-ID…

【信管12.5】项目集与项目组合管理

项目集与项目组合管理之前学习的 PMP 相关的项目管理知识&#xff0c;其实都是针对一个项目的管理过程。但是&#xff0c;在一个组织企业中&#xff0c;往往不止一个项目&#xff0c;可能会有多个相关联的项目&#xff0c;这种情况就叫做项目集。另外&#xff0c;多个项目一起完…

二叉树——堆

一&#xff0c;树的概念及结构 1.树 4.结点的度&#xff1a;一个节点含有子树的个数称为该结点的度&#xff1b;如&#xff1a;A 的度为6. 5.叶节点或终端节点&#xff1a;度为0的节点称为叶节点&#xff1b;如&#xff1a;B 6.非终端结点或分支节点&#xff1a;度部位0的结…

MySQL基础知识-刷题笔记

数据库刷题笔记 查漏补缺&#xff0c;面试八股文&#xff0c;以下内容未说明的均以MySQL数据库为准 where 不能和聚合函数一起使用 having可以和聚合函数一起使用 having必须与group by一起使用1、SUBSTRING_INDEX(str ,substr ,n)&#xff1a;返回字符substr在str中第n次出现位…

【强化学习】强化学习数学基础:贝尔曼公式

强化学习数学基础&#xff1a;贝尔曼公式强化学习的数学原理课程总览贝尔曼公式&#xff08;Bellman Equation&#xff09;一个示例状态值贝尔曼公式&#xff1a;推导过程贝尔曼公式&#xff1a;矩阵-向量形式&#xff08;Matrix-vector form&#xff09;贝尔曼公式&#xff1a…

基于合作型Stackerlberg博弈的考虑差别定价和风险管理的微网运行策略研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

从网易到支付宝,3年外包生涯做完,我这人生算是彻底废了......

我为什么一直做外包呢&#xff0c;原因是薪资和技术方面。 在华三做了一年外包&#xff0c;薪资5k&#xff0c;功能测试&#xff0c;接触Linux和网络&#xff0c;但是说实在的技术很难沉淀&#xff0c;就像雾里看花一样&#xff0c;过年之后&#xff0c;想走的人都走了&#x…

【vue2小知识】实现axios的二次封装

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;在vue2中实现axios的二次封装 目录 一、平常axios的请求发送方式 二、axios的一次封装…

造成android UI卡顿的原因及解决方法

Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms&#xff0c;是因为 Android 设定的刷新率是 60FPS(Frame Per Second)&#xff0c;也就是每秒 60 帧的刷新率&#xff0c;约合 16ms 刷新一次。如果UI线程的执行时间超过16ms&#xff0c;则会产生丢帧…