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 | 两位秒数 |
%p | AM或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(等值连接)
只返回两个表中联结字段相等的行
参考: 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