MySQL的查询where语句(十六)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 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
相关文章
|
8天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
37 9
|
10天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
33 3
|
15天前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
14天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
71 1
|
20天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
16天前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
36 1
|
14天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
45 0
|
16天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
29 0
|
1月前
|
存储 SQL 关系型数据库
MySQL 给查询结果增列并自定义列数据
MySQL 给查询结果增列并自定义列数据
390 2
|
1月前
|
存储 SQL 关系型数据库
MySQL查询数据库锁表的SQL语句
MySQL查询数据库锁表的SQL语句
82 1