where使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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 |

+----+--------+-----+-----+

8 rows in set (0.00 sec)

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
Java 关系型数据库 数据库
微服务设计|基于SpringCloud微服务技术的旅游信息平台的设计与实现
微服务设计|基于SpringCloud微服务技术的旅游信息平台的设计与实现
162 0
|
6月前
|
存储 运维 Kubernetes
Serverless 应用引擎产品使用合集之部署Stable Diffusion启动失败一般是什么导致的
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
7月前
|
设计模式 人工智能 算法
Python ABC:应用场景和示例
Python ABC:应用场景和示例
111 3
|
7月前
|
缓存
Microsoft Store微软商店更新失败/无法更新应用解决方法
Microsoft Store微软商店更新失败/无法更新应用解决方法
6248 0
如何配置支付宝沙箱环境
如何配置支付宝沙箱环境
164 0
|
应用服务中间件 开发工具 nginx
vim 配置 nginx 语法高亮
使用 vim 编辑器编辑 nginx 配置文件时,无法实现”语法高亮”功能,也就是说,默认情况下,使用 vim 编辑 nginx 配置文件时,没有彩色的语法着色。
vim 配置 nginx 语法高亮
|
网络协议 测试技术 开发工具
大学生学计算机科学或者软件工程,未来有哪些职业发展路径?
@[TOC](目录) 计算机科学和软件工程是大学中非常受欢迎的专业,这两个专业涉及到许多技术和领域,因此有很多职业发展路径可供选择。以下是超过 20 种职业选择及其对应的技能要求: # 1. 软件开发工程师: 掌握编程语言,如 Java、Python、C++ 等;熟练掌握软件开发工具和技术,如 IDE、版本控制工具、测试工具等;具备良好的代码编写和架构设计能力。 # 2. 计算机网络工程师: 熟悉网络协议和架构,如 TCP/IP、HTTP、HTTPS 等;掌握网络管理和监控工具,如 Wireshark、Nagios 等;具备良好的故障排除和问题解决能力。 # 3. 数据库管理员: 熟悉数据库
390 0
|
JavaScript
Vue中 使用定时器 (setInterval、setTimeout)
Vue中 使用定时器 (setInterval、setTimeout)
290 0
|
开发工具 Android开发 iOS开发
中秋快乐,快来摇一摇,摇出你的本命月饼吧
中秋节到了,吃月饼必不可少,为了让大家能够更愉快的过中秋,我花了一晚的功夫开发了一个摇一摇的页面,通过页面摇一摇,可以摇出各种各样的月饼,快来试试你的本命月饼是什么吧。
|
数据采集 人工智能 DataWorks
数据的“敏捷制造”,DataWorks一站式数据开发治理范式演进
企业大数据技术发展至今,历经了两次蜕变。第一次蜕变从最初的“小作坊”解决大数据问题,到后来企业用各类大数据技术搭建起属于自己的“大平台”,通过平台化的能力完成数据生产力的升级。 第二次蜕变让大数据从“大平台”向“敏捷制造”的开发范式演进。在2021阿里云峰会上,阿里巴巴集团副总裁、阿里云智能计算平台事业部高级研究员贾扬清发布基于DataWorks的一站式大数据开发治理的平台,就是这个蜕变最好的佐证。
2990 0
数据的“敏捷制造”,DataWorks一站式数据开发治理范式演进