SQL学习小记(一)

news2024/12/28 20:16:08

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.coloradmin.cn/o/1687178.html

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

相关文章

Python数据可视化(六)

实现事件处理效果 我们借助 matplotlib 可以实现事件处理效果,例如,单击关闭画布会出现画布被关闭的文本提 示,在画布上的图形界面任意位置单击可以获得放大后的此处图形界面等。下面,我们就挑选一些 典型的事件处理案例来讲解实现…

7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)

1 TL Settings Transaction Layer (TL)设置只在Advanced模式下有效。 Endpoint: Unlock and PME_Turn_Off Messages: 与端点的电源管理相关,允许发送解锁和电源管理事件关闭消息。 Root Port: Error Messages: Error Correctable(错误可纠正&#xff09…

探数API统计分享-1949年-2021年中国历年夏粮产量统计报告

​​​​​​​​中国历年夏粮产量​,为1949年到2021年我国每年的夏粮产量数据。2021年,我国夏粮产量为14596万吨,比上年增长2.2%。 数据统计单位为:万吨 。 我国夏粮产量有多少? 2021年,我国夏粮产量为1…

【小白向】MAC端VSCode C++环境配置(超干货、超详细)

提示:使用环境为 MAC(M2) 其实 VSCode 很早就下载好了,但是因为在配置过程中总是遇到很多坑,搁置了很久,回头捡起遇到报 Error 还是两眼抓瞎,到处翻 blog。为了减少以后的遇坑可能性&#xff0c…

uniapp开发安卓app高德地图

uniapp开发安卓app高德地图 一、高德创建key二、uniapp配置三、uniapp打包证书获取 一、高德创建key 优先去高德地图开发者平台去创建关联项目 高德开发者平台 打开我的应用,添加key 进行高德key的配置 其中key建议设置成app的名称,便于区分SHA1获取可以…

【ChatGPT】 Microsoft Edge 浏览器扩展使用 GPT

【ChatGPT】添加 Microsoft Edge 浏览器插件免费使用 GPT 文章目录 准备工作添加扩展注意事项 使用 ChatGPT 可以更高效的搜索到想要的内容,有效节约在搜索引擎中排查正确信息的时间。 准备工作 准备一台可上网的电脑电脑上安装有 Windows 自带的 Microsoft Edge …

剪画小程序:3个方法:告诉你如何将普通的照片转换成动漫二次元风格!

Hello!亲爱的小伙伴们! 你是否还在纠结于自己的自拍太普通,每次分享到社交账号上都觉得平平无奇,引不起波澜? 假如,你和朋友们一起出去玩,大家都开心地拍着自拍。你看着自己的照片&#xff0c…

【ONE·MySQL || 视图和用户管理】

总言 主要内容:介绍MySQL中视图和用户管理。             文章目录 总言1、视图1.1、基本介绍1.2、相关操作1.2.1、创建及查看视图1.2.2、修改视图1.2.3、更新视图1.2.4、删除视图 2、用户管理2.1、用户管理2.1.1、基本介绍2.1.2、使用用户登录MySQL服务器2…

MyBatis中Where标签:揭秘高效SQL构建的秘密

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 理解Where标签的基础概念 在MyBatis中&#xff0c;<where>标签是用于构建SQL查询语句中的一个非常重要的元素。它允许你在一个动态的SQL语句中添加WHERE子句&#xff0c;而不需要担心SQL语法错误或额外的逗号…

【Linux】之【Get√】查看linux CPU 架构 ---- amd64、x86、x86_64、arm64

关于Linux软件下载时&#xff1a;amd64、x86、x86_64、arm64 的说明 archuanme -alscpu

MySQL中视图是什么,有什么作用

目录 一、视图的简介 1.1 什么是视图&#xff1f; 1.2 为什么使用视图&#xff1f; 1.3 视图有哪些规则与限制&#xff1f; 1.4 视图能否更新&#xff1f; 二、视图的创建 三、视图的作用 3.1 用视图简化复杂的联结 3.2 用视图格式化检索出的数据 3.3 用视图过滤数据…

数字人系统OEM源码及赚钱方式详解!

当前&#xff0c;数字人直播的热度持续上涨&#xff0c;应用场景日益丰富。而随着数字人直播所蕴含的前景和潜力被不断挖掘一批又一批的创业者纷纷开始入局分羹。其中&#xff0c;数字人系统OEM源码模式作为最为常见的入局方式之一&#xff0c;更是备受瞩目。 所谓数字人系统O…

机器人开源项目分享,助力一户一机器人

最初&#xff0c;因隋炀帝思念心切&#xff0c;命工匠按照柳抃的形象制作了木偶机器人&#xff0c;被认为是历史上最早的机器人之一。这些木偶机器人通过精巧设计的机关&#xff0c;能够执行坐、起、拜、伏等动作。 如今&#xff0c;随着科技的发展&#xff0c;机器人已经广泛…

2024年安全生产月资料合集,抓紧保存!

今年6月&#xff0c;我们将迎来第23个全国“安全生产月”&#xff0c;主题定为“人人讲安全、个个会应急———畅通生命通道”。 为了方便大家组织“安全生产月”活动&#xff0c;做好安全月宣传和培训。我们特别邀请了 安全工程师 王欣和李勇刚&#xff0c;结合今年的活动要求…

pip(包管理器) for Python

pip是什么 pip是Python的包安装程序&#xff0c;即python包管理器。您可以使用 pip 从Python包索引和其他索引安装包。 1. pip 安装 python 包 pip install 包名 例如&#xff1a;pip install pymssql &#xff1a; 使用pip安装数据库驱动包 pymssql 2.pip 卸载 python 包 pi…

LSPatch免root手机模块应用

软件介绍 LSPatch是一款免root手机模块应用&#xff0c;兼容大部分机型&#xff0c;使用LSPatch&#xff0c;您可以个性化您的Android设备&#xff0c;添加新的功能&#xff0c;修改系统设置&#xff0c;甚至完全改变系统的外观。您可以根据自己的需求选择和安装各种Xposed模块…

神经网络优化算法

神经网络优化算法 文章目录 神经网络优化算法梯度下降算法批量梯度下降法随机梯度下降法小批量随机梯度下降法动量法NAGAdaGradRMSPropADADELTAADAMNADAM 梯度下降算法 以 f ( x ) 1 2 x 2 f(x)\frac12x^2 f(x)21​x2为例展示了梯度下降法中梯度下降的实际情况&#xff0c;图…

Postman快捷功能-快速填写请求头

大家好&#xff0c;之前给大家分享关于 Postman 工具的基础使用&#xff0c;今天给大家介绍一个快捷功能&#xff0c;可以一定程度提高我们使用 Postman 工具的效率&#xff0c;在我们进行接口测试时&#xff0c;几乎每个接口都需要填写 Headers&#xff0c;且 Headers 中的参数…

代理模式的种类和它们之间区别?

静态代理 这种代理方式需要代理对象和目标对象实现一样的接口。 优点&#xff1a;可以在不修改目标对象的前提下扩展目标对象的功能。 缺点&#xff1a; 1.冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。 2. 不易维护。一旦接口增加方法&#xff0c;目标…

桂林电子科技大学计算机工程学院、广西北部湾大学计信学院莅临泰迪智能科技参观交流

5月18日&#xff0c;桂林电子科技大学计算机工程学院副院长刘利民、副书记杨美娜、毕业班辅导员黄秀娟、广西北部湾大学计信学院院长助理刘秀平莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技副总经理施兴、广西分公司郑廷和、梁霜、培训业务部孙学镂…