《MySQL必知必会》过滤数据,数据过滤

1、过滤数据

1.1 使用 where 子句

在SEL ECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。

WHERE子句在表名(FROM子句) 之后给出,如下所示:

select *
from orders
where Date(order_date) = '2005-09-01';

需要注意的是,不仅SQL有数据过滤,在实际开发中,应用层也会有数据过滤。但是通常这样是不能令人满意的。

因此要对数据库进行优化,以便快速有效地对数据进行过滤,让应用层去解决数据过滤,这将会影响到应用的性能。并且使所创建的应用完全不具备可伸缩性。此外,如果在客户机上过滤数据,服务器不得不通过网络发送多余的数据,这将导致网络带宽的浪费。

总之,提高数据库的性能,也是开发中非常重要的一部分。

WHERE子句的位置在同时使用ORDER BY和WHERE子句时

应该让ORDER BY位于WHERE之后,否则将会产生错误。

1.2 where子句操作符

操作符 说明
= 等于
<> 不等于(推荐使用)
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
between 在指定两值区间内
select order_date
from orders
where Date(order_date) <> '2005-09-01';

SELECT prod_name,prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;

其他语句,可以自行尝试编写执行。

这里需要特别注意的是,空值查询

select cust_name , cust_email
from customers
where cust_email is null;

这里返回的数据,只包括查询字段为空值的数据。

那么,is not null 查出来的数据将会是怎么样的呢?

select cust_name , cust_email
from customers
where cust_email is not null;

所有的非空值都会匹配。

同时,注意null 值是不会作为不匹配数据被查询出来。

现有数据如上。

select cust_name , cust_zip
from customers
where cust_zip <> '88888';

null 值的数据将被不匹配查询过滤,因为数据库也不知道它是否匹配,对于数据库来说,它是未知的,是有特殊含义的。

2、 数据过滤

2.1 组合where子句

可以用 and 和 or 关键字,组合 where 子句。

select  order_date
from orders
where year(order_date) = 2005 and month(order_date) = 9;

select  order_date
from orders
where year(order_date) = 2005 or month(order_date) = 9;

这里有一个and 和 or 执行优先级的问题。

select  order_num,order_date
from orders
where year(order_date) = 2005 and month(order_date) = 9 or cust_id = 10001;

由上面的查询结果,可知,DBMS 先处理 and 操作符,再处理 or 。and 的优先级 > or 。

还可以使用圆括号来制定优先处理。

select  order_num,order_date
from orders
where year(order_date) = 2005 and ( month(order_date) = 9 or cust_id = 10001 );

不要过分依赖计算次序。复杂的 and 部分用圆括号也是可以的,虽然并未改变计算顺序,但是能消除歧义,便于阅读,这间接方便了后期维护,这是值得推崇的。

2.2 IN 操作符

IN 操作符用来指定条件范围,在指定范围内对每个条件进行匹配。(注意与between 的用法区分开来, between 表示匹配区间范围内的值)

SELECT prod_name,prod_price
FROM products
WHERE prod_price in (10 , 13, 50);

IN 是具有和 or 相同的功能,但是 IN 有着他自身的优点。

  • 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观
  • 在使用IN时, 计算的次序更容易管理(因为使用的操作符更少)。
  • IN操作符- -般比0R操作符清单执行更快
  • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。第14章将对此进行详细介绍。

2.3 NOT 操作符

select cust_name , cust_email
from customers
where cust_email is not null;

所有的非空值都会匹配。

MySQL中的NOT MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。

《MySQL必知必会》过滤数据,数据过滤(where ,in ,null ,not)的更多相关文章

  1. MySql必知必会实战练习(三)数据过滤

    在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...

  2. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

  3. 《MySQL必知必会》检索数据,排序检索数据(select ,* ,distinct ,limit , . , order by ,desc)

    <MySQL必知必会>检索数据,排序检索数据 1.检索数据 1.1 select 语句 为了使用SELECT检索表数据,必须至少给出两条信息一想选择什 么,以及从什么地方选择. 1.2 检 ...

  4. 【SQL必知必会笔记(2)】检索数据、排序检索数据

    上个笔记中介绍了一些关于数据库.SQL的基础知识,并且创建我们后续练习所需的数据库.表以及表之间的关系,从本文开始进入我们的正题:SQL语句的练习. 文章目录 1.检索数据(SELECT语句) 1.1 ...

  5. 【SQL必知必会笔记(1)】数据库基础、SQL、MySQL8.0.16下数据库、表的创建及数据插入

    文章目录 1.数据库基础 1.1 数据库(database) 1.2 表(table) 1.3 列和数据类型 1.4 行 1.5 主键 2.什么是SQL 3.创建后续练习所需数据库.表(MySQL8. ...

  6. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  7. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  8. mysql必知必会系列(一)

    mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...

  9. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

随机推荐

  1. Python延迟初始化(lazy property)

    转自:https://blog.csdn.net/azsx02/article/details/77649527 Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建 ...

  2. python Scrapy 从零开始学习笔记(二)

    在之前的文章中我们简单了解了一下Scrapy 框架和安装及目录的介绍,本章我们将根据 scrapy 框架实现博客园首页博客的爬取及数据处理. 我们先在自定义的目录中通过命令行来构建一个 scrapy ...

  3. Java线程池ThreadPoolExecutor面试总结思维导图速记

    优点 降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 提高响应速度,当任务到达时,可以不需要等待线程创建就能立即执行. 提高线程的可管理性 类关系 接 Executor 一个无返 ...

  4. Python字符串内建函数_上

    Python字符串内建函数: 注:汉字属于字符(既是大写又是小写).数字可以是: Unicode 数字,全角数字(双字节),罗马数字,汉字数字. 1.capitalize( ): 将字符串第一个字母大 ...

  5. HTML5 Canvas小游戏基础:用户交互

    交互是游戏的根本.缺少了用户交互,游戏就不能称之为游戏,只能说是动画或电影.事件是浏览器响应用户交互操作的一种机制. 1.事件和事件执行 事件定义了用户与页面交互时产生的各种操作(主要通过鼠标或热键的 ...

  6. Python os.statvfs() 方法

    概述 os.statvfs() 方法用于返回包含文件描述符fd的文件的文件系统的信息.高佣联盟 www.cgewang.com 语法 statvfs()方法语法格式如下: os.statvfs([pa ...

  7. PHP tempnam() 函数

    定义和用法 tempnam() 函数在指定的目录中创建一个具有唯一文件名的临时文件. 该函数返回新的临时文件名,如果失败则返回 FALSE. 语法 tempnam(dir,prefix) 参数 描述 ...

  8. PHP ucfirst() 函数

    实例 把 "hello" 的首字符转换为大写: <?phpecho ucfirst("hello world!");?> 运行实例 » 定义和用法 ...

  9. 二维线段树->树套树

    现在上真正的二维线段树 毕竟 刚刚那个是卡常 过题我们现在做一个更高级的做法二维线段树. 大体上维护一颗x轴线段树 然后在每个节点的下方再吊一颗维护y轴的线段树那么此时我们整个平面就被我们玩好了. 这 ...

  10. 海华大赛第一名团队聊比赛经验和心得:AI在垃圾分类中的应用

    摘要:为了探究垃圾的智能分类等问题,由中关村海华信息研究院.清华大学交叉信息研究院以及Biendata举办的2020海华AI垃圾分类大赛吸引了大量工程师以及高校学生的参与 01赛题介绍 随着我国经济的 ...