SQL学习小记(一)

SQL学习小记(一)

  • 1. 存储过程&存储函数
    • 1.1. 存储过程
    • 1.2. 存储函数
  • 2. DEFINER
  • 3. INSERT INTO(插入新记录)
  • 4. REPLACE()…AS…
  • 5. SUM()函数
  • 6. CASE WHEN
  • 7. STR_TO_DATE日期时间处理函数
  • 8. SUBSTRING函数
  • 9. dateFormat函数
  • 10. Group By
  • 11. LTRIM/RTRIM (去除字符串首尾空字符)
  • 12. DATE_SUB函数
  • 13. LEFT JOIN(拼接表)
  • 14. CONCAT函数
  • 15. LIKE操作符
  • 16. NOT IN特殊条件运算符
  • 17. DATE_ADD()函数

1. 存储过程&存储函数

定义:
存储过程(PROCEDUER)是用于完成一次完整的业务处理没有返回值,但是可以通过传出参数将值传递给调用环境
存储函数(FUNCTION)是用于完场一次特定的计算,具有一个返回

可类比MySQL提供的sum等函数,理解为封装的功能,可以将复杂的SQL逻辑封装在一起,应用直接调用即可。

1.1. 存储过程

一组经过预先编译的SQL语句的封装。中SQL逻辑。没有返回值,但是可以存在输出值。

语法:CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,…)[characteristics ...]BEGIN存储过程体END
--IN :当前参数为输入参数,也就是表示入参;存储过程只是读取这个参数的值。如果没有定义参数种类, 默认就是 IN ,表示输入参数。
--OUT :当前参数为输出参数,也就是表示出参;执行完成之后,调用这个存储过程的客户端或者应用程序就可以读取这个参数返回的值了。
--INOUT :当前参数既可以为输入参数,也可以为输出参数

1.2. 存储函数

语法:CREATE FUNCTION 函数名( 参数名 参数类型,…)RETURN 返回值类型[characteristics ...]BEGIN函数体  # 函数体中肯定有RETURN语句END
--参数列表:指定参数为IN、OUT或INOUT只对PROCEDURE是合法的,FUNCTION中总是默认为IN参数 。
--RETURNS type 语句表示函数返回数据的类型;
--RETURNS子句只能对FUNCTION做指定,对函数而言这是 强制 的。它用来指定函数的返回类型,而且函数体必须包含一个 RETURN value 语句。
--characteristic 创建函数时指定的对函数的约束。取值与创建存储过程时相同。
--函数体也可以用BEGIN…END来表示SQL代码的开始和结束。如果函数体只有一条语句,也可以省略

参考:https://zhuanlan.zhihu.com/p/627360205

2. DEFINER

SQL SECURITY { DEFINER | INVOKER } :指明谁有权限来执行。
DEFINER 表示按定义者拥有的权限来执行
INVOKER 表示用调用者的权限来执行。默认情况下,系统指定为DEFINER

以存储过程为例:

(1)MySQL存储过程是通过指定SQL SECURITY子句指定执行存储过程的实际用户;

(2)如果SQL SECURITY子句指定为DEFINER,存储过程将使用存储过程的DEFINER执行存储过程,验证调用存储过程的用户是否具有存储过程的execute权限和DEFINER用户是否具有存储过程引用的相关对象的权限;

(3)如果SQL SECURITY子句指定为INVOKER,那么MySQL将使用当前调用存储过程的用户执行此过程,并验证用户是否具有存储过程的execute权限和存储过程引用的相关对象的权限;

(4)如果不显示的指定SQL SECURITY子句,MySQL默认将以DEFINER执行存储过程。

3. INSERT INTO(插入新记录)

INSERT INTO 语句用于向表中插入新记录。
语法: INSERT INTO 语句可以有两种编写形式。

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO table_name
VALUES (value1,value2,value3,...);

第二种形式需要指定列名及被插入的值:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

参数说明:

table_name:需要插入新记录的表名。
column1, column2, ...:需要插入的字段名。
value1, value2, ...:需要插入的字段值。

参考:https://www.runoob.com/sql/sql-insert.html

4. REPLACE()…AS…

REPLACE
MySQL REPLACE语句是标准SQL的MySQL扩展。MySQL REPLACE语句的工作原理如下:

如果新行已不存在,则MySQL REPLACE 语句将插入新行。
如果新行已存在,则 REPLACE 语句首先删除旧行,然后插入新行。在某些情况下,REPLACE语句仅更新现有行。

注意: 要确定表中是否已存在新行,MySQL使用PRIMARY KEY或UNIQUE KEY 索引。如果表没有这些索引之一,则REPLACE语句等同于INSERT语句
REPLACE参考: https://blog.csdn.net/cold___play/article/details/124198878
REPLACE()…AS…参考: https://wenku.csdn.net/answer/629029c42a4f4769b6a402684dca16f9

5. SUM()函数

SUM() 函数返回数值列的总数。
SQL SUM() 语法:

SELECT SUM(column_name) FROM table_name;

示例参考: https://www.runoob.com/sql/sql-func-sum.html

6. CASE WHEN

CASE WHEN语句通常用于根据条件执行不同的操作。
语句:

CASE WHEN condition THEN result
[WHEN...THEN...]
ELSE result
END

函数示例:

CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END# 使用 IF 函数进行替换
IF(SCORE = 'A', '优', '不及格')

参考: 用法小结,有使用场景

7. STR_TO_DATE日期时间处理函数

STR_TO_DATE是MySQL中的一个日期时间处理函数,用于将字符串转换为日期时间类型。
它的基本用法是将一个包含日期时间信息的字符串转换为对应的日期时间类型
基本语法:

STR_TO_DATE(str, format)
--str:要转换为日期时间的字符串
--format:指定了输入字符串的日期时间格式
--返回一个日期时间类型的值,或者在无法解析输入字符串时返回NULL

对应的日期格式如下:
format参数定义了输入字符串的日期时间格式,可以包含各种日期时间格式化符号,如 %Y、%m、%d 等,用来表示年、月、日等不同部分
具体的格式化符号及其含义如下:(注意是两位数字。这里埋一个伏笔,如果遇到不是两位的也可做处理)
示例:

将字符串’2024-03-28’转换为日期类型:SELECT STR_TO_DATE(‘2024-03-28’, ‘%Y-%m-%d’);,返回值为2024-03-28
将字符串’Mar 28, 2024 10:30:00 PM’转换为日期时间类型:SELECT STR_TO_DATE(‘Mar 28, 2024 10:30:00 PM’, ‘%b %d, %Y %h:%i:%s %p’);,返回值为2024-03-28 22:30:00

符号意义
%Y四位年份
%y两位年份
%m两位月份
%c月份(0-12)
%d两位日期
%H小时(00-23)
%h小时(01-12)
%i两位分钟
%s两位秒数
%pAM或PM

参考: https://blog.csdn.net/weixin_47872288/article/details/137111462

8. SUBSTRING函数

SQL 中的 substring 函数是用来截取字符串中的一部分字符。这个函数的名称在不同的资料库中不完全一样。
语法: SUBSTRING(str,x,y):str,代表字符串;x,代表是从第几位开始截取;y,代表截取几位数。
示例: 例子1:substring(‘abcdefgh’,3,2) 结果为:cd
参考: https://blog.csdn.net/lanxingbudui/article/details/83782276

9. dateFormat函数

dateFormat用于将日期时间值格式化为指定格式的函数。它允许你根据自己的需求将日期时间值转换成各种不同的字符串表示形式。
基本用法:

  • DATE_FORMAT() 函数接受两个参数:日期时间值和格式字符串。
  • 日期时间值可以是日期类型、日期时间类型或时间戳类型。
  • 格式字符串用于定义输出所需的日期时间格式。
  • 返回格式化后的日期时间字符串。

示例: 将日期格式化为年-月-日的格式

SELECT DATE_FORMAT('2023-09-07', '%Y-%m-%d');

DATE_FORMAT()函数在 SQL 查询中非常有用,特别是当你希望将日期时间值转换为特定格式的字符串时。它可以让你根据需要灵活地格式化日期时间。
参考: https://www.jianshu.com/p/eb3834675a1c

10. Group By

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

示例参考: https://blog.csdn.net/u012861978/article/details/52168500

11. LTRIM/RTRIM (去除字符串首尾空字符)

LTRIM(): 用于去除字符串左侧(开头)的空格或指定的字符。它返回一个新的字符串,其中左侧的空格或指定字符被删除。
RTRIM(): 用于去除字符串右侧(末尾)的空格或指定的字符。它返回一个新的字符串,其中右侧的空格或指定字符被删除。

参考: https://blog.csdn.net/gly1653810310/article/details/131854918

12. DATE_SUB函数

作用: SQL查询今天和昨天数据,SQL查询近一个月数据,SQL查询近三天数据,SQL查询一周数据等
SQL中,DATE_SUB()是一个函数,用于从当前日期中减去指定的时间间隔。它的语法如下:

	DATE_SUB(date, INTERVAL unit value)

其中,date是要进行调整的日期,unit是要减去的时间间隔单位(例如“YEAR”、“MONTH”、“DAY”等),value是要减去的该单位数量。
示例: 根据create_time查询近一个月数据

	SELECT * FROM my_table   WHERE create_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH);

语句中,my_table是要查询的表的名称,create_time是表中存储创建日期的列的名称。该语句使用DATE_SUB()函数和CURDATE()函数来计算一个月前的日期,然后将其与create_time列中的值进行比较获取匹配的数据
参考: https://blog.csdn.net/mingketao/article/details/131210035

13. LEFT JOIN(拼接表)

语法:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

按照一定规则,将表table1和表table12拼接起来。
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
SQL JOINS
参考: https://blog.csdn.net/u010168781/article/details/120542993

14. CONCAT函数

concat()函数

  • 功能: 将多个字符串连接成一个字符串。
  • 语法: concat(str1, str2,…)
  • 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
    示例参考: https://blog.csdn.net/Andrew_Chenwq/article/details/131099892

15. LIKE操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
基本语法:

SELECT column1, column2, ...
FROM table_name
WHERE column LIKE pattern;

参数说明:

  • column1, column2, …: 要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • table_name: 要查询的表名称。
  • column: 要搜索的字段名称。
  • pattern: 搜索模式。
    示例: like’Mc%’ 将搜索以字母 Mc 开头的所有字符串 (如 McBadden)
    参考:
    https://blog.csdn.net/wsx1212123/article/details/106259320/
    https://www.runoob.com/sql/sql-like.html

16. NOT IN特殊条件运算符

在SQL中,NOT IN 是一种特殊的条件运算符,用于筛选不满足给定值列表中任何一个值的记录。与 IN 运算符相反,NOT IN 运算符返回不匹配给定值列表的记录。

NOT IN 运算符允许我们筛选不匹配给定值列表的记录。它可以用于数值、字符串、日期等数据类型,并且可以与其他逻辑运算符 (如 AND 或 OR) 结合使用。

需要注意的是,在使用 NOT IN 运算符时,确保值列表中的值与要比较的字段具有相同的数据类型,以避免错误的结果。
示例参考: https://www.jianshu.com/p/cdf3fb22042d

17. DATE_ADD()函数

在 SQL 中,DATE_ADD() 函数是用于在日期时间值上添加指定的时间间隔的函数。它可以根据你的需求,在日期或日期时间字段中增加年、月、日、小时、分钟或秒钟等时间单位。

DATE_ADD() 函数的基本用法:

  • DATE_ADD() 函数接受三个参数:日期时间值、时间间隔和时间单位。
  • 日期时间值可以是日期类型、日期时间类型或时间戳类型。
  • 时间间隔是一个整数,表示要添加的数量。
  • 时间单位可以是年份 (YEAR)、月份 (MONTH)、日期 (DAY)、小时 (HOUR)、分钟 (MINUTE)、秒钟 (SECOND) 等等。
  • 返回计算后的日期时间值。

示例:

SELECT DATE_ADD('2023-09-07', INTERVAL 7 DAY);

这将返回添加了 7 天后的日期,例如:2023-09-14

参考: https://www.jianshu.com/p/5f7ca57dabe6

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

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

相关文章

神奇动物在哪里?斯洛文尼亚旅游之野生动物寻踪

不仅拥有优美动人的自然风光,斯洛文尼亚还以其丰富的生物多样性而闻名。得益于国家对大自然开展的保护工作,斯洛文尼亚超过三分之一的国土面积都被规划为保护区,拥有约1.5万种动物和6000种植物,其中不乏众多特有、稀有和濒危动植物…

DT浏览器有一些特点和优势,可能是人们选择使用的原因

DT浏览器有一些特点和优势,可能是人们选择使用的原因: - 好评如潮:DT浏览器在网络上获得了众多用户的好评,口碑良好。 - 使用微软搜索引擎技术:DT浏览器采用了微软的搜索引擎技术,在搜索内容上提供了国内…

Gitlab安装

配置文件: /etc/gitlab/gitlab.rb日志文件: /var/log/gitlab/数据文件: /var/opt/gitlab/静态文件和网页内容: /opt/gitlab/embedded/service/gitlab-rails/public/ # 查看当前状态 git status # 提交本地更改 git commit -m &q…

通过Wirtinger流进行相位恢复:理论与算法

文章目录 1. 简介2. 算法描述2.1 初始化(Initialization)2.2 迭代更新(Iterative Updates)2.3 学习率调整(Learning Rate Adjustment) 3. 代码实现3.1 一维信号测试 (Gaussian model)3.2 一维信号测试 (Coded diffract…

【C++】牛客——BC157 素数回文

✨题目链接: BC157 素数回文 ✨题目描述 现在给出一个素数,这个素数满足两点: 只由1-9组成,并且每个数只出现一次,如13,23,1289。 位数从高到低为递减或递增,如2459,87631。 请你判断一下&…

从零开始搭建Springboot项目脚手架4:保存操作日志

目的:通过AOP切面,统一记录接口的访问日志 1、加maven依赖 2、 增加日志类RequestLog 3、 配置AOP切面,把请求前的request、返回的response一起记录 package com.template.common.config;import cn.hutool.core.util.ArrayUtil; import cn.hu…

最新文章合集

GitHub宝藏项目:每天一个,让你的技术库增值不停! STORM、SuperMemory、Awesome Chinese LLM、AI写作助手、资料搜集、文章生成、视角问题引导、模拟对话策略、内容导入、浏览器插件、资源库、开源微调模型 开发者必看:Linux终端…

Vue 3指令与事件处理

title: Vue 3指令与事件处理 date: 2024/5/25 18:53:37 updated: 2024/5/25 18:53:37 categories: 前端开发 tags: Vue3基础指令详解事件处理高级事件实战案例最佳实践性能优化 第1章 Vue 3基础 1.1 Vue 3简介 Vue 3 是一个由尤雨溪(尤大)领导的开源…

方言和大语言模型

方言多样性及其对语言模型的影响 语言的演变是不可避免的,反映并推动了重大的社会变革和传统。语言接触往往会推动我们说话方式的创新,在美国全球文化的影响下,一种新的叙事正在其语言织锦中展开。 例如,在佛罗里达州南部&#…

Qt 在windows下显示中文

Qt在windows平台上显示中文,简直是一门玄学,经过测试,有如下发现: 1, 环境:Qt 5.15.2 vs2019 64位 win11系统 默认用Qt 创建的文件使用utf-8编码格式,此环境下 中文没有问题 ui->textE…

Nginx实现负载均衡与故障检查自动切换

创作灵感来源于个人项目的一个稳定性规划,单节点的项目稳定性方面可能有很大的缺漏,因此需要升级为多节点,保证服务故障后,依然有其他服务可用,不会给前端用户造成影响。 (前面讲选型,想直接看…

IPv6 地址创建 EUI-64 格式接口 ID 的过程

IPv6 接口标识符 IPv6 地址中的接口标识符(ID)用于识别链路上的唯一接口,有时被称为 IPv6 地址的 “主机部分”。接口 ID 在链路上必须是唯一的,始终为 64 位长,并且可以根据数据链路层地址动态创建。 MAC 地址 中的…

Jenkins安装 :Aws EC2下Docker镜像安装

1 安装docker # 安装docker $ sudo yum install -y docker# 启动docker daemon $ sudo systemctl start docker# 用户加入docker组 $ sudo usermod -aG docker username 2 docker安装jenkins $ docker pull jenkins/jenkins:lts# 安装成功 $ docker images REPOSITORY …

逻辑这回事(一)----编码规范

说明:优先级是M的规则为强制项,优先级为R的规则为建议项。 通用约束 应有全局观念。 优先级:M 说明:你所编写的代码在成为最终硅片上的一部分之前,需要经过许多设计者利用各种各样的工具进行各种各样的处理。有时&…

解决vue3项目vite打包忽略.vue扩展名

项目打包时报could not relolve “...”,因为vite已不再默认忽略.vue扩展名。 解决方法如下: 在vite.config.js中配置vite使其忽略 .vue 扩展名(不建议忽略) 注意:即使忽略了.vue文件,在实际写的时候也要加…

达梦8 RLOG_COMPRESS_LEVEL参数对系统的影响

测试环境是一套主备达梦数据库。下面在主备库分别设置参数进行测试 测试一、 主库设置RLOG_COMPRESS_LEVEL9&#xff0c;备库设置为0。 分别删除主备库的归档日志后执行测试脚本 #当前时间 date disql SYSDBA/SYSDBA:1807 <<EOF #显示归档大小 select sum(free)/1024…

【独家揭秘!玩转ChatGPT?一文带你解锁秘籍!】

&#x1f680;【独家揭秘&#xff01;玩转ChatGPT&#xff1f;一文带你解锁秘籍&#xff01;】&#x1f680; &#x1f449; 【直达ChatGPT体验站】 ChatGPT&#xff0c;全称“Chat Generative Pre-trained Transformer”&#xff0c;是人工智能研究实验室OpenAI于2022年底推出…

HTTP 错误 404.15 - Not Found 请求筛选模块被配置为拒绝包含的查询字符串过长的请求。...

在做MVC站点时(使用IIS版本为7.5)&#xff0c;使用Get请求&#xff0c;当Url里查询字符串过长时&#xff0c;会出现如下错误&#xff1a; 出现该错误的原因为&#xff1a;IIS7.5对于Query String有长度限制&#xff0c;默认为2048。 按照图中可尝试的操作提示&#xff0c;可以…

Redis(1)-Jedis连接配置

问题 阿里云安装并启用Redis后&#xff0c;尝试在本地用Jedis调用&#xff0c;发现报错 public class Jedis01 {Testpublic void connect(){Jedis jedis new Jedis("101.37.31.211", 6379); // 公网ipjedis.auth("123"); // 密码String ping jedis.pin…

MySQL中的sql语句

MySQL中的sql语句 DML、 DDL、 DCL DML(Data Manipulation Language)&#xff0c;用于对数据库中的数据进行操作&#xff0c;包括插入、查询、更新和删除数据等操作。常见的 DML 命令包括 SELECT&#xff08;查询&#xff09;、INSERT&#xff08;插入&#xff09;、UPDATE&a…