mysql+where+且,MySQL WHERE

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

语法格式如下:

WHERE {,,…}

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

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

1、{=||>=|<=>|<>|!=}

2、[NOT]LIKE

3、[NOT][REGEXP|RLIKE]

4、[NOT]BETWEENAND

5、IS[NOT]NULL

单一条件的查询语句

【实例 1】在表 测试表 中查询身高为 170cm 的学生的姓名,输入的 SQL 语句和行结果如下所示。

mysql> use 测试库

Database changed

mysql> SELECT name,height FROM 测试表 WHERE height=170;

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

| name  | height |

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

| Susan |    170 |

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

1 row in set (0.17 sec)

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

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

mysql> SELECT name,age FROM 测试表 WHERE age<22;

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

| name | age  |

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

| John |   21 |

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

1 row in set (0.05 sec)

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

多条件的查询语句

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

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

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

mysql> SELECT * FROM 测试表 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 的模糊查询

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

[NOT] LIKE

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

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

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

一、百分号(%)

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

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

1、MySQL 默认是不区分大小写的,若要区分大小写,则需要更换字符集的校对规则。

2、百分号不匹配空值。

3、百分号可以代表搜索模式中给定位置的 0 个、1 个或多个字符。

4、尾空格可能会干扰通配符的匹配,一般可以在搜索模式的最后附加一个百分号。

二、下划线(_)

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

注意:不要过度使用通配符,对通配符检索的处理一般会比其他检索方式花费更长的时间。

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

mysql> SELECT name FROM 测试表 WHERE name LIKE 'T%';

+--------+

| name   |

+--------+

| Thomas |

| Tom    |

+--------+

2 rows in set (0.12 sec)

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

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

mysql> SELECT name FROM 测试表 WHERE name LIKE '%e%';

+-------+

| name  |

+-------+

| Green |

| Henry |

| Jane  |

+-------+

3 rows in set (0.00 sec)

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

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

mysql> SELECT name FROM 测试表 WHERE name LIKE '____y';

+-------+

| name  |

+-------+

| Henry |

+-------+

1 row in set (0.00 sec)

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

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

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

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

mysql> SELECT * FROM 测试表 WHERE login_date

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

| 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)

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

mysql> SELECT * FROM 测试表 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)

注意:查询日期数据的时候注意一下字段类型,最好是弄成时间日期型的字段。如果是文本型字段的话数据格式是国际通用型的话也能查询的到数据,如果不是国际通用型的日期格式的话查询的时候能查询到数据,但是会出错。具体的话大家可以自己去测试一下。

如有疑问可以联系本人:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值