欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > MySQL -- CURD(下)

MySQL -- CURD(下)

2025/2/24 0:48:59 来源:https://blog.csdn.net/Ruyi_baobao/article/details/144206397  浏览:    关键词:MySQL -- CURD(下)

1. Update 修改

1.1 语法

对符合条件的结果进⾏列值更新

UPDATE [LOW_PRIORITY] [IGNORE] table_referenceSET assignment [, assignment] ...[WHERE where_condition][ORDER BY ...][LIMIT row_count]

1.2 示例

将吕布的数学成绩改为99分

update exam set math = 99 where name = '吕布';

在这里插入图片描述

将貂蝉的语文成绩改成88,数学77

update exam set math = 77,chinese = 88 where name = '貂蝉';

在这里插入图片描述

将总成绩倒数前三的3位同学的数学成绩减上10分

update exam set math= math-10 chinese + math + english is not null  order by math+chinese+english asc limit 3;

在这里插入图片描述

注意:
以原值的基础上做变更时,不能使⽤math+=10这样的语法
不加where条件时,会导致全表数据被列新,谨慎操作

2. Delete 删除

2.2 语法

DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

2.3 示例

① 删除曹阿瞒同学的考试成绩

delete from exam where name = '曹阿满';

在这里插入图片描述

② 删除整张表数据

delete from tbl_name;

在这里插入图片描述

注意:执⾏Delete时不加条件会删除整张表的数据,谨慎操作

3. 截断表

3.1 语法

TRUNCATE [TABLE] tbl_name

3.2 ⽰例

  1. 准备测试表
CREATE TABLE t_truncate (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20)
);
  1. 插⼊测试数据
INSERT INTO t_truncate (name) VALUES ('A'), ('B'), ('C');
  1. 查看测试表
 select * from t_truncate;

在这里插入图片描述

  1. 查看建表结构,AUTO_INCREMENT=4

在这里插入图片描述

  1. 截断表,注意受影响的⾏数是0
    在这里插入图片描述
  2. 插入一条数据,再次查看表结构,AUTO_INCREMENT=2
    在这里插入图片描述

3.3 Truncate注意事项

  • 只能对整表操作,不能像 DELETE ⼀样针对部分数据
  • 不对数据操作所以⽐DELETE更快,TRUNCATE在删除数据的时候,不经过真正的事物,所以⽆法回滚
  • 会重置 AUTO_INCREMENT 项 (即自主键被重置)

4. 插⼊查询结果

4.1 语法

INSERT INTO table_name [(column [, column ...])] SELECT ...

5. 聚合函数

5.1 常用函数

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的最⼤值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的最⼩值,不是数字没有意义

COUNT统计符合条件的记录条数.SUM,AVG,MAX,MIN只支持数值类型

5.2 ⽰例

5.2.1 COUTN

① 统计exam表中有多少记录
在这里插入图片描述
在这里插入图片描述

② 统计语⽂成绩⼩于70分的学⽣个数
在这里插入图片描述

5.2.2 SUM

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

5.2.3 AVG

在这里插入图片描述

5.2.4 MAX, MIN

在这里插入图片描述

6. Group by 分组查询

GROUPBY⼦句的作⽤是通过⼀定的规则将⼀个数据集划分成若⼲个⼩的分组,然后针对若⼲个分组进⾏数据处理,⽐如使⽤聚合函数对分组进⾏统计。

6.1 语法

 SELECT {col_name |expr} ,... ,aggregate_function (aggregate_expr)FROM table_referencesGROUP BY {col_name|expr},...[HAVING]where_condition]
  • col_name|expr要查询的列或表达式,可以有多个,必须在据GROUP BY ⼦句中作为分组的依据.
  • aggregate_function: 聚合函数,⽐如COUNT(), SUM(), AVG(), MAX(), MIN()
  • aggregate_expr:聚合函数传⼊的列或表达式,如果列或表达式不在GOURP BY ⼦句中,必须包含在聚合函数中.

6.2 ⽰例

  1. 准备测试表
    列分别为:id(编号),name(姓名),role(⻆⾊),salary(薪⽔)
 drop table if exists emp;create table emp (id bigint primary key auto_increment,name varchar(20) not null,role varchar(20) not null,salary decimal(10, 2) not null);
  1. 插入测试数据
insert into emp values (1, '⻢云', '⽼板', 1500000.00);insert into emp values (2, '⻢化腾', '⽼板', 1800000.00);insert into emp values (3, '鑫哥', '讲师', 10000.00);insert into emp values (4, '博哥', '讲师', 12000.00);insert into emp values (5, '平姐', '学管', 9000.00);insert into emp values (6, '莹姐', '学管', 8000.00);insert into emp values (7, '孙悟空', '游戏⻆⾊', 956.8);insert into emp values (8, '猪悟能', '游戏⻆⾊', 700.5);insert into emp values (9, '沙和尚', '游戏⻆⾊', 333.3);
  1. 统计每个⻆⾊的⼈数
select role, count(*) from emp group by role;

在这里插入图片描述
在这里插入图片描述
4. 统计每个⻆⾊的平均⼯资,最⾼⼯资,最低⼯资

 select role, ROUND(avg(salary),2) as 平均⼯资,ROUND(max(salary),2) as 最⾼⼯资, ROUND(min(salary),2) as 最低⼯资 from emp group by role;

在这里插入图片描述
在这里插入图片描述

6.3 having⼦句

使⽤GROUPBY对结果进⾏分组处理之后,对分组的结果进⾏过滤时,不能使⽤where语句,而要使⽤ HAVING ⼦句(having 跟在group by字句之后).

  1. 显⽰平均⼯资低于1500的⻆⾊和它的平均⼯资
 select role, avg(salary) from emp group by role having avg(salary) < 1500;

在这里插入图片描述

6.4 Having 与Where 的区别

  • Having⽤于对分组结果的条件过滤
  • Where⽤于对表中真实数据的条件过滤

7.内置函数

MySQL内部实现好的一些函数,可以直接拿来用,一般对数据的处理在应用程序中完成,不要放在数据库.

7.1 ⽇期函数

日期函数

函数说明
CURDATE()返回当前⽇期,同义词CURRENT_DATE,CURRENT_DATE()
CURTIME()返回当前时间,同义词CURRENT_TIME,CURRENT_TIME([fsp])
NOW()返回当前⽇期和时间,同义语CURRENT_TIMESTAMP,CURRENT_TIMES
DATE(data)提取date或datetime表达式的⽇期部分
ADDDATE(date,INTERVAL expr unit)向⽇期值添加时间值(间隔),同义词DATE_ADD()
SUBDATE(date,INTERVAL expr unit)向⽇期值减去时间值(间隔),同义词DATE_SUB()
DATEDIFF(expr1,expr2)两个⽇期的差,以天为单位,expr1-expr2

在这里插入图片描述

7.2 字符串处理函数

函数说明
CHAR_LENGTH(str)返回给定字符串的⻓度,同义词CHARACTER_LENGTH()
LENGTH(str)返回给定字符串的字节数,与当前使⽤的字符编码集有关
CONCAT(str1,str2,…)返回拼接后的字符串
CONCAT_WS(separator,str1,s tr2,…)返回拼接后带分隔符的字符串
LCASE(str)将给定字符串转换成⼩写,同义词LOWER()
UCASE(str)将给定字符串转换成⼤写,同义词UPPER()
HEX(str), HEX(N)对于字符串参数str,HEX()返回str的⼗六进制字符串表⽰形式,对于数字参数N,HEX()返回⼀个⼗六进制字符串表⽰形式
INSTR(str,substr)返回substring第⼀次出现的索引
NSERT(str,pos,len,newstr )在指定位置插⼊⼦字符串,最多不超过指定的字符数
SUBSTR(str,pos) SUBSTR(str FROM pos FOR len)返回指定的⼦字符串,同义词SUBSTRING(str,pos),SUBSTRING(str FROM pos FOR len)
REPLACE(str,from_str,to_s tr)把字符串str中所有的from_str替换为to_str,区分⼤⼩写
STRCMP(expr1,expr2)逐个字符⽐较两个字符串,返回-1,0,1
LEFT(str,len),RIGHT(str,len)返回字符串str中最左/最右边的len个字符
LTRIM(str),RTRIM(str),TRIM(str)删除给定字符串的前导、末尾、前导和末尾的空格
TRIM([{LEADING/TRAILING /BOTH } [remstr] FROM]删除给定符串的前导、末尾或前导和末尾的指定字符串

示例:
显⽰学⽣的考试成绩,格式为"XXX的语⽂成绩:XXX分,数学成绩:XXX分,英语成绩:XXX分"

select concat(name, '的语⽂成绩:', chinese, '分,数学成绩:', math, '分,英语成绩:', english, '分') as 分数 from exam;

在这里插入图片描述

7.3 数学函数

函数说明
ABS(X)返回X的绝对值
CEIL(X)返回不⼩于X的最⼩整数值,同义词是CEILING(X)
FLOOR(X)返回不⼤于X的最⼤整数值
CONV(N,from_base,to_base)不同进制之间的转换
FORMAT(X,D)将数字X格式化为“#,###,###”的格式。##',四舍五⼊到⼩数点后D位,并以字符串形式返回
RAND([N])返回⼀个随机浮点值,取值范围[0.0,1.0)
ROUND(X), ROUND(X,D)将参数X舍⼊到⼩数点后D位
CRC32(expr)计算指定字符串的循环冗余校验值并返回⼀个32位⽆符号整数

在这里插入图片描述

示例: 字符串的循环冗余校验
在这里插入图片描述

7.4 其他常⽤函数

函数说明
version()显⽰当前数据库版本
user()显⽰当前⽤⼾
database()显⽰当前正在使⽤的数据库

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词