Skip to content

MySQL 数据查询

SELECT查询数据

1.查询表中所有数据

teacher 表为例,查询 teacher 表中的所有数据:

sql
SELECT \* FEOM teacher;

执行结果如下图 :

2025-05-24-19-58-11.png

这里没有指定查询条数,默认是查询表所有的行数据。

2.查询指定条数的结果集

查询指定条数,例如查询前10 条,可以使用命令:

sql
SELECT \* FROM teacher LIMIT 10;

执行结果如下图:

2025-05-24-19-59-32.png

这里指定查询条数 10 条,“LIMIT” 关键字后面跟查询的条数限制。

3.查询指定起始位置条数的结果集

想要查询第 11 条开始的后面 10 条数据可以使用命令 :

sql
SELECT \* FROM teacher LIMIT 10,10;

执行结果如下图: 2025-05-24-20-00-43.png

指定位置时,起始值是从 0 开始的,所以例子中 “LIMIT 10,10” 前面的 10 表示第 11 条,后面的 10 表示需要查询的条数,若不指定其实位置,默认是 0,

4.查询指定字段列的结果集

teacher 表为例,只需要查询 nameage 字段的列表值,命令如下:

sql
SELECT name,age FROM teacher LIMIT 6,5;

执行结果如下图: 2025-05-24-20-02-30.png

也可以给指定的字段重命名:

sql
SELECT name AS new_name,age FROM teacher LIMIT 6,5;

执行结果如下图: 2025-05-24-20-03-05.png

“SELECT” 后面跟的是要查询的字段名,若是 “*” 则表示查询所有字段,“name AS new_name” 表示对查询的字段列重新命名展示

LIKE 模糊查询

1.模糊查询表达式

% 表示指代任意内容,例如 '%小%' 表示包含 的表达式,且 前后都有内容, '%小' 表示以 结尾的表达式, 前面有内容,后面没有内容,'小%' 表示以 开头的表达式, 前面没有内容,后面有内容。

2.使用LIKE模糊查询

以 teacher 表为例,需要查询出姓 王 的教师信息结果集:

sql
SELECT \* FROM teacher WHERE name LIKE '王%';

执行结果如下图: 2025-05-24-20-10-05.png

WHERE 条件查询

WHERE 条件的操作符类型有如下:

符号说明举例
<小于, < 左边的值如果小于右边的值,则结果为 TRUE,否则为 FALSE如: 满足年龄小于 18 的条件 age < 18
=等于, = 左边的值如果等于右边的值,则结果为 TRUE,否则为 FALSE如: 姓名为 "小明" 的条件 name = '小明'
>大于, > 左边的值如果大于右边的值,则结果为 TRUE,否则为 FALSE如: 时间戳大于 2020-03-30 00:00:00 的条件 time > 1585497600
<>!=不等于, <\> 还可写成 !=,左边的值如果不等于右边的值,则结果为 TRUE,否则为 FALSE如: 年份不等于2012的条件 year != 2012year <> 2012
<=小于等于, <= 左边的值如果大于右边的值,则结果为 FALSE,否则为 TRUE如: 满足年龄小于等于 18 的条件 age <= 18
>=大于等于, >= 左边的值如果小于右边的值,则结果为 FALSE,否则为 TRUE如: 满足年龄大于等于 18 的条件 age >= 18
LIKE模糊条件, LIKE 右边的值如果包含左边的值,则结果返回 TRUE,否则为 FALSE如: 满足身份证号为 420 开头的条件 id_number LIKE '420%'
NOT LIKE不满足模糊条件, LIKE 右边的值如果不包含左边的值,则结果返回 TRUE,否则为 FALSE如: 满足身份证号不是 X 结尾的条件 id_number NOT LIKE '%X'
BETWEEN AND在两个值之间(包含两端值)如: 年龄满足 大于等于 20 和 小于等于 30 的条件 age BETWEEN 20 AND 30
NOT BETWEEN AND不在两个值之间(不包含两端值)如: 年龄满足 小于 20 和 大于 30 的条件 age NOT BETWEEN 20 AND 30
IS NULL空, IS NULL 左边的值如果为空,则返回 TRUE,否则为 FALSE如: 年龄满足 邮箱为空 的条件 email IS NULL
IS NOT NULL不是空, IS NOT NULL 左边的值如果不为空,则返回 TRUE,否则为 FALSE如: 年龄满足 邮箱不为空 的条件 email IS NOT NULL

1.单条件查询

teacher 表为例,查询年龄大于 18的教师信息:

sql
SELECT \* FROM teacher WHERE age > 18;

执行结果如下图: 2025-05-24-20-13-04.png

使用 LIKE 模糊查询身份证号以 020X 结尾的教师信息:

sql
SELECT \* FROM teacher WHERE id_number LIKE '%020X';

执行结果如下图: 2025-05-24-20-13-54.png

2.AND 多条件查询

teacher 表为例,查询年龄大于 18 和 教师姓氏 的教师信息:

sql
SELECT \* FROM teacher WHERE age > 18 AND name LIKE  '王%';

执行结果如下图: 2025-05-24-20-14-58.png

这里还想加更多的条件可以在后面继续跟 AND,LIKE 后面表达式中 % 表示指代任意内容。

3.OR 多条件查询

teacher 表为例,查询年龄大于 25 教师姓氏 的教师信息:

sql
SELECT \* FROM teacher WHERE age > 25 OR name LIKE  '王%';

执行结果如下图: 2025-05-24-20-16-45.png

这里还想加更多的条件可以在后面继续跟 OR,若 AND 和 OR 混合使用则需要把同一组表达式用 () 包起来,如 : (age > 25 AND name LIKE '王%') OR (age < 20 AND name LIKE '刘%')

4.BETWEEN AND 更新数据

teacher 表为例,将 age 在 20 和 30 之间的教师身份证设置为:

sql
UPDATE teacher SET id_number = '无' WHERE age BETWEEN 20 AND 30;

执行结果如下图: 2025-05-24-20-18-14.png

注意 BETWEEN AND 包含两端的值。

5.NULL 查询

先给 teacher 表增加一个字段 email:

sql
ALTER TABLE `item_name`.`teacher` 
ADD COLUMN `email` varchar(50) NULL AFTER `id_number`;

执行结果如下图: 2025-05-24-20-19-59.png

sql
TRUNCATE TABLE teacher;  #清空表数据

teacher 表插入几条测试数据:

sql
INSERT INTO teacher
(name,age,id_number,email)
VALUES
('姓名甲',19,'42011720200604077X',NULL),
('姓名乙',18,'42011720200604099X','123@qq.com'),
('姓名丙',20,'42011720200604020X',NULL),
('姓名丁',21,'42011720200604022X','345@qq.com'),
('姓名戊',22,'42011720200604033X',NULL)

查询 emailNULL 的教师信息结果集:

sql
SELECT \* FROM teacher WHERE email IS NULL;

执行结果如下图: 2025-05-24-20-21-41.png

UNION 联合查询

1.UNION ALL联合查询

先向 teacher 表插入多条测试数据:

sql
INSERT INTO teacher
(name,age,id_number,email)
VALUES
('姓名一',17,'42011720200604077X',NULL),
('姓名二',18,'42011720200604099X','123@qq.com'),
('姓名三',19,'42011720200604020X',NULL),
('姓名四',20,'42011720200604022X','345@qq.com'),
('姓名五',21,'42011720200604033X',NULL),
('姓名六',22,'42011720200604077X',NULL),
('姓名七',23,'42011720200604099X','123@qq.com'),
('姓名八',24,'42011720200604020X',NULL),
('姓名九',25,'42011720200604022X','345@qq.com'),
('姓名十',26,'42011720200604033X',NULL),
('姓名1',27,'42011720200604077X',NULL),
('姓名2',28,'42011720200604099X','123@qq.com'),
('姓名3',29,'42011720200604020X',NULL),
('姓名4',30,'42011720200604022X','345@qq.com'),
('姓名5',31,'42011720200604033X',NULL),
('姓名6',32,'42011720200604077X',NULL),
('姓名7',33,'42011720200604099X','123@qq.com'),
('姓名8',32,'42011720200604020X',NULL),
('姓名9',31,'42011720200604022X','345@qq.com'),
('姓名0',30,'42011720200604033X',NULL)

执行结果如下图: 2025-05-24-20-23-29.png

使用 UNION ALL 把满足两种查询条件的结果集并到一起:

sql
SELECT \* FROM teacher WHERE age > 20
UNION ALL
SELECT \* FROM teacher WHERE age > 25;

执行结果如下图: 2025-05-24-20-24-23.png

如上图所示,UNION ALL 将两种查询结果并到一起,仔细观察可以发现结果集中有重复的数据,所以使用 UNION ALL 联合查询的结果集没有去掉重复的数据。

2.UNION 联合查询

使用 UNION 把上面两种结果集并到一起:

sql
SELECT \* FROM teacher WHERE age > 20
UNION
SELECT \* FROM teacher WHERE age > 25;

执行结果如下图: 2025-05-24-20-25-54.png

如上图所示,UNION 将两种查询结果并到一起,可以看到结果集中已经去掉重复的数据。

最近更新