【MySQL】使用WHERE子句 - 过滤数据
第6章 过滤数据
简单记录 - MySQL必知必会 - [英]Ben Forta
学习如何使用SELECT语句的WHERE子句指定搜索条件
select ...from ... where ...
1、使用WHERE子句
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句要写在表名(FROM子句)之后,
例子,如下所示:
mysql> SELECT prod_name,prod_price FROM products WHERE prod_price=2.50;
+---------------+------------+
| prod_name     | prod_price |
+---------------+------------+
| Carrots       |       2.50 |
| TNT (1 stick) |       2.50 |
+---------------+------------+
2 rows in set (0.01 sec)
mysql>
分析:从products表中检索prod_name,prod_price两个列,但不返回所有行,只返回prod_price值为2.50的行。选特定的值。
注意 WHERE子句的位置 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。
mysql> SELECT prod_name,prod_price FROM products WHERE prod_price<100  ORDER BY prod_price DESC;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| JetPack 2000   |      55.00 |
| Safe           |      50.00 |
| JetPack 1000   |      35.00 |
| 2 ton anvil    |      14.99 |
| Detonator      |      13.00 |
| Bird seed      |      10.00 |
| TNT (5 sticks) |      10.00 |
| 1 ton anvil    |       9.99 |
| Oil can        |       8.99 |
| .5 ton anvil   |       5.99 |
| Sling          |       4.49 |
| Fuses          |       3.42 |
| Carrots        |       2.50 |
| TNT (1 stick)  |       2.50 |
+----------------+------------+
14 rows in set (0.00 sec)
mysql> SELECT prod_name,prod_price FROM products ORDER BY prod_price DESC WHERE prod_price<100;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE prod_price<100' at line 1
mysql>
2、WHERE子句操作符
操作符
操作符	  		  说明
=			    等于
<>				不等于
!=				等于
<				小于
<=				小于等于
>				大于
>=				大于等于
BETWEEN			在指定的两个值之间

2.1、检查单个值
测试相等
mysql> SELECT prod_name,prod_price FROM products WHERE prod_name='fuses';
+-----------+------------+
| prod_name | prod_price |
+-----------+------------+
| Fuses     |       3.42 |
+-----------+------------+
1 row in set (0.00 sec)
mysql>
检查WHERE prod_name=‘fuses’语句,它返回prod_name的值为Fuses的一行。MySQL在执行匹配时默认不区分大小写,所以fuses与Fuses匹配。
几个使用其他操作符的例子。
列出价格小于10美元的所有产品
mysql> SELECT prod_name,prod_price FROM products WHERE prod_price<10;
+---------------+------------+
| prod_name     | prod_price |
+---------------+------------+
| .5 ton anvil  |       5.99 |
| 1 ton anvil   |       9.99 |
| Carrots       |       2.50 |
| Fuses         |       3.42 |
| Oil can       |       8.99 |
| Sling         |       4.49 |
| TNT (1 stick) |       2.50 |
+---------------+------------+
7 rows in set (0.00 sec)
mysql>
检索价格小于等于10美元的所有产品(输出的结果比价格小于10美元输出的结果多两种产品)
mysql> SELECT prod_name,prod_price FROM products WHERE prod_price<=10;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| .5 ton anvil   |       5.99 |
| 1 ton anvil    |       9.99 |
| Bird seed      |      10.00 |
| Carrots        |       2.50 |
| Fuses          |       3.42 |
| Oil can        |       8.99 |
| Sling          |       4.49 |
| TNT (1 stick)  |       2.50 |
| TNT (5 sticks) |      10.00 |
+----------------+------------+
9 rows in set (0.00 sec)
检索价格小于等于10美元的所有产品,价格倒序排序
mysql> SELECT prod_name,prod_price FROM products WHERE prod_price<=10 ORDER BY prod_price DESC;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| Bird seed      |      10.00 |
| TNT (5 sticks) |      10.00 |
| 1 ton anvil    |       9.99 |
| Oil can        |       8.99 |
| .5 ton anvil   |       5.99 |
| Sling          |       4.49 |
| Fuses          |       3.42 |
| Carrots        |       2.50 |
| TNT (1 stick)  |       2.50 |
+----------------+------------+
9 rows in set (0.00 sec)
mysql>
2.2、不匹配检查
列出不是由供应商1003制造的所有产品:
- <> 不等于
 
mysql> SELECT vend_id,prod_name FROM products WHERE vend_id<>1003 ;
+---------+--------------+
| vend_id | prod_name    |
+---------+--------------+
|    1001 | .5 ton anvil |
|    1001 | 1 ton anvil  |
|    1001 | 2 ton anvil  |
|    1002 | Fuses        |
|    1005 | JetPack 1000 |
|    1005 | JetPack 2000 |
|    1002 | Oil can      |
+---------+--------------+
7 rows in set (0.00 sec)
mysql>
- 使用!=而不是<>操作符
 
mysql> SELECT vend_id,prod_name FROM products WHERE vend_id!=1003 ;
+---------+--------------+
| vend_id | prod_name    |
+---------+--------------+
|    1001 | .5 ton anvil |
|    1001 | 1 ton anvil  |
|    1001 | 2 ton anvil  |
|    1002 | Fuses        |
|    1005 | JetPack 1000 |
|    1005 | JetPack 2000 |
|    1002 | Oil can      |
+---------+--------------+
7 rows in set (0.00 sec)
mysql>
2.3、范围值检查
BETWEEN操作符 between
因为它需要两个值,即范围的开始值和结束值。
例子:说明如何使用BETWEEN操作符,它检索价格在5美元和10美元之间的所有产品。
mysql> SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10 ;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| .5 ton anvil   |       5.99 |
| 1 ton anvil    |       9.99 |
| Bird seed      |      10.00 |
| Oil can        |       8.99 |
| TNT (5 sticks) |      10.00 |
+----------------+------------+
5 rows in set (0.00 sec)
mysql>
分析:从这个例子中可以看到,在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。
价格在5美元和10美元之间的所有产品,价格由高到低排列。
mysql> SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10 ORDER BY prod_price DESC;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| Bird seed      |      10.00 |
| TNT (5 sticks) |      10.00 |
| 1 ton anvil    |       9.99 |
| Oil can        |       8.99 |
| .5 ton anvil   |       5.99 |
+----------------+------------+
5 rows in set (0.00 sec)
mysql>
2.4、空值检查
在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。
概念:NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。 null与0、  、   空格不同的
SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。其语法如下:
mysql> SELECT prod_name,prod_price FROM products WHERE prod_price IS NULL;
Empty set (0.00 sec)
mysql>
这条语句返回没有价格(空prod_price字段,不是价格为0)的所有产品,由于表中没有这样的行,所以没有返回数据。但是,customers表确实包含有具有空值的列,如果在文件中没有某位顾客的电子邮件地址,则cust_email列将包含NULL值:
mysql> select cust_id from customers where cust_email IS NULL;
+---------+
| cust_id |
+---------+
|   10002 |
|   10005 |
+---------+
2 rows in set (0.00 sec)
mysql> select cust_id from customers where cust_email is null;
+---------+
| cust_id |
+---------+
|   10002 |
|   10005 |
+---------+
2 rows in set (0.00 sec)
mysql> SELECT cust_id FROM customers WHERE cust_email IS NULL;
+---------+
| cust_id |
+---------+
|   10002 |
|   10005 |
+---------+
2 rows in set (0.00 sec)
mysql>
注意:NULL与不匹配
在通过过滤选择出不具有特定值的行时,可能希望返回具有NULL值的行。在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有NULL的行。
SELECT * FROM customers WHERE cust_email IS NULL;

3、小结
介绍了如何用SELECT语句的WHERE子句过滤返回的数据。学习了如何对相等、不相等、大于、小于、值的范围以及NULL值等进行测试,过滤数据。
注意 WHERE子句的位置 :
WHERE子句要写在表名(FROM子句)之后,在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。
WHERE子句操作符
操作符	  		  说明
=			    等于
<>				不等于
!=				等于
<				小于
<=				小于等于
>				大于
>=				大于等于
BETWEEN			在指定的两个值之间
null值例子:select cust_id from customers where cust_email is null;
【MySQL】使用WHERE子句 - 过滤数据的更多相关文章
- MySql——使用where子句过滤数据
		
示例使用的数据表在上一个博客中创建的https://www.cnblogs.com/lbhym/p/11895968.html 参考资料:<Mysql必知必会> 1.使用where子句 示 ...
 - Mysql| 组合where子句过滤数据(AND,OR,IN,NOT)
		
ysql 允许使用多个where子句,组合where子句允许使用两种方式使用:AND 和OR子句的方式使用.数据库中的操作符号:AND , OR , IN , NOT. AND:SELECT * FR ...
 - SQL基础-过滤数据
		
一.过滤数据 1.使用WHERE子句 过滤数据:关键字WHERE SELECT 字段列表 FROM 表名 WHERE 过滤条件; 过滤条件一般由要过滤的字段.操作符.限定值三部分组成: 如: SELE ...
 - mysql过滤数据
		
1.大纲 WHERE - 学习如何使用WHERE子句根据指定的条件过滤行记录. AND运算符 - 介绍如何使用AND运算符以组合布尔表达式以形成用于过滤数据的复杂条件. OR运算符 - 介绍OR运算符 ...
 - 《MySQL必知必会》过滤数据,数据过滤(where ,in ,null ,not)
		
<MySQL必知必会>过滤数据,数据过滤 1.过滤数据 1.1 使用 where 子句 在SEL ECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤. WHERE子句在表名(FR ...
 - mysql必知必会(四、检索数据,五、排序检索数据,六、过滤数据,七、数据过滤)
		
四.select语句 1.检索单个列 select prod_name from products; 2.检索多个列 select prod_name, prod_price from product ...
 - MySQL学习笔记(二)——检索数据与过滤数据
		
检索数据和过滤数据也就是平时用到最多的增删改查里面的查了. 一.数据检索 检索单个列: select column from table; 检索多个列: select colunm1,colu ...
 - 使用where 过滤数据
		
--本章主要内容是MySQL中使用where搜索条件进行过滤数据. where条件在from子句后面给出,如下所示: select name,price from shops where price& ...
 - ADO.NET 快速入门(十):过滤数据
		
我们有很多方法来过滤数据.一种是在数据库命令级别,利用 where 子句查询过滤数据.另一种是在数据填充到 DataSet 以后过滤数据.本篇讨论后者. 一旦数据填充到 DataSet,你可以使用 ...
 
随机推荐
- 小白都看得懂的Javadoc上手教程
			
Javadoc是什么 官方回答: Javadoc is a tool for generating API documentation in HTML format from doc comments ...
 - Typora+图床详解(小白都能学得会)
			
Typora+图床详解(小白都能学得会) 1 了解工作 博客中用的笔记软件--Typora(Markdown语法) 博客中用的图床--阿里云对象存储(Object Storage Service,简称 ...
 - SSO的通用标准OpenID Connect
			
目录 简介 OpenID Connect是什么 ID Token 请求ID Token ID Token可以做什么 Open Connect认证码授权的例子 User Info 简介 OpenID C ...
 - 微信小程序自动化,记录趟过的坑!
			
项目思想:关键字+数据驱动混合测试 基于Android-微信小程序自动化的关键是:webview的切换 对于微信App来说如何从NATIVE切换到webview的过程 测试版本信息 1.微信版本:7. ...
 - css 13-CSS3属性:Flex布局图文详解
			
13-CSS3属性:Flex布局图文详解 #前言 CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强.其强大的伸缩性和自适应性,在网页 ...
 - 推荐系统实践 0x11 NeuralCF
			
前言 这一篇文章我们来谈一下2017年新加坡国立大学提出的基于深度学习的系统过滤模型NeuralCF.我们在之前讲过矩阵分解技术,将协同过滤中的共现矩阵分解成用户向量矩阵以及物品向量矩阵.那么Embe ...
 - Tomcat9没有service.bat
			
下载个Windows版本的才有service.bat,默认是不带的. 附上tomcat9的下载地址: https://archive.apache.org/dist/tomcat/tomcat-9/v ...
 - SQL注入基本知识点总结
			
SQL注入基本知识 information_schema MySQL 中存储所有数据库名.所有表名.所有字段名的系统数据库叫 information_schema ,这是在 MySQL 数据库初 ...
 - Redis集群的分布式部署
			
3.2.2:Redis Cluster: Redis 分布式部署方案: 1) 客户端分区:由客户端程序决定 key 写分配和写入的 redis node,但是需要客户端自己处理写入 分配.高可用管 ...
 - Git的使用以及命令
			
个人常用命令 git初始化操作 git init 把当前的目录变成git仓库,生成隐藏.git文件. git remote add origin url 把本地仓库的内容推送到GitHub仓库. gi ...