MySQL的查询where语句(十六)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL的查询where语句(十六)

一. where 语句


  • 查询出了数据,但查询的是全部的数据, 当表里面数据量非常大的时候,仅仅需要查询出符合条件的数据就行, 需要对数据进行相应的筛选, 如只查询 年龄>18岁的人, 如只查询性别为男的人,当然也可以查询出 年龄大于18岁且性别为男的。


  • 筛选数据,需要用到 MySQL的运算符, 关于MySQL的运算符, 可以观看老蝴蝶以前写的文章: MySQL的运算符(九)


  • 下面,重点讲解一下,where 语句的用法。


  • 所用命令:


select *|字段列表
  from 表名
  where 筛选条件1 [ [or|and] 筛选条件2 ...]


  • 不同的条件之间,用 and(并且),or(或者) 进行关联。


  • 还是用上一章节的 user 表进行处理。


  • 数据如下:

20191206163931277.png



二. where 的单条件查询语句


  • 常见的运算符,依旧是 第九章节的那些运算符。


  • 凡是数字,都可以直接写出来, 但字符串,都必须要用 ‘’ 进行括起来。 即使是数字形式的字符串,也最好是用 ‘’ 括起来。


二.一  = 等号运算符


1 . 数字类型的等号, 查询 age 为24的用户数据。


select * from user u where u.age=24;


20191206163941561.png


2 . 字符串类型的等号。 查询name 为 ‘岳泽霖’ 的用户数据。


select * from user u where u.name='岳泽霖';


20191206163948672.png


3 . 日期类型的等号 如查询 birthday 为 ‘1995-10-01’ 的人。


select * from user u where u.birthday='1995-10-01';


20191206163956544.png


注意,日期的格式。 如果日期的格式不匹配的话,可以用 date_format(d,f) 进行转换。


select * from user u where date_format(u.birthday,'%Y-%m-%d')='1995-10-01';


20191206164002230.png


4 . mysql函数 重新构造列之后,用= 号。


如上面的日期格式转换,先用 date_format() 日期函数,对birthday 字段进行重新构造,再用 = 号。


也可以用 字符串函数


如 查询 姓名长度为 3的人。


select * from user u where char_length(u.name)=3;


2019120616401167.png


其中, 其它 运算符, 如 !=, >,<,>=,<= 等基本与其一致


如查询 name 不为 ‘岳泽霖’ 的数据。


select * from user u where u.name !='岳泽霖';


20191206164014758.png


name 为空的,不会查询出来。


其他的,就不举例了。


二.二 is null 和is not null 运算符


判断一个,is null是否为空,或者 is not null 不为空。


如:


1 .查询一下, name 为 空的数据


select * from user u where u.name is null;


20191206164024222.png


将那两条 name 为空的数据查询出来了. 不能用=号来判断一下,是否为空。


2 . 查询一下, name 不为空的数据


select * from user u where u.name is not null;


20191206164029603.png


3 . 可以用于任意的类型, 包括日期的类型。


select * from user u where u.birthday is not null;


20191206164036210.png


二.三 in 和 not in 运算符


1 .数字类型in . 查询 age 为23,25,26 的员工。


select * from user u where u.age in (23,25,26);


20191206164042620.png


2 . 字符串类型 in . 查询 name 为 ‘岳泽霖’,‘两个蝴蝶飞’,‘老蝴蝶’ 的.


select * from user u where u.name in ('岳泽霖','两个蝴蝶飞','老蝴蝶');


20191206164049399.png


3 . not in 形式。 与in 正好相反。 如 查询age 不在 23,25,26 的员工。


select * from user u where u.age not in (23,25,26);


20191206164054873.png


二.四 between … and … 和 not between … and … 运算符


常常用于两个数字之间,不建议用在两个字符串之间。


1 . 判断年龄在 18 到 24岁之间


select * from user u where u.age between 18 and 24;


20191206164102992.png


包括 两边的, 是个闭区间。


2 . 判断年龄不在 18岁到24岁之间的


select * from user u where u.age not between 18 and 24;


20191206164108593.png


二.五 like 和not like 运算符


有 % ,_ 两种形式。 % 匹配任意长度的任意字符,包括0长度的字符。 _ 下划线只匹配一个。


1 . like 匹配 % 号。 如 姓名中包含 ‘蝴蝶’ 的。


select * from user u where u.name like '%蝴蝶%';


2019120616411394.png


2 . like 匹配 _ 号。 如 姓名为 ‘精什么妹’ 的,并且为三个字。


select * from user u where u.name like '精_妹';


20191206164118124.png


3 .not like 形式的。 如 姓名中不包含 ‘岳’ 的。


select * from user u where u.name not like '%岳%';


20191206164124171.png


二.六 regexp 和not regexp 运算符


  • ^ 以什么开头, $ 以什么结尾, 主要用于正则验证。 但通常都是用 like 比较多。


  • 1 . 姓名 以 ‘岳’ 开头的。


select * from user u where u.name regexp '^岳';


20191206164129934.png


  • 2 .姓名以 ‘蝴蝶’ 结尾的。


select * from user u where u.name regexp '蝴蝶$';


20191206164135128.png


  • 3 . 姓名中 包含 ‘蝴蝶’ 的


select * from user u where u.name regexp '蝴蝶';


20191206164139908.png


  • 4 . 姓名中不包含 ‘蝴蝶的’。 用 not regexp


select * from user u where u.name not regexp '蝴蝶';


20191206164144107.png


二.七 用 1=1 来进行全部查询


  • 条件用 1=1, 可以表示全部查询,不要筛选条件, 在程序中一般这么使用。


select * from user u where 1=1;


20191206164157448.png


将数据全部查询出来了。


常用的筛选结果运算符,基本就这么多。


三. where 的多条件查询语句


  • 多条件语句,其实就是 将多个 单条件,进行拼接起来, 用 and 或者 or 进行 关联。 and 表示且, 要同时满足, or 表示或, 只要有一个满足即可。


三.一 and 且 进行连接


  • 如查询 性别是男,并且年龄为24 的人。


select * from user u where u.sex='男' and u.age=24;


20191206164153376.png


这两个条件,要同时满足。


三.二 or 或 进行连接


如查询 性别为 男,或者 name 为null 的人。


select * from user u where u.sex='男' or name is null;


20191206164205790.png


只要满足 sex为男, 或者是 名称为 null 就可以了。


三.三 and 和or 混合使用


如查询 年龄>=18,并且 名称为null 或者 id<3的人。


select * from user u where age>=18  and (name is null or id<3);


20191206164217124.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
14天前
|
SQL 缓存 关系型数据库
MySQL高级篇——关联查询和子查询优化
左外连接:优先右表创建索引,连接字段类型要一致、内连接:驱动表由数据量和索引决定、 join语句原理、子查询优化:拆开查询或优化成连接查询
MySQL高级篇——关联查询和子查询优化
|
16天前
|
SQL 关系型数据库 MySQL
MySQL查询(万字超详细版)
本文详细介绍了数据库中的单表和多表查询方法。首先,单表查询包括全列查询、指定列查询及去重查询,其中应避免使用`*`以提高效率。接着,文章讲解了排序查询,包括升序和降序,并展示了如何通过多个字段进行排序。在多表查询部分,本文解释了内连接、外连接(左外连接和右外连接)以及自连接的概念和用法,提供了丰富的代码示例
23 1
MySQL查询(万字超详细版)
|
3天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
18 4
|
6天前
|
NoSQL 关系型数据库 MySQL
当Redis与MySQL数据一致性校验中Redis数据量小于MySQL时的全量查询处理方法
保持Redis和MySQL之间的数据一致性是一个需要细致规划和持续维护的过程。通过全量数据同步、建立增量更新机制,以及定期执行数据一致性校验,可以有效地管理和维护两者之间的数据一致性。此外,利用现代化的数据同步工具可以进一步提高效率和可靠性。
26 6
|
3天前
|
关系型数据库 MySQL
mysql查询速度慢怎么解决?
mysql查询速度慢怎么解决?
18 2
|
3天前
|
关系型数据库 MySQL
mysql & clinkhouse之查询 行拼接
mysql & clinkhouse之查询 行拼接
mysql & clinkhouse之查询 行拼接
|
10天前
|
存储 缓存 关系型数据库
MySQL 查询优化方法
在数据库应用中,高效的查询性能至关重要。本文探讨了常用的 MySQL 查询优化方法,包括索引优化(选择合适的索引字段、复合索引、定期维护索引)、查询语句优化(避免全表扫描、限制返回行数、避免使用不必要的函数)、表结构优化(选择合适的数据类型、分区表、定期清理无用数据)及数据库配置优化(调整缓存大小、优化存储引擎参数)。通过这些方法,可以显著提高 MySQL 的查询性能,为应用程序提供更好的用户体验。
|
28天前
|
自然语言处理 关系型数据库 MySQL
MySQL MATCH 匹配中文 无法查询的问题如何处理?
【8月更文挑战第29天】MySQL MATCH 匹配中文 无法查询的问题如何处理?
104 6
|
3天前
|
关系型数据库 MySQL Java
mysql & clinkhouse之查询添加比率列
mysql & clinkhouse之查询添加比率列
|
28天前
|
SQL 关系型数据库 MySQL