MySQL SELECT,可以使用 WHERE 子句来指定查询条件,从 FROM 子句的中间结果中选取适当的数据行,达到数据过滤的效果。

语法格式如下:

WHERE <查询条件> {<判定运算1>,<判定运算2>,…}

其中,判定运算其结果取值为 TRUE、FALSE 和 UNKNOWN。

判定运算的语法分类如下:

 <表达式1>{=|<|<=|>|>=|<=>|<>|!=}<表达式2><表达式1>[NOT]LIKE<表达式2><表达式1>[NOT][REGEXP|RLIKE]<表达式2><表达式1>[NOT]BETWEEN<表达式2>AND<表达式3><表达式1>IS[NOT]NULL

单一条件的查询语句

在表 tb_students_info 中查询身高为 170cm 的学生的姓名,输入的 SQL 语句和行结果如下所示。

mysql> use test_db
Database changed
mysql> SELECT name,height-> FROM tb_students_info-> WHERE height=170;
+-------+--------+
| name  | height |
+-------+--------+
| Susan |    170 |
+-------+--------+
1 row in set (0.17 sec)

该语句采用了简单的相等过滤,查询一个指定列 height 的具体值 170。

查询年龄小于 22 的学生的姓名,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT name,age-> FROM tb_students_info-> WHERE age<22;
+------+------+
| name | age  |
+------+------+
| John |   21 |
+------+------+
1 row in set (0.05 sec)

可以看到,查询结果中所有记录的 age 字段的值均小于 22 岁,而大于或等于 22 岁的记录没有被返回。

多条件的查询语句

使用 SELECT 查询时,可以增加查询的限制条件,这样可以使查询的结果更加精确。MySQL 在 WHERE 子句中使用 AND 操作符限定只有满足所有查询条件的记录才会被返回。

可以使用 AND 连接两个甚至多个查询条件,多个条件表达式之间用 AND 分开。

在 tb_students_info 表中查询 age 大于 21,并且 height 大于等于 175 的学生的信息,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_students_info-> WHERE age>21 AND height>=175;
+----+--------+---------+------+------+--------+------------+
| id | name   | dept_id | age  | sex  | height | login_date |
+----+--------+---------+------+------+--------+------------+
|  3 | Henry  |       2 |   23 | M    |    185 | 2015-05-31 |
|  5 | Jim    |       1 |   24 | M    |    175 | 2016-01-15 |
|  9 | Thomas |       3 |   22 | M    |    178 | 2016-06-07 |
+----+--------+---------+------+------+--------+------------+
3 rows in set (0.06 sec)

注意:上例的 WHERE 子句中只包含一个 AND 语句,把两个过滤条件组合在一起,实际上可以添加多个 AND 过滤条件,增加条件的同时增加一个 AND 关键字。

使用 LIKE 的模糊查询

字符串匹配的语法格式如下:

<表达式1> [NOT] LIKE <表达式2>

字符串匹配是一种模式匹配,使用运算符 LIKE 设置过滤条件,过滤条件使用通配符进行匹配运算,而不是判断是否相等进行比较。

相互间进行匹配运算的对象可以是 CHAR、VARCHAR、TEXT、DATETIME 等数据类型。运算返回的结果是 TRUE 或 FALSE。

利用通配符可以在不完全确定比较值的情形下创建一个比较特定数据的搜索模式,并置于关键字 LIKE 之后。可以在搜索模式的任意位置使用通配符,并且可以使用多个通配符。MySQL 支持的通配符有以下两种:

1 百分号(%)
百分号是 MySQL 中常用的一种通配符,在过滤条件中,百分号可以表示任何字符串,并且该字符串可以出现任意次。

使用百分号通配符要注意以下几点:

 MySQL 默认是不区分大小写的,若要区分大小写,则需要更换字符集的校对规则。百分号不匹配空值。百分号可以代表搜索模式中给定位置的 0 个、1 个或多个字符。尾空格可能会干扰通配符的匹配,一般可以在搜索模式的最后附加一个百分号。

2 下划线(_)
下划线通配符和百分号通配符的用途一样,下画线只匹配单个字符,而不是多个字符,也不是 0 个字符。

在 tb_students_info 表中,查找所有以“T”字母开头的学生姓名,输入的 SQL 的语句和执行结果如下所示。

mysql> SELECT name FROM tb_students_info-> WHERE name LIKE 'T%';
+--------+
| name   |
+--------+
| Thomas |
| Tom    |
+--------+
2 rows in set (0.12 sec)

注意:在搜索匹配时,通配符“%”可以放在不同位置。

在 tb_students_info 表中,查找所有包含“e”字母的学生姓名,输入的 SQL 的语句和执行结果如下所示。

mysql> SELECT name FROM tb_students_info-> WHERE name LIKE '%e%';
+-------+
| name  |
+-------+
| Green |
| Henry |
| Jane  |
+-------+
3 rows in set (0.00 sec)

由执行结果可以看出,该语句查询字符串中包含字母 e 的学生的姓名,只要名字中有字母 e,其前面或后面无论有多少个字符,都满足查询的条件。

在 tb_students_info 表中,查找所有以字母“y”结尾,且“y”前面只有 4 个字母的学生的姓名,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT name FROM tb_students_info-> WHERE name LIKE '____y';
+-------+
| name  |
+-------+
| Henry |
+-------+
1 row in set (0.00 sec)

日期字段作为条件的查询语句

以日期字段作为条件,可以使用比较运算符设置查询条件,也可以使用 BETWEEN AND 运算符查询某个范围内的值。

BETWEEN AND 用来查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值,若字段值满足指定的范围查询条件,则这些记录被返回。

在表 tb_students_info 中查询注册日期在 2016-01-01 之前的学生的信息,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_students_info-> WHERE login_date<'2016-01-01';
+----+-------+---------+------+------+--------+------------+
| id | name  | dept_id | age  | sex  | height | login_date |
+----+-------+---------+------+------+--------+------------+
|  1 | Dany  |       1 |   25 | F    |    160 | 2015-09-10 |
|  3 | Henry |       2 |   23 | M    |    185 | 2015-05-31 |
|  6 | John  |       2 |   21 | M    |    172 | 2015-11-11 |
|  8 | Susan |       4 |   23 | F    |    170 | 2015-10-01 |
+----+-------+---------+------+------+--------+------------+
4 rows in set (0.04 sec)

在表 tb_students_info 中查询注册日期在 2015-10-01 和 2016-05-01 之间的学生的信息,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_students_info-> WHERE login_date-> BETWEEN '2015-10-01'-> AND '2016-05-01';
+----+-------+---------+------+------+--------+------------+
| id | name  | dept_id | age  | sex  | height | login_date |
+----+-------+---------+------+------+--------+------------+
|  5 | Jim   |       1 |   24 | M    |    175 | 2016-01-15 |
|  6 | John  |       2 |   21 | M    |    172 | 2015-11-11 |
|  7 | Lily  |       6 |   22 | F    |    165 | 2016-02-26 |
|  8 | Susan |       4 |   23 | F    |    170 | 2015-10-01 |
+----+-------+---------+------+------+--------+------------+
4 rows in set (0.02 sec)

MySQL 条件查询相关推荐

  1. MySQL 条件查询 limit、in、between and、like等等

    MySQL 条件查询 环境: CREATE TABLE `test_user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',`userna ...

  2. MySQL学习-MySQL条件查询

    MySQL条件查询 操作的表 1.条件查询概述 2.条件查询between and] 3.条件查询is null和is not null 4.and和or的优先级的问题 5.条件查询in 6.模糊查询 ...

  3. Mysql 条件查询(like、between、and、in······)

    目录 Mysql 条件查询 示例 一.比较运算和逻辑运算符符 二.范围运算符 三.列表运算符 四.模糊匹配符 五.空值判断符 Mysql 条件查询 Mysql 条件查询即where子句后跟条件 运算符 ...

  4. mysql 条件查询分页_百万数据下mysql条件查询及分页查询的注意事项

    接上一节<百万数据mysql分页问题>,我们加上查询条件:select id from news where cate = 1 order by id desc limit 500000 ...

  5. MySQL 条件查询

    一.带关系运算符的查询 在select语句中最常见的格式如下: select 字段名1 , 字段名2,,,, from 表名 where 条件表达式 举例,查询表student中id=4的学生姓名,过 ...

  6. MySQL条件查询语句(一)

    条件查询 注意:条件查诟需要用到 where 询句,where 必须放到 from 询句表的后面: 执行顺序:先from再where过滤后再检索出来. 1..支持如下运算 2.等号(=)操作符 (1) ...

  7. php mysql 条件查询语句_where 查询条件-Medoo - 高效的轻量级PHP数据库框架, 提高开发效率!...

    WHERE 语句 SQL中使用where可能会有一些不安全的动态参数传入或者一些复杂的SQL语句,但是Medoo提供非常简介和安全的方法来实现这些. 基础使用 在基础使用中. 你可以使用一些符号对参数 ...

  8. MySQL条件查询简单汇总

    条件查询语法:     select          查询列表     from         表名     where         筛选条件;          分类:     一.按条件表 ...

  9. MySQL 条件查询(多条件,模糊查询,范围查询,空值查询),分组查询,分组过滤

    WHERE 条件查询 WHERE关键字用指定的条件从表中查询数据. 语法格式: WHERE 查询条件 条件查询: 有比较运算和逻辑运算的查询条件. 带有BETWEEN AND 关键字的查询条件. 配合 ...

  10. Mysql条件查询以及分组查询

    语法 条件查询语法:select 查询列表 from 表名 where 筛选条件;(这里的筛选条件如果满足才会显示出来,不满足允许的时候就不会显示) 分组查询语法:select 分组函数 , 列1(要 ...

最新文章

  1. 最全面的homogeneous单应性坐标的定义,以及不同投影,仿射,相似,刚体变换矩阵的关系和自由度分析
  2. docker安装elasticsearch7.6.1、elasticsearch-head
  3. 没有调查就没有发言权
  4. window.navigator.userAgent用来区分设备和浏览器
  5. sr锁存器 数电_C06. SR锁存器的认识
  6. 高精度大数c++类模板 很好用
  7. centos 7安装搭建confluence-wiki
  8. 共青城市大力推进国家智慧城市试点建设
  9. 制作u盘运行kali linux系统,U盘的进阶用法----打造U盘启动盘+USB KALI Linux+普通U盘。...
  10. jq将php时间戳转化日期格式,JQuery将时间戳转换为时间
  11. html怎么置顶图像,css怎么固定图片位置不变?
  12. WinForm 去掉DataGridView最后一行的空白行,删除空白行
  13. python微信支付_微信支付 python版
  14. JVM调优案例详解及面试题
  15. 数字逻辑课上如何制作FPGA游戏?
  16. 如何使用文件保险箱加密 Mac 上的启动磁盘?
  17. button按钮的tittle 折行且居中显示
  18. 最全iPhone启动图尺寸(包含 XS Max XR)
  19. android 麻将布局,android麻将小项目1:第一天的一些收获
  20. 区块链应用成功案例有哪些?

热门文章

  1. 飞车手游服务器维护,QQ飞车手游更新出现异常怎么办 更新异常原因及解决方法技巧...
  2. 初学者选黑卡还是微单_3500以内的微单相机好用吗?值得初学者入手吗?
  3. android中文转字节数组,如何将Android中的byte []转换为C中的uint8_T数组?
  4. java里面add报错_java.util.Arrays$ArrayList addAll报错
  5. PHP制作订货,PHP生成订单号的两种方法
  6. java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key c
  7. MySQL + MyBatis 批量插入时存在则忽略或更新记录
  8. springboot 的 RedisTemplate 的 execute 和 executePipelined 功能的区别redis
  9. Collections.synchronizedList使用
  10. 华为6x手机计算机软件没有了,只用一招,教你将华为手机变成电脑,这波操作没几个人知道...