MySQL之where使用详解

 更新时间:2021年11月12日 08:31:50   作者:李子捌  
我们需要获取数据库表数据的特定子集时,可以使用where子句指定搜索条件进行过滤。本文主要介绍了MySQL之where使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL备份恢复设计思路

    MySQL备份恢复设计思路

    这篇文章主要介绍了MySQL备份恢复设计思路,帮助大家更好的维护数据库,感兴趣的朋友可以了解下
    2020-10-10
  • MySQL删除数据库的方法举例

    MySQL删除数据库的方法举例

    很久没有使用命令行操作mysql,百度搜罗后重新整理,加强记忆便于查询,下面这篇文章主要给大家介绍了关于MySQL删除数据库的相关资料,文中给出了详细的实例代码,需要的朋友可以参考下
    2023-04-04
  • Windows MySQL修改配置文件my.ini不生效问题

    Windows MySQL修改配置文件my.ini不生效问题

    在Windows Server 2019上修改MySQL 5.6的安装目录下my.ini文件后,需要通过修改注册表中的ImagePath值来确保MySQL读取新的配置文件,修改时应确保配置文件路径正确,并且新配置不会覆盖原有配置,以保证修改生效
    2025-01-01
  • MySQL中的字符替换示例详解

    MySQL中的字符替换示例详解

    本文介绍了 MySQL 中的两种字符替换函数:REPLACE 和 REGEXP_REPLACE,通过这两个函数的使用,我们可以方便地进行字符替换操作,提高数据处理的效率和准确性,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • MySQL长连接短连接面试精讲

    MySQL长连接短连接面试精讲

    这篇文章主要为大家介绍了MySQL长连接短连接面试精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • MybatisPlus拦截器如何实现数据表分表

    MybatisPlus拦截器如何实现数据表分表

    为了解决MySQL中大数据量的查询效率问题,采用水平拆分策略,通过取模运算确定表后缀,实现数据的有效管理,设计分表时,需利用线程变量存取请求参数,并通过拦截器确定操作的具体表名,从而优化数据处理性能,此方法适用于业务表数据量大或快速增长的场景
    2024-11-11
  • MySQL窗口函数实现榜单排名

    MySQL窗口函数实现榜单排名

    相信大家在日常的开发中经常会碰到榜单类的活动需求,本文主要介绍了MySQL窗口函数实现榜单排名,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • ubuntu16.04.1下 mysql安装和卸载图文教程

    ubuntu16.04.1下 mysql安装和卸载图文教程

    这篇文章主要介绍了ubuntu16.04.1下 mysql安装和卸载图文教程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • MySQL正则表达式regexp_replace函数的用法实例

    MySQL正则表达式regexp_replace函数的用法实例

    regexp_replace的使用非常灵活,且容易忘记,故做此笔记,下面这篇文章主要给大家介绍了关于MySQL正则表达式regexp_replace函数的用法实例,需要的朋友可以参考下
    2022-09-09
  • mysql workbench 设置外键的方法实现

    mysql workbench 设置外键的方法实现

    在MySQL Workbench中设置外键属性是非常方便的,本文就来介绍一下mysql workbench 设置外键的方法实现,具有一定能的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论