目录
- 1、简介
- 2、正文
- 2.1 where子句位置
- 2.2 操作符
- 2.3 空值null
1、简介
当我们需要获取数据库表数据的特定子集时,可以使用where子句指定搜索条件进行过滤。where子句的使用场景非常丰富,它是mysql语句中需要重点掌握的一个知识点。where实现的所有功能都可以在mysql之外实现,但是直接在mysql中过滤查询速度更快,也能节省网络传输开销。
2、正文
首先准备一张user表,ddl和表数据如下所示,可以直接复制使用。
set names utf8mb4; set foreign_key_checks = 0; -- ---------------------------- -- table structure for user -- ---------------------------- drop table if exists `user`; create table `user` ( `id` bigint(20) not null auto_increment comment '主键', `name` varchar(255) character set utf8 collate utf8_general_ci not null comment '用户名', `age` int(11) not null comment '年龄', `sex` smallint(6) not null comment '性别', primary key (`id`) using btree ) engine = innodb auto_increment = 8 character set = utf8 collate = utf8_general_ci row_format = dynamic; -- ---------------------------- -- records of user -- ---------------------------- insert into `user` values (1, '李子捌', 18, 1); insert into `user` values (2, '张三', 22, 1); insert into `user` values (3, '李四', 38, 1); insert into `user` values (4, '王五', 25, 1); insert into `user` values (5, '六麻子', 13, 0); insert into `user` values (6, '田七', 37, 1); insert into `user` values (7, '谢礼', 18, 1); set foreign_key_checks = 1;
数据的初始顺序如下所示:
mysql> select * from user; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 2 | 张三 | 22 | 1 | | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | | 7 | 谢礼 | 18 | 1 | +----+--------+-----+-----+ 7 rows in set (0.00 sec)
2.1 where子句位置
where子句位于from之后,比如:
mysql> select * from user where age=18; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 7 | 谢礼 | 18 | 1 | | 8 | 李子柒 | 18 | 1 | +----+--------+-----+-----+ 3 rows in set (0.00 sec)
如果使用order by,where子句位于order by之前,比如:
mysql> select * from user where age = 18 order by name; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 8 | 李子柒 | 18 | 1 | | 7 | 谢礼 | 18 | 1 | +----+--------+-----+-----+ 3 rows in set (0.00 sec)
2.2 操作符
where子句支持8个操作符,它们分别如下所示:
操作符 | 操作符说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between and | 两个值之间的区间 比如 between 1 and 100 |
接下来使用表中操作符一个个的进行where子查询。
2.2.1 操作符 =
操作符=可以用于查询完全匹配的数据,注意mysql默认不区分英文大小写.
需求:
查询name等于李子捌的数据
语句:
select * from user where name = '李子捌';
结果:
+—-+——–+—–+—–+
| id | name | age | sex |
+—-+——–+—–+—–+
| 1 | 李子捌 | 18 | 1 |
+—-+——–+—–+—–+
1 row in set (0.00 sec)
操作符=如果存在多条匹配数据,那么符合where字句条件的数据均会返回,如果需要指定排序方式,可以结合order by对数据进行排序。
2.2.2 操作符 <> 和 !=
这两个操作符实现的效果相同,均是匹配不相等的数据。
需求:
查询name不等于李子捌的数据
语句:
select * from user where name <> '李子捌'; select * from user where name != '李子捌';
结果:
+—-+——–+—–+—–+
| id | name | age | sex |
+—-+——–+—–+—–+
| 2 | 张三 | 22 | 1 |
| 3 | 李四 | 38 | 1 |
| 4 | 王五 | 25 | 1 |
| 5 | 六麻子 | 13 | 0 |
| 6 | 田七 | 37 | 1 |
| 7 | 谢礼 | 18 | 1 |
| 8 | 李子柒 | 18 | 1 |
+—-+——–+—–+—–+
7 rows in set (0.00 sec)
2.2.3 操作符<= 、 <、>=、>
这四个操作符用于数值类型的列数据比较,但是如果作用于文本字段,mysql也能执行只是返回的结果可能并不是你预期的数据(理论上没人会这么玩,但确实不报错!)
需求:
查询年龄小于等于20的所有用户
语句:
select * from user where age <= 20;
结果:
+—-+——–+—–+—–+
| id | name | age | sex |
+—-+——–+—–+—–+
| 1 | 李子捌 | 18 | 1 |
| 5 | 六麻子 | 13 | 0 |
| 7 | 谢礼 | 18 | 1 |
| 8 | 李子柒 | 18 | 1 |
+—-+——–+—–+—–+
4 rows in set (0.00 sec)
2.2.4 between and
between and 用于查询两个数值范围之间的值,这个范围是两个闭区间,因此包含起始值和结束值。比如between 1 and 100,包含1和100的数据。
需求:
查询年龄大于等于20小于等于50的用户
语句:
select * from user where age between 20 and 50;
+—-+——+—–+—–+
| id | name | age | sex |
+—-+——+—–+—–+
| 2 | 张三 | 22 | 1 |
| 3 | 李四 | 38 | 1 |
| 4 | 王五 | 25 | 1 |
| 6 | 田七 | 37 | 1 |
+—-+——+—–+—–+
4 rows in set (0.00 sec)
2.3 空值null
空值null指的是不包含数据,它可以在建表的时候指定其中的列是否可以包含空值。需要注意null和数据值类型的0,字符类型的空格不一样,空值null指的是没有值。
关于空值null的查询,mysql提供了专门的where子句is null。
需求:
查询name为空值的数据
语句:
select * from user where name is null;
结果:
empty set (0.00 sec)
因为user表中不存在name值为空值的数据,所以没有数据返回。如果我们需要查询name列不为空的数据,该怎么查询呢?
这个时候我们可以使用is not null
mysql> select * from user where name is not null; +----+--------+-----+-----+ | id | name | age | sex | +----+--------+-----+-----+ | 1 | 李子捌 | 18 | 1 | | 2 | 张三 | 22 | 1 | | 3 | 李四 | 38 | 1 | | 4 | 王五 | 25 | 1 | | 5 | 六麻子 | 13 | 0 | | 6 | 田七 | 37 | 1 | | 7 | 谢礼 | 18 | 1 | | 8 | 李子柒 | 18 | 1 | +----+--------+-----+-----+
到此这篇关于mysql之where使用详解的文章就介绍到这了,更多相关mysql where使用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!