首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【MySQL初阶】表的增删查改(create、retrieve、update、delete)

【MySQL初阶】表的增删查改(create、retrieve、update、delete)

作者头像
_小羊_
发布2025-05-17 10:20:35
发布2025-05-17 10:20:35
36300
代码可运行
举报
文章被收录于专栏:C++C++
运行总次数:0
代码可运行

Create

插入

首先创建一张学生表:

代码语言:javascript
代码运行次数:0
运行
复制
mysql> create table students(
    -> id int unsigned primary key auto_increment,
    -> sn int not null unique,
    -> name varchar(20) not null,
    -> qq varchar(20) unique
    -> );
  • 全列插入
代码语言:javascript
代码运行次数:0
运行
复制
insert into students values (10, 111, '公孙离', 12345);
  • 指定列插入(into 可省略)
代码语言:javascript
代码运行次数:0
运行
复制
insert students (sn, name, qq) values (222, '孙策', 23456);
  • 多行插入
代码语言:javascript
代码运行次数:0
运行
复制
insert students values (20, 333, '貂蝉', 34567), (30, 444, '吕布', 45678);
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from students;
+----+-----+-----------+-------+
| id | sn  | name      | qq    |
+----+-----+-----------+-------+
| 10 | 111 | 公孙离    | 12345 |
| 11 | 222 | 孙策      | 23456 |
| 20 | 333 | 貂蝉      | 34567 |
| 30 | 444 | 吕布      | 45678 |
+----+-----+-----------+-------+
4 rows in set (0.00 sec)

插入否则更新

由于主键或者唯一键对应的值已经存在而导致插入失败。

代码语言:javascript
代码运行次数:0
运行
复制
--主键冲突
mysql> insert students values (30, 555, '狄仁杰', 56789);
ERROR 1062 (23000): Duplicate entry '30' for key 'students.PRIMARY'
--唯一键冲突
mysql> insert students values (31, 444, '狄仁杰', 56789);
ERROR 1062 (23000): Duplicate entry '444' for key 'students.sn'

可以选择性的进行同步更新操作语法:

代码语言:javascript
代码运行次数:0
运行
复制
insert ... on duplicate key update 
 column = value [, column = value] ... 
代码语言:javascript
代码运行次数:0
运行
复制
mysql> insert students values (31, 444, '狄仁杰', 56789) 
    -> on duplicate key update id = 30, sn = 555, name = '狄仁杰', qq = 56789;
Query OK, 2 rows affected (0.00 sec)
mysql> insert students values (31, 444, '狄仁杰', 56789) 
    -> on duplicate key update id = 31, sn = 444, name = '狄仁杰', qq = 56789;
Query OK, 2 rows affected (0.02 sec)

操作成功后的提示信息:

  • 0 rows affected:表中有冲突数据,但冲突数据的值和 update 的值相等;
  • 1 rows affected:表中没有冲突数据,数据被插入;
  • 2 rows affected:表中有冲突数据,并且数据已经被更新;
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from students;
+----+-----+-----------+-------+
| id | sn  | name      | qq    |
+----+-----+-----------+-------+
| 10 | 111 | 公孙离    | 12345 |
| 11 | 222 | 孙策      | 23456 |
| 20 | 333 | 貂蝉      | 34567 |
| 31 | 444 | 狄仁杰    | 56789 |
+----+-----+-----------+-------+
4 rows in set (0.00 sec)

替换
  • 主键 或者 唯一键 没有冲突,则直接插入;
  • 主键 或者 唯一键 如果冲突,则删除后再插入;
代码语言:javascript
代码运行次数:0
运行
复制
mysql> replace students (id, sn, name) values (32, 555, '百里守约');
Query OK, 1 row affected (0.01 sec)

mysql> replace into students values (11, 666, '后羿', 67890);
Query OK, 2 rows affected (0.02 sec)
  • 1 row affected: 表中没有冲突数据,数据被插入
  • 2 row affected: 表中有冲突数据,删除后重新插入
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from students;
+----+-----+--------------+-------+
| id | sn  | name         | qq    |
+----+-----+--------------+-------+
| 10 | 111 | 公孙离       | 12345 |
| 11 | 666 | 后羿         | 67890 |
| 20 | 333 | 貂蝉         | 34567 |
| 31 | 444 | 狄仁杰       | 56789 |
| 32 | 555 | 百里守约     | NULL  |
+----+-----+--------------+-------+
5 rows in set (0.00 sec)

Retrieve

创建测试表:

代码语言:javascript
代码运行次数:0
运行
复制
mysql> create table exam_result ( 
    ->  id int unsigned primary key auto_increment, 
    ->  name varchar(20) not NULL comment '同学姓名', 
    ->  chinese float default 0.0 comment '语文成绩', 
    ->  math float default 0.0 comment '数学成绩', 
    ->  english float default 0.0 comment '英语成绩' 
    -> );
代码语言:javascript
代码运行次数:0
运行
复制
mysql> desc exam_result;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int unsigned | NO   | PRI | NULL    | auto_increment |
| name    | varchar(20)  | NO   |     | NULL    |                |
| chinese | float        | YES  |     | 0       |                |
| math    | float        | YES  |     | 0       |                |
| english | float        | YES  |     | 0       |                |
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

插入测试数据:

代码语言:javascript
代码运行次数:0
运行
复制
mysql> insert exam_result (name, chinese, math, english) values
    ->  ('唐三藏', 67, 98, 56), 
    ->  ('孙悟空', 87, 78, 77), 
    ->  ('猪悟能', 88, 98, 90), 
    ->  ('曹孟德', 82, 84, 67), 
    ->  ('刘玄德', 55, 85, 45), 
    ->  ('孙权', 70, 73, 78), 
    ->  ('宋公明', 75, 65, 30);
select列
  • 全列查询
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from exam_result;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  1 | 唐三藏    |      67 |   98 |      56 |
|  2 | 孙悟空    |      87 |   78 |      77 |
|  3 | 猪悟能    |      88 |   98 |      90 |
|  4 | 曹孟德    |      82 |   84 |      67 |
|  5 | 刘玄德    |      55 |   85 |      45 |
|  6 | 孙权      |      70 |   73 |      78 |
|  7 | 宋公明    |      75 |   65 |      30 |
+----+-----------+---------+------+---------+
7 rows in set (0.00 sec)
  • 指定列查询
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, math from exam_result;
+-----------+------+
| name      | math |
+-----------+------+
| 唐三藏    |   98 |
| 孙悟空    |   78 |
| 猪悟能    |   98 |
| 曹孟德    |   84 |
| 刘玄德    |   85 |
| 孙权      |   73 |
| 宋公明    |   65 |
+-----------+------+
7 rows in set (0.00 sec)
  • 查询字段为表达式
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select id, name, english + 10 from exam_result;
+----+-----------+--------------+
| id | name      | english + 10 |
+----+-----------+--------------+
|  1 | 唐三藏    |           66 |
|  2 | 孙悟空    |           87 |
|  3 | 猪悟能    |          100 |
|  4 | 曹孟德    |           77 |
|  5 | 刘玄德    |           55 |
|  6 | 孙权      |           88 |
|  7 | 宋公明    |           40 |
+----+-----------+--------------+
7 rows in set (0.07 sec)
  • 为查询结果指定别名(as可省略)
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select id, name, chinese + math + english as 总分 from exam_result;
+----+-----------+--------+
| id | name      | 总分   |
+----+-----------+--------+
|  1 | 唐三藏    |    221 |
|  2 | 孙悟空    |    242 |
|  3 | 猪悟能    |    276 |
|  4 | 曹孟德    |    233 |
|  5 | 刘玄德    |    185 |
|  6 | 孙权      |    221 |
|  7 | 宋公明    |    170 |
+----+-----------+--------+
7 rows in set (0.01 sec)
  • 结果去重
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select distinct chinese from exam_result;
+---------+
| chinese |
+---------+
|      67 |
|      87 |
|      88 |
|      82 |
|      70 |
|      75 |
+---------+
6 rows in set (0.00 sec)

where条件

比较运算符

说明

>, >=, <, <=

大于,大于等于,小于,小于等于

=

等于,null 不安全,例如 null = null 的结果是 null

<=>

等于,null 安全,例如 null <=> null 的结果是 true(1)

!=, <>

不等于

between a0 and a1

范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 true(1)

in (option, …)

如果是 option 中的任意一个,返回 true(1)

is null

是 null

is not null

不是 null

like

模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符

说明

AND

多个条件必须都为 true(1),结果才是 true(1)

OR

任意一个条件为 true(1), 结果为 true(1)

NOT

条件为 true(1),结果为 false(0)

  • 英语不及格的同学及英语成绩 ( < 60 )
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, english from exam_result where english < 60;
+-----------+---------+
| name      | english |
+-----------+---------+
| 唐三藏    |      56 |
| 刘玄德    |      45 |
| 宋公明    |      30 |
+-----------+---------+
3 rows in set (0.00 sec)
  • 语文成绩在 [80, 90] 分的同学及语文成绩
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, chinese from exam_result 
	-> where chinese between 80 and 90;
+-----------+---------+
| name      | chinese |
+-----------+---------+
| 孙悟空    |      87 |
| 猪悟能    |      88 |
| 曹孟德    |      82 |
| 刘玄德    |      88 |
+-----------+---------+
4 rows in set (0.00 sec)
  • 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, math from exam_result where math in (58, 59, 98, 99);
+-----------+------+
| name      | math |
+-----------+------+
| 唐三藏    |   98 |
| 猪悟能    |   98 |
+-----------+------+
2 rows in set (0.00 sec)
  • 姓孙的同学
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name from exam_result where name like '孙%';
+-----------+
| name      |
+-----------+
| 孙悟空    |
| 孙权      |
+-----------+
2 rows in set (0.00 sec)
  • 孙某同学
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name from exam_result where name like '孙_';
+--------+
| name   |
+--------+
| 孙权   |
+--------+
1 row in set (0.00 sec)
  • 语文成绩好于英语成绩的同学
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, chinese, english from exam_result 
	-> where chinese > english;
+-----------+---------+---------+
| name      | chinese | english |
+-----------+---------+---------+
| 唐三藏    |      67 |      56 |
| 孙悟空    |      87 |      77 |
| 曹孟德    |      82 |      67 |
| 刘玄德    |      88 |      45 |
| 宋公明    |      75 |      30 |
+-----------+---------+---------+
5 rows in set (0.00 sec)
  • 总分在 200 分以下的同学
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, chinese + math + english 总分 from exam_result
    -> where chinese + math + english < 200;
+-----------+--------+
| name      | 总分   |
+-----------+--------+
| 宋公明    |    170 |
+-----------+--------+
1 row in set (0.00 sec)
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, chinese + math + english 总分 from exam_result 
    -> where 总分 < 200;
ERROR 1054 (42S22): Unknown column '总分' in 'where clause'

这里明明给 chinese + math + english 取了别名,怎么在where条件中不能用呢? 这和 select 语句的执行顺序有关:

首先判断查询哪个表 —> 然后判断条件是什么 —> 最后判断查什么

  • 语文成绩 > 80 并且不姓孙的同学
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, chinese from exam_result where 
    -> chinese > 80 and name not like '孙%';
+-----------+---------+
| name      | chinese |
+-----------+---------+
| 猪悟能    |      88 |
| 曹孟德    |      82 |
| 刘玄德    |      88 |
+-----------+---------+
3 rows in set (0.00 sec)
  • 孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, chinese, math, english, chinese + math + english 总分
    -> from exam_result where name like '孙_' or chinese + math + english > 200
    -> and chinese < math and english > 80;
+-----------+---------+------+---------+--------+
| name      | chinese | math | english | 总分   |
+-----------+---------+------+---------+--------+
| 猪悟能    |      88 |   98 |      90 |    276 |
| 孙权      |      70 |   73 |      78 |    221 |
+-----------+---------+------+---------+--------+
2 rows in set (0.00 sec)

结果排序
代码语言:javascript
代码运行次数:0
运行
复制
select ... from table_name [where ...] order by ...
  • asc 为升序
  • desc 为降序
  • 默认为 asc

没有 order by 子句的查询,返回的顺序是未定义的。

  • 同学及数学成绩,按数学成绩升序显示
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, math from exam_result order by math;
+-----------+------+
| name      | math |
+-----------+------+
| 宋公明    |   65 |
| 孙权      |   73 |
| 孙悟空    |   78 |
| 曹孟德    |   84 |
| 刘玄德    |   85 |
| 唐三藏    |   98 |
| 猪悟能    |   98 |
+-----------+------+
7 rows in set (0.00 sec)
  • 查询同学及总分,由高到低
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, chinese + english + math 总分 
	->from exam_result order by 总分 desc;
+-----------+--------+
| name      | 总分   |
+-----------+--------+
| 猪悟能    |    276 |
| 孙悟空    |    242 |
| 曹孟德    |    233 |
| 唐三藏    |    221 |
| 孙权      |    221 |
| 刘玄德    |    218 |
| 宋公明    |    170 |
+-----------+--------+
7 rows in set (0.00 sec)

和where条件不同的是,order by 后面可以用别名,这还是和select语句的执行顺序有关,这里是先要有合适的数据,然后才能排序。

  • 查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select name, math from exam_result where name like '孙%' 
    -> or name like '曹%' order by math desc;
+-----------+------+
| name      | math |
+-----------+------+
| 曹孟德    |   84 |
| 孙悟空    |   78 |
| 孙权      |   73 |
+-----------+------+
3 rows in set (0.00 sec)

筛选分页结果
  • 从 0 开始,筛选 n 条结果 select ... from table_name [where ...] [order by ...] limit n;
  • 从 s 开始,筛选 n 条结果 select ... from table_name [where ...] [order by ...] limit s, n;
  • 从 s 开始,筛选 n 条结果,比第二种用法更明确 select ... from table_name [where ...] [order by ...] limit n offset s;

对未知表进行查询时,最好加一条 limit 1,避免因为表中数据过大,查询全表数据导致数据库卡死。

  • 按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页
代码语言:javascript
代码运行次数:0
运行
复制
-- 第一页
mysql> select id, name, chinese, math, english from exam_result 
    -> order by id limit 3 offset 0;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  1 | 唐三藏    |      67 |   98 |      56 |
|  2 | 孙悟空    |      87 |   78 |      77 |
|  3 | 猪悟能    |      88 |   98 |      90 |
+----+-----------+---------+------+---------+
3 rows in set (0.00 sec)
代码语言:javascript
代码运行次数:0
运行
复制
-- 第二页
mysql> select id, name, chinese, math, english from exam_result
    -> order by id limit 3 offset 3;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  4 | 曹孟德    |      82 |   84 |      67 |
|  5 | 刘玄德    |      88 |   85 |      45 |
|  6 | 孙权      |      70 |   73 |      78 |
+----+-----------+---------+------+---------+
3 rows in set (0.00 sec)
代码语言:javascript
代码运行次数:0
运行
复制
-- 第三页
mysql> select id, name, chinese, math, english from exam_result
    -> order by id limit 3 offset 6;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  7 | 宋公明    |      75 |   65 |      30 |
+----+-----------+---------+------+---------+
1 row in set (0.00 sec)

如果数据量不足不会有影响。


Update

对查询到的结果进行列值更新。

  • 将孙悟空同学的数学成绩变更为 80 分
代码语言:javascript
代码运行次数:0
运行
复制
mysql> update exam_result set math = 80 where name = '孙悟空';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select name, math from exam_result where name = '孙悟空';
+-----------+------+
| name      | math |
+-----------+------+
| 孙悟空    |   80 |
+-----------+------+
1 row in set (0.00 sec)
  • 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
代码语言:javascript
代码运行次数:0
运行
复制
mysql> update exam_result set math = 60, chinese = 70 where name = '曹孟德';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select name, math, chinese from exam_result where name = '曹孟德';
+-----------+------+---------+
| name      | math | chinese |
+-----------+------+---------+
| 曹孟德    |   60 |      70 |
+-----------+------+---------+
1 row in set (0.00 sec)
  • 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

MySQL不支持 += 操作。

代码语言:javascript
代码运行次数:0
运行
复制
mysql> update exam_result set math = math + 30
    -> order by chinese + math + english limit 3;
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select name, math, chinese + math + english 总分 from exam_result 
    -> order by 总分;
+-----------+------+--------+
| name      | math | 总分   |
+-----------+------+--------+
| 曹孟德    |   90 |    227 |
| 宋公明    |  125 |    230 |
| 孙悟空    |   80 |    244 |
| 刘玄德    |  115 |    248 |
| 唐三藏    |  128 |    251 |
| 孙权      |  103 |    251 |
| 猪悟能    |   98 |    276 |
+-----------+------+--------+
7 rows in set (0.00 sec)
  • 将所有同学的语文成绩更新为原来的 2 倍(更新全表的操作一定要慎用!)
代码语言:javascript
代码运行次数:0
运行
复制
mysql> update exam_result set chinese = chinese * 2;
Query OK, 7 rows affected (0.04 sec)
Rows matched: 7  Changed: 7  Warnings: 0

mysql> select name, chinese from exam_result;
+-----------+---------+
| name      | chinese |
+-----------+---------+
| 唐三藏    |     134 |
| 孙悟空    |     174 |
| 猪悟能    |     176 |
| 曹孟德    |     140 |
| 刘玄德    |     176 |
| 孙权      |     140 |
| 宋公明    |     150 |
+-----------+---------+
7 rows in set (0.00 sec)

Delete

删除数据

delete from table_name [where ...] [order by ...] [limit ...];

  • 删除孙悟空同学的考试成绩
代码语言:javascript
代码运行次数:0
运行
复制
mysql> delete from exam_result where name = '孙悟空';
Query OK, 1 row affected (0.00 sec)

mysql> select * from exam_result where name = '孙悟空';
Empty set (0.00 sec)
  • 删除整张表数据
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from for_delete;
+----+------+
| id | name |
+----+------+
|  1 | A    |
|  2 | B    |
|  3 | C    |
+----+------+
3 rows in set (0.00 sec)

mysql> delete from for_delete;
Query OK, 3 rows affected (0.04 sec)

mysql> insert for_delete (name) values ('D');
Query OK, 1 row affected (0.02 sec)

mysql> select * from for_delete;
+----+------+
| id | name |
+----+------+
|  4 | D    |
+----+------+
1 row in set (0.00 sec)
截断表

truncate [table] table_name;

  1. 只能对整表操作,不能像 delete 一样针对部分数据操作;
  2. 实际上 truncate 不对数据操作,所以比 delete 更快,但是 truncate 在删除数据的时候,并不经过真正的事物,所以无法回滚
  3. 会重置 AUTO_INCREMENT 项;
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from for_truncate;
+----+------+
| id | name |
+----+------+
|  1 | A    |
|  2 | B    |
|  3 | C    |
+----+------+
3 rows in set (0.00 sec)

mysql> truncate for_truncate;
Query OK, 0 rows affected (0.22 sec)

mysql> insert for_truncate (name) values ('D');
Query OK, 1 row affected (0.03 sec)

mysql> select * from for_truncate;
+----+------+
| id | name |
+----+------+
|  1 | D    |
+----+------+
1 row in set (0.02 sec)

插入查询结果

现在有个要求,删除表中的重复数据。

比如下面的测试表:

代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from duplicate_table;
+------+------+
| id   | name |
+------+------+
|  100 | aaa  |
|  100 | aaa  |
|  200 | bbb  |
|  200 | bbb  |
|  200 | bbb  |
|  300 | ccc  |
+------+------+
6 rows in set (0.00 sec)

思路:

  1. 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样;
代码语言:javascript
代码运行次数:0
运行
复制
mysql> create table no_duplicate_table like duplicate_table;
Query OK, 0 rows affected (0.11 sec)
  1. 将 duplicate_table 的去重数据插入到 no_duplicate_table;
代码语言:javascript
代码运行次数:0
运行
复制
mysql> insert no_duplicate_table select distinct * from duplicate_table;
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0
  1. 通过重命名表,实现原子的去重操作;
代码语言:javascript
代码运行次数:0
运行
复制
mysql> rename table duplicate_table to old_duplicate_table, 
    -> no_duplicate_table to duplicate_table;
Query OK, 0 rows affected (0.15 sec)
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from duplicate_table;
+------+------+
| id   | name |
+------+------+
|  100 | aaa  |
|  200 | bbb  |
|  300 | ccc  |
+------+------+
3 rows in set (0.02 sec)

为什么要这样做呢?

直接对目标表做去重、写入操作,这个过程不是原子的,因此我们通常会先将去重后的数据写入到一个临时表中,然后通过rename/mv操作对临时文件重命名,变成我们想要的目标文件,原先文件作废。这么做的原因是 rename/mv 操作是原子的。


聚合函数

函数

功能

COUNT()

统计符合条件的记录行数

SUM()

计算某列数值的总和(仅适用于数值型列)

AVG()

计算某列数值的平均值(仅适用于数值型列)

MAX()

返回某列的最大值(支持数值、字符串、日期时间类型)

MIN()

返回某列的最小值(支持数值、字符串、日期时间类型)

  • 统计班级共有多少同学
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select * from students;
+----+-----+--------------+-------+
| id | sn  | name         | qq    |
+----+-----+--------------+-------+
| 10 | 111 | 公孙离       | 12345 |
| 11 | 666 | 后羿         | 67890 |
| 20 | 333 | 貂蝉         | 34567 |
| 31 | 444 | 狄仁杰       | 56789 |
| 32 | 555 | 百里守约     | NULL  |
+----+-----+--------------+-------+
5 rows in set (0.00 sec)

mysql> select count(*) from students;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.03 sec)
  • 统计数学成绩去重后的数量
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select count(distinct math) from exam_result;
+----------------------+
| count(distinct math) |
+----------------------+
|                    6 |
+----------------------+
1 row in set (0.00 sec)
  • 统计所有同学语文成绩总分
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select sum(chinese) from exam_result;
+--------------+
| sum(chinese) |
+--------------+
|          916 |
+--------------+
1 row in set (0.00 sec)
  • 统计所有同学总分的平均分
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select avg(chinese + math + english) from exam_result;
+-------------------------------+
| avg(chinese + math + english) |
+-------------------------------+
|                         323.5 |
+-------------------------------+
1 row in set (0.00 sec)
  • 找出英语最高分
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select max(english) from exam_result;
+--------------+
| max(english) |
+--------------+
|           90 |
+--------------+
1 row in set (0.01 sec)
  • 找出数学成绩 > 80 的最低分
代码语言:javascript
代码运行次数:0
运行
复制
mysql> select min(math) from exam_result where math > 80;
+-----------+
| min(math) |
+-----------+
|        90 |
+-----------+
1 row in set (0.00 sec)

group by

在select中使用group by 子句可以对指定列进行分组查询。 select col1, col2, ... from table_name group by col;

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Create
    • 插入
    • 插入否则更新
    • 替换
  • Retrieve
    • select列
    • where条件
    • 结果排序
    • 筛选分页结果
  • Update
  • Delete
    • 删除数据
    • 截断表
  • 插入查询结果
  • 聚合函数
  • group by
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档