第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制造的所有产品:

  1. <> 不等于
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>
  1. 使用!=而不是<>操作符
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子句 - 过滤数据的更多相关文章

  1. MySql——使用where子句过滤数据

    示例使用的数据表在上一个博客中创建的https://www.cnblogs.com/lbhym/p/11895968.html 参考资料:<Mysql必知必会> 1.使用where子句 示 ...

  2. Mysql| 组合where子句过滤数据(AND,OR,IN,NOT)

    ysql 允许使用多个where子句,组合where子句允许使用两种方式使用:AND 和OR子句的方式使用.数据库中的操作符号:AND , OR , IN , NOT. AND:SELECT * FR ...

  3. SQL基础-过滤数据

    一.过滤数据 1.使用WHERE子句 过滤数据:关键字WHERE SELECT 字段列表 FROM 表名 WHERE 过滤条件; 过滤条件一般由要过滤的字段.操作符.限定值三部分组成: 如: SELE ...

  4. mysql过滤数据

    1.大纲 WHERE - 学习如何使用WHERE子句根据指定的条件过滤行记录. AND运算符 - 介绍如何使用AND运算符以组合布尔表达式以形成用于过滤数据的复杂条件. OR运算符 - 介绍OR运算符 ...

  5. 《MySQL必知必会》过滤数据,数据过滤(where ,in ,null ,not)

    <MySQL必知必会>过滤数据,数据过滤 1.过滤数据 1.1 使用 where 子句 在SEL ECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤. WHERE子句在表名(FR ...

  6. mysql必知必会(四、检索数据,五、排序检索数据,六、过滤数据,七、数据过滤)

    四.select语句 1.检索单个列 select prod_name from products; 2.检索多个列 select prod_name, prod_price from product ...

  7. MySQL学习笔记(二)——检索数据与过滤数据

    检索数据和过滤数据也就是平时用到最多的增删改查里面的查了. 一.数据检索 检索单个列: select column from table; 检索多个列:     select colunm1,colu ...

  8. 使用where 过滤数据

    --本章主要内容是MySQL中使用where搜索条件进行过滤数据. where条件在from子句后面给出,如下所示: select name,price from shops where price& ...

  9. ADO.NET 快速入门(十):过滤数据

    我们有很多方法来过滤数据.一种是在数据库命令级别,利用 where 子句查询过滤数据.另一种是在数据填充到 DataSet 以后过滤数据.本篇讨论后者.   一旦数据填充到 DataSet,你可以使用 ...

随机推荐

  1. 【MindSpore】Ubuntu16.04上成功安装GPU版MindSpore1.0.1

    本文是在宿主机Ubuntu16.04上拉取cuda10.1-cudnn7-ubuntu18.04的镜像,在容器中通过Miniconda3创建python3.7.5的环境并成功安装mindspore_g ...

  2. css 03-CSS样式表和选择器

    03-CSS样式表和选择器 #本文主要内容 CSS概述 CSS和HTML结合的三种方式:行内样式表.内嵌样式表.外部样式表 CSS四种基本选择器:标签选择器.类选择器.ID选择器.通用选择器 CSS几 ...

  3. react第八单元(什么是纯函数-组件的性能优化-pureComponent-组件性能优化的原理)

    课程目标 理解纯函数 熟练掌握组件性能优化的几种技巧 pureComponent和Component的区别 #知识点 一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数 ...

  4. Impala的特点

    Impala的特点 0. 原理 基于内存的分析框架. 1.为什么会有Impala? hive进行计算太慢了,于是就有了Impala,Impala可以理解为是hive的内存版本. 2.Impala的优点 ...

  5. 多任务-python实现-迭代器相关(2.1.12)

    @ 目录 1.需求 2.斐波那契数列演示 3.并不是只有for循环能接收可迭代数据类型,list,tuple也可以 1.需求 类比 早上起来吃包子 1.买1年的包子,放在冰箱,每天拿一个 2.每天下楼 ...

  6. .Net 常用ORM框架对比:EF Core、FreeSql、SqlSuger

    前言: 最近由于工作需要,需要选用一种ORM框架,也因此对EF Core.FreeSql.SqlSuger作简单对比.个人认为各有有优势,存在即合理,不然早就被淘汰了是吧,所以如何选择因人而议.因项目 ...

  7. angular8 大地老师学习笔记

    第一课: angular 创建项目命令: ng new 项目名称 创建组件: ng g 可查看所有创建的对象  ,ng g component  components/home  创建组件,后面跟的是 ...

  8. JavaScript实现自定义右键菜单

    JavaScript实现自定义右键菜单,思路如下: 1. 屏蔽默认右键事件: 2. 隐藏自定义的菜单模块(如div.ul等): 3. 右键点击特定或非特定区域,显示菜单模块: 4. 再次点击,隐藏菜单 ...

  9. javascript之原型、原型链

    一.原型: 1. 任何函数都有prototype属性(对象才有属性,函数也是对象): 2. 函数的prototype属性的值是个对象,这个对象就是原型(对象): 3. 作用:通过构造函数创建出来的对象 ...

  10. pygal之掷骰子 - 2颗面数为6的骰子

    python之使用pygal模拟掷两颗面数为6的骰子的直方图,包含三个文件,主文件,die.py,dice_visual.py,20200527.svg.其中最后一个文件为程序运行得到的结果. 1,d ...