1. Update 修改
1.1 语法
对符合条件的结果进⾏列值更新
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET 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 ⽰例
- 准备测试表
CREATE TABLE t_truncate (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
- 插⼊测试数据
INSERT INTO t_truncate (name) VALUES ('A'), ('B'), ('C');
- 查看测试表
select * from t_truncate;
- 查看建表结构,AUTO_INCREMENT=4
- 截断表,注意受影响的⾏数是0
- 插入一条数据,再次查看表结构,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_references
GROUP 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 ⽰例
- 准备测试表
列分别为: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
);
- 插入测试数据
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);
- 统计每个⻆⾊的⼈数
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字句之后).
- 显⽰平均⼯资低于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() | 显⽰当前正在使⽤的数据库 |