SQL学习小记(一)

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()函数

15. LIKE操作符

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

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

参数说明:

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

18. SELECT DISTINCT 语句

SELECT DISTINCT 语句用于返回唯一不同的值。
在表中,一个列可能会包含多个重复值,有时也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
语法:

SELECT DISTINCT column1, column2, ...
FROM table_name;

示例:
下面的 SQL 语句仅从 “Websites” 表的 “country” 列中选取唯一不同的值,也就是去掉 “country” 列重复值:

SELECT DISTINCT country FROM Websites;

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

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值