MySQL数据库基础(6):增删改查操作(1)

🌸雨落在了我的手上:个人主页

🐟个人仓库:Gitee仓库

❄️个人专栏:<<JaveSe>> <<C语言>> <<C语言数据结构>>** <<Java数据结构*** >>***

<<MySQL数据库基础 >>

🔥🔥🔥 人生格言:无人扶我青云志,我自踏雪至山巅

🎬 博主简介


目录

一:本节⽬标

二:CRUD简介

[三:Create 新增](#三:Create 新增)

1.语法

2.⽰例

1.单⾏数据全列插⼊

2.单⾏数据指定列插⼊

3.多⾏数据指定列插⼊

[四:Retrieve 检索](#四:Retrieve 检索)

1.语法

2.⽰例

1.构造数据

3.Select

1.全列查询

2.指定列查询

3.查询字段为表达式

4.为查询结果指定别名

5.结果去重查询

4.Where条件查询

1.语法

2.⽐较运算符

3.逻辑运算符

4.⽰例

5.Orderby排序

1.语法

2.⽰例

6.分⻚查询

1.语法

2.⽰例


内容大纲:

本文系统讲解SQL的CRUD操作,涵盖数据插入(INSERT)、查询(SELECT)、条件筛选(WHERE)、排序(ORDER BY)及分页(LIMIT)等核心语法。通过实例演示全列与指定列查询、表达式计算、别名使用、去重(DISTINCT)、NULL处理、模糊匹配(LIKE)、范围查询(BETWEEN/IN)及逻辑运算符优先级。重点强调WHERE中不可用别名、NULL比较需用IS NULL、AND优先级高于OR,并结合分组与聚合函数为后续学习铺垫。


一:本节⽬标

• 熟练使⽤SQL语句对数据库进⾏CRUD操作

• 掌握聚合函数的使⽤

• 掌握分组查询以及对分组结果进⾏过滤

• 了解内置函数

二:CRUD简介

CURD是对数据库中的记录进⾏基本的增删改查操作:

• Create(创建)

• Retrieve(读取)

• Update(更新)

• Delete(删除)

三:Create 新增

1.语法

sql 复制代码
INSERT [INTO] table_name
    [(column [, column] ...)]
VALUES
    (value_list) [, (value_list)] ...

value_list: value, [, value] ...

2.⽰例

sql 复制代码
# 创建一个用于演示的表
create table users (
    id bigint,
    name varchar(20) 
);

1.单⾏数据全列插⼊

• value_list 中值的数量必须和定义表的列的数量及顺序⼀致

sql 复制代码
# 插入第一条记录
mysql> insert into users values (1, '张三');
Query OK, 1 row affected (0.02 sec)

# 插入第二条记录
mysql> insert into users values (2, '李四');
Query OK, 1 row affected (0.01 sec)

# 查询结果
mysql> select * from users;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
+------+------+
2 rows in set (0.00 sec)

2.单⾏数据指定列插⼊

• value_list 中值的数量必须和定义表的列的数量及顺序⼀致

sql 复制代码
# 指定了具体要插入的列
mysql> insert into users(id, name) values (3, '王五');
Query OK, 1 row affected (0.01 sec)

mysql> select * from users;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
|    3 | 王五 |
+------+------+
3 rows in set (0.00 sec)

3.多⾏数据指定列插⼊

• 在⼀条INSERT语句中也可以指定多个value_list,实现⼀次插⼊多⾏数据

sql 复制代码
# 每个value_list表示一行数据
mysql> insert into users(id, name) values (4, '赵六'), (5, '钱七');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from users;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
|    3 | 王五 |
|    4 | 赵六 |
|    5 | 钱七 |
+------+------+
5 rows in set (0.00 sec)

四:Retrieve 检索

1.语法

sql 复制代码
SELECT
    [DISTINCT]
    select_expr [, select_expr] ...
    [FROM table_references]
    [WHERE where_condition]
    [GROUP BY {col_name | expr}, ...]
    [HAVING where_condition]
    [ORDER BY {col_name | expr} [ASC | DESC], ... ]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

2.⽰例

1.构造数据

sql 复制代码
-- 创建表结构
CREATE TABLE exam (
    id BIGINT,
    name VARCHAR(20) 
    chinese float 
    math float 
    english float 
);

-- 插入测试数据
INSERT INTO exam (name, chinese, math, english) VALUES
(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);
Query OK, 7 rows affected (0.00 sec)
Records: 7  Duplicates: 0  Warnings: 0

3.Select

1.全列查询

• 查询所有记录

sql 复制代码
# 使用 * 可以查询表中所有列的值
mysql> select * from exam;
+------+--------+---------+------+---------+
| 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)

2.指定列查询

• 查询所有⼈的编号、姓名和语⽂成绩

sql 复制代码
mysql> select id, name, chinese from exam;
+------+--------+---------+
| id   | name   | chinese |
+------+--------+---------+
|    1 | 唐三藏 |      67 |
|    2 | 孙悟空 |      87 |
|    3 | 猪悟能 |      88 |
|    4 | 曹孟德 |      82 |
|    5 | 刘玄德 |      55 |
|    6 | 孙权   |      70 |
|    7 | 宋公明 |      75 |
+------+--------+---------+
7 rows in set (0.00 sec)

在select后⾯的查询列表中指定希望查询的列,可以是⼀个也可以是多个,中间⽤逗号隔开

指定列的顺序与表结构中的列的顺序⽆关

3.查询字段为表达式

• 常量表达式

sql 复制代码
# 表达式本身就是一个常量
mysql> select id, name, 10 from exam;
+------+--------+----+
| id   | name   | 10 |
+------+--------+----+
|    1 | 唐三藏 | 10 |
|    2 | 孙悟空 | 10 |
|    3 | 猪悟能 | 10 |
|    4 | 曹孟德 | 10 |
|    5 | 刘玄德 | 10 |
|    6 | 孙权   | 10 |
|    7 | 宋公明 | 10 |
+------+--------+----+
7 rows in set (0.00 sec)

# 也可以是常量的运算
mysql> select id, name, 10 + 1 from exam;
+------+--------+--------+
| id   | name   | 10 + 1 |
+------+--------+--------+
|    1 | 唐三藏 |     11 |
|    2 | 孙悟空 |     11 |
|    3 | 猪悟能 |     11 |
|    4 | 曹孟德 |     11 |
|    5 | 刘玄德 |     11 |
|    6 | 孙权   |     11 |
|    7 | 宋公明 |     11 |
+------+--------+--------+
7 rows in set (0.01 sec)

• 把所有学⽣的语⽂成绩加10分

sql 复制代码
# 表达式中包含一个字段
mysql> select id, name, chinese + 10 from exam;
+------+--------+-------------+
| id   | name   | chinese + 10 |
+------+--------+-------------+
|    1 | 唐三藏 |          77 |
|    2 | 孙悟空 |          97 |
|    3 | 猪悟能 |          98 |
|    4 | 曹孟德 |          92 |
|    5 | 刘玄德 |          65 |
|    6 | 孙权   |          80 |
|    7 | 宋公明 |          85 |
+------+--------+-------------+
7 rows in set (0.00 sec)

• 计算所有学⽣语⽂、数学和英语成绩的总分

sql 复制代码
# 表达式包含多个字段
mysql> select id, name, chinese + math + english from exam;
+------+--------+--------------------------+
| id   | name   | chinese + math + english |
+------+--------+--------------------------+
|    1 | 唐三藏 |                      221 |
|    2 | 孙悟空 |                      242 |
|    3 | 猪悟能 |                      276 |
|    4 | 曹孟德 |                      233 |
|    5 | 刘玄德 |                      185 |
|    6 | 孙权   |                      221 |
|    7 | 宋公明 |                      170 |
+------+--------+--------------------------+
7 rows in set (0.00 sec)

4.为查询结果指定别名

语法:

sql 复制代码
SELECT column [AS] alias_name [, ...] FROM table_name;

AS可以省略,别名如果包含空格必须⽤单引号包裹

⽰例:

• 为总分这⼀列指定别名

sql 复制代码
mysql> select id, name, chinese + math + english as 总分 from exam;
+------+--------+--------+
| id   | name   | 总分   |  # 表头以别名显示
+------+--------+--------+
|    1 | 唐三藏 |    221 |
|    2 | 孙悟空 |    242 |
|    3 | 猪悟能 |    276 |
|    4 | 曹孟德 |    233 |
|    5 | 刘玄德 |    185 |
|    6 | 孙权   |    221 |
|    7 | 宋公明 |    170 |
+------+--------+--------+
7 rows in set (0.00 sec)

5.结果去重查询

• 查询当前所的数学成绩

sql 复制代码
# 通过观察有两条98的记录
mysql> select math from exam;
+------+
| math |
+------+
|   98 |  # 第一条
|   78 |
|   98 |  # 第二条
|   84 |
|   85 |
|   73 |
|   65 |
+------+
7 rows in set (0.00 sec)

• 在结果集中去除重复记录,可以使⽤DISTINCT

sql 复制代码
# 去重查询
mysql> select distinct math from exam;
+------+
| math |
+------+
|   98 |
|   78 |
|   84 |
|   85 |
|   73 |
|   65 |
+------+
6 rows in set (0.00 sec)

使⽤DISCTINCT去重时,只有查询列表中所有列的值都相同才会判定为重复

注意:

• 查询时不加限制条件会返回表中所有结果,如果表中的数据量过⼤,会把服务器的资源消耗殆尽 • 在⽣产环境不要使不加限制条件的查询

4.Where条件查询

1.语法

sql 复制代码
SELECT
    select_expr [, select_expr] ... [FROM table_references]
    WHERE where_condition

2.⽐较运算符

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,对于NULL的比较不安全,比如NULL = NULL结果还是NULL
<=> 等于,对于NULL的比较是安全的,比如NULL <=> NULL结果是TRUE(1)
!=, <> 不等于
value BETWEEN a0 AND a1 范围匹配,a0, a1,如果a0 <= value <= a1,返回TRUE或1,NOT BETWEEN则取反
value IN (option, ...) 如果value在option列表中,则返回TRUE(1),NOT IN则取反
IS NULL 是NULL
IS NOT NULL 不是NULL
LIKE 模糊匹配,% 表示任意多个(包括0个)字符;_ 表示任意一个字符,NOT LIKE则取反

3.逻辑运算符

运算符 说明
AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1),结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)

4.⽰例

基本查询:

• 查询英语不及格的同学及英语成绩(<60)

sql 复制代码
mysql> select name, english from exam where english < 60;
+--------+---------+
| name   | english |
+--------+---------+
| 唐三藏 |      56 |
| 刘玄德 |      45 |
| 宋公明 |      30 |
+--------+---------+
3 rows in set (0.00 sec)

• 查询语⽂成绩⾼于英语成绩的同学

sql 复制代码
mysql> select name, chinese, english from exam where chinese > english;
+--------+---------+---------+
| name   | chinese | english |
+--------+---------+---------+
| 唐三藏 |      67 |      56 |
| 孙悟空 |      87 |      77 |
| 曹孟德 |      82 |      67 |
| 刘玄德 |      55 |      45 |
| 宋公明 |      75 |      30 |
+--------+---------+---------+
5 rows in set (0.00 sec)

• 总分在200分以下的同学

sql 复制代码
mysql> select name, chinese + math + english as 总分 from exam where chinese + 
    math + english < 200;
+--------+--------+
| name   | 总分   |
+--------+--------+
| 刘玄德 |    185 |
| 宋公明 |    170 |
+--------+--------+
2 rows in set (0.00 sec)

AND和OR:

• 查询语⽂成绩⼤于80分且英语成绩⼤于80分的同学

sql 复制代码
mysql> select * from exam where chinese > 80 and english > 80;
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    3 | 猪悟能 |      88 |   98 |      90 |
+------+--------+---------+------+---------+
1 row in set (0.00 sec)

• 查询语⽂成绩⼤于80分或英语成绩⼤于80分的同学

sql 复制代码
mysql> select * from exam where chinese > 80 OR english > 80;
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    2 | 孙悟空 |      87 |   78 |      77 |
|    3 | 猪悟能 |      88 |   98 |      90 |
|    4 | 曹孟德 |      82 |   84 |      67 |
+------+--------+---------+------+---------+
3 rows in set (0.00 sec)

• 观察AND和OR的优先级

sql 复制代码
mysql> select * from exam where chinese > 80 or math > 70 and english > 70;
mysql> select * from exam where (chinese > 80 or math > 70) and english > 70;

核心规则:优先级

在 SQL 中,逻辑运算符的默认优先级是:NOT > AND > OR 。

这意味着,如果没有括号,数据库会先算 AND,再算 OR。

范围查询:

• 语⽂成绩在80,90分的同学及语⽂成绩

sql 复制代码
# 使用BETWEEN AND 实现
mysql> select name, chinese from exam where chinese between 80 and 90;

# 使用 AND 实现
mysql> select name, chinese from exam where chinese >= 80 and chinese <= 90;
+--------+---------+
| name   | chinese |
+--------+---------+
| 孙悟空 |      87 |
| 猪悟能 |      88 |
| 曹孟德 |      82 |
+--------+---------+
3 rows in set (0.00 sec)

• 数学成绩是78或者79或者98或者99分的同学及数学成绩

sql 复制代码
# 使用IN实现
mysql> select name, math from exam where math in (78, 79, 98, 99);

# 使用OR实现
mysql> select name, math from exam where math = 78 or math = 79 or math = 98 or 
    math = 99;
+--------+------+
| name   | math |
+--------+------+
| 唐三藏 |   98 |
| 孙悟空 |   78 |
| 猪悟能 |   98 |
+--------+------+
3 rows in set (0.00 sec)

模糊查询:

• 查询所有姓孙的同学

sql 复制代码
mysql> select * from exam where name like '孙%';
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    2 | 孙悟空 |      87 |   78 |      77 |
|    6 | 孙权   |      70 |   73 |      78 |
+------+--------+---------+------+---------+
2 rows in set (0.00 sec)

• 查询姓孙且姓名共有两个字同学

sql 复制代码
mysql> select * from exam where name like '孙_';
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    6 | 孙权   |      70 |   73 |      78 |
+------+--------+---------+------+---------+
1 row in set (0.00 sec)

NULL的查询:

• 构造数据

sql 复制代码
# 写入一条数据,英语成绩为NULL
insert into exam values (8, '张飞', 27, 0, NULL);

• 查询英语成绩为NULL的记录

sql 复制代码
# 使用is null

mysql> select * from exam where english is null;
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    8 | 张飞   |      27 |    0 | NULL    |
+------+--------+---------+------+---------+
1 row in set (0.00 sec)

• 查询英语成绩不为NULL的记录

sql 复制代码
# 使用is not null

mysql> select * from exam where english is not null;
+------+--------+---------+------+---------+
| 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)

• NULL与其他值进⾏运算结果为NULL

sql 复制代码
# 观察结果中的总分
mysql> select name, chinese + math + english as 总分 from exam;
+--------+--------+
| name   | 总分   |
+--------+--------+
| 唐三藏 |    221 |
| 孙悟空 |    242 |
| 猪悟能 |    276 |
| 曹孟德 |    233 |
| 刘玄德 |    185 |
| 孙权   |    221 |
| 宋公明 |    170 |
| 张飞   |   NULL |
+--------+--------+
8 rows in set (0.00 sec)

注意:

• WHERE条件中可以使⽤表达式,但不能使⽤别名

• AND的优先级⾼于OR,在同时使⽤时,建议使⽤⼩括号()包裹优先执⾏的部分

• 过滤NULL时不要使⽤等于号 ( = )与不等于号( != , <>)

• NULL与任何值运算结果都为NULL

5.Orderby排序

1.语法

sql 复制代码
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...] ORDER BY {col_name | expr } [ASC | DESC], ... ;

2.⽰例

• 按数学成绩从低到⾼排序(升序)

sql 复制代码
mysql> select name, math from exam order by math asc;
+--------+------+
| name   | math |
+--------+------+
| 张飞   |    0 |
| 宋公明 |   65 |
| 孙权   |   73 |
| 孙悟空 |   78 |
| 曹孟德 |   84 |
| 刘玄德 |   85 |
| 唐三藏 |   98 |
| 猪悟能 |   98 |
+--------+------+
8 rows in set (0.00 sec)

• 按语⽂成绩从⾼到低排序(降序)

sql 复制代码
mysql> select name, chinese from exam order by chinese desc;
+--------+---------+
| name   | chinese |
+--------+---------+
| 猪悟能 |      88 |
| 孙悟空 |      87 |
| 曹孟德 |      82 |
| 宋公明 |      75 |
| 孙权   |      70 |
| 唐三藏 |      67 |
| 刘玄德 |      55 |
| 张飞   |      27 |
+--------+---------+
8 rows in set (0.00 sec)

• 查询同学各⻔成绩,依次按数学降序,英语升序,语⽂升序的⽅式显⽰

sql 复制代码
mysql> select name, math, english, chinese from exam order by math desc, english asc, chinese asc;
+--------+------+---------+---------+
| name   | math | english | chinese |
+--------+------+---------+---------+
| 唐三藏 |   98 |      56 |      67 |
| 猪悟能 |   98 |      90 |      88 |
| 刘玄德 |   85 |      45 |      55 |
| 曹孟德 |   84 |      67 |      82 |
| 孙悟空 |   78 |      77 |      87 |
| 孙权   |   73 |      78 |      70 |
| 宋公明 |   65 |      30 |      75 |
| 张飞   |    0 |    NULL |      27 |
+--------+------+---------+---------+
8 rows in set (0.00 sec)

• 查询同学及总分,由⾼到低排序

sql 复制代码
mysql> select name, chinese + math + english from exam order by chinese + math 
    + english desc;
+--------+--------------------------+
| name   | chinese + math + english |
+--------+--------------------------+
| 猪悟能 |                      276 |
| 孙悟空 |                      242 |
| 曹孟德 |                      233 |
| 唐三藏 |                      221 |
| 孙权   |                      221 |
| 刘玄德 |                      185 |
| 宋公明 |                      170 |
| 张飞   |                     NULL |
+--------+--------------------------+
8 rows in set (0.00 sec)

• 可以使⽤列的别名进⾏排序

sql 复制代码
mysql> select name, chinese + math + english as 总分 from exam order by 总分 desc;
+--------+--------+
| name   | 总分   |
+--------+--------+
| 猪悟能 |    276 |
| 孙悟空 |    242 |
| 曹孟德 |    233 |
| 唐三藏 |    221 |
| 孙权   |    221 |
| 刘玄德 |    185 |
| 宋公明 |    170 |
| 张飞   |   NULL |
+--------+--------+
8 rows in set (0.00 sec)

• 所有英语成绩不为NULL的同学,按语⽂成绩从⾼到低排序

sql 复制代码
mysql> select * from exam where english is not null order by chinese desc;
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    3 | 猪悟能 |      88 |   98 |      90 |
|    2 | 孙悟空 |      87 |   78 |      77 |
|    4 | 曹孟德 |      82 |   84 |      67 |
|    7 | 宋公明 |      75 |   65 |      30 |
|    6 | 孙权   |      70 |   73 |      78 |
|    1 | 唐三藏 |      67 |   98 |      56 |
|    5 | 刘玄德 |      55 |   85 |      45 |
+------+--------+---------+------+---------+
7 rows in set (0.00 sec)

注意:

• 查询中没有ORDERBY⼦句,返回的顺序是未定义的,永远不要依赖这个顺序

• ORDERBY⼦句中可以使⽤列的别名进⾏排序

• NULL进⾏排序时,视为⽐任何值都⼩,升序出现在最上⾯,降序出现在最下⾯

6.分⻚查询

1.语法

sql 复制代码
-- 起始下标为 0
-- 从 0 开始,筛选 num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num;
-- 从 start 开始,筛选 num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT start, num;
-- 从 start 开始,筛选 num 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num OFFSET start;

2.⽰例

sql 复制代码
# 查询第一页数据
mysql> select * from exam order by id asc limit 0, 3;
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    1 | 唐三藏 |      67 |   98 |      56 |
|    2 | 孙悟空 |      87 |   78 |      77 |
|    3 | 猪悟能 |      88 |   98 |      90 |
+------+--------+---------+------+---------+
3 rows in set (0.00 sec)

# 查询第二页数据
mysql> select * from exam order by id asc limit 3, 3;
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    4 | 曹孟德 |      82 |   84 |      67 |
|    5 | 刘玄德 |      55 |   85 |      45 |
|    6 | 孙权   |      70 |   73 |      78 |
+------+--------+---------+------+---------+
3 rows in set (0.00 sec)

# 查询第三页数据,没有达到limit的条数限制,也不会有任何影响,有多少条就显示多少条
mysql> select * from exam order by id asc limit 6, 3;
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    7 | 宋公明 |      75 |   65 |      30 |
|    8 | 张飞   |      27 |    0 |    NULL |
+------+--------+---------+------+---------+
2 rows in set (0.00 sec)

详细解析:

这段演示假设我们有一个需求:按照 id 升序排列,每页显示 3 条记录。

  1. 查询第一页数据
  • 语句 :select * from exam order by id asc limit 0, 3;

  • 分析 :limit 0, 3 表示从下标 0(即第一条记录)开始,向后取 3 条。

  • 结果:成功获取了 id 为 1、2、3 的三条数据。

  1. 查询第二页数据
  • 语句 :select * from exam order by id asc limit 3, 3;

  • 分析 :limit 3, 3 表示跳过前 3 条(即第一页的数据),从下标 3 开始,向后取 3 条。

  • 结果:成功获取了 id 为 4、5、6 的三条数据。

  1. 查询第三页数据(越界处理)
  • 语句 :select * from exam order by id asc limit 6, 3;

  • 分析 :limit 6, 3 表示跳过前 6 条,从下标 6 开始取 3 条。

  • 重要现象 :表里实际上只有 8 条数据。跳过前 6 条后,只剩下第 7 条(宋公明)和第 8 条(张飞)。虽然 LIMIT 要求取 3 条,但数据库发现后面已经没有数据了,所以它只会返回实际存在的 2 条数据,而不会报错,也不会用空行补齐。正如代码中的注释所写:"有多少条就显示多少条"。

后续内容我们下一章补齐!!!

相关推荐
Omics Pro1 小时前
全新可重分析!代谢组质谱专用
数据库·人工智能·算法·机器学习·自然语言处理
ao-weilai1 小时前
MySQL数据库:用户管理
数据库·mysql·adb
冰暮流星2 小时前
sql之is not null运算符
数据库·sql·oracle
冰暮流星2 小时前
sql之is null 运算符
java·数据库·sql
mengge.cloud2 小时前
Redis
运维·服务器·数据库·redis·缓存·云计算
码流子2 小时前
02-易迁信创兼容引擎
大数据·数据库·python
欣栀♡2 小时前
Redis 缓存穿透、击穿、雪崩,背出定义只是及格线
数据库·redis·缓存
杨云龙UP2 小时前
PostgreSQL 四种常见部署模式快速理解:单实例、流复制、repmgr、Patroni
linux·运维·数据库·postgresql·流复制·高可用ha
l1t3 小时前
DeepSeek总结的PostgreSQL 19回退会一直继续,直到士气好转
数据库·postgresql