《SQL必知必会》笔记(MySQL实现)---数据过滤

这篇文章主要是学习一下SELECT语句的WHERE子句的使用和一些需要注意的问题。

在�大部分情况下,我们只需要检索数据库中的一些特定的数据子集而不是所有的数据。�完成这种类似操作需要指定 搜索条件(search criteria) ,搜索条件也被叫做 过滤条件(filter condition) 。在SELECT语句中,可以使用 WHERE 子句来指定过滤的搜索条件,WHERE子句在FROM子句之后给出。

简单的过滤

首先看一个最基本的例子,从产品表中选取产品单价为3.49的行:

SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49

结果如下:

简单的过滤.png

这条语句从Products表中检索两个列,并且只返回了prod_price为3.49的行。

使用WHERE子句时也可以使�ORDER BY子句,只需要注意,因该让ORDER BY子句位于WHERE之后,否则会出现错误。

在继续下一步的学习之前,还有一个问题需要讨论,那就是 应该把数据过滤的操作放在应用层还是放在数据库层 。在一些实际开发中,尤其是一些操作流程不规范的项目中,后台喜欢把所有数据都返回给前端,要前端去对数据过滤然后渲染。一般情况下,这种做法是很不妥当的。首先,让应用层处理数据库的操作将会对应用的性能造成很大的影响,并且这种影响是很消极的。其次,数据库进行优化之后,可以更快速有效的对数据进行过滤,其效率远高于在应用层进行过滤。此外,在应用�层过滤数据,服务器将不得不通过网络发送多余的数据,这会导致网络带宽的浪费。所以总的来说, 在数据库层对数据进行过滤 是较为高效和合理的方式。

条件操作符

在使用WHERE子句进行数据过滤时,主要还是使用条件操作符来对数据进行判断,从而选取到需要的数据。
首先看一下标准的SQL中所有的条件操作符:

操作符 说明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
!< 不小于
> 大于
>= 大于等于
!> 不大于
�BETWEEN 在指定的两个值之间
IS NULL 为NULL值

之前已经看过了校验相等的例子,基本上其它条件操作符的使用都和等号操作符的使用差不多,需要注意的是下面几个操作符。

首先看一下不等于操作符。不等于操作符有两种写法, !=<> 这两个操作符通常情况下是可以相互替换的,但是在不同的DBMS下可能情况会不一样,使用时需要查阅对应的DBMS文档。来看一个例子:

SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';

结果如下:

不等于操作符.png

使用 != 操作符将会得到相同的结果。

通过这个例子还想说明的一个需要注意的�地方是,WHERE子句中的条件,有些值被单引号括起来了,�有些没有。这是因为,单引号是用来限定字符串的,如果将值与字符串类型的列进行比较,就需要限定单引号。如果是与数值类型比较的话,就不需要单引号。

当需要检查某列的值是否在某个范围内时,可以使用 BETWEEN 操作符�。其语法与其他的条件操作符有所不同,因为它需要两个值,即范围的开始值和结束值。下面这个例子说明如何使BETWEEN操作符:

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

结果如下:

BETWEEN操作符.png

上面这个例子是检索单价在5和10之间的所有产品,通过这个例子可以看到,使用BETWEEN操作符时�,要使用 AND 关键字将指定的开始值和结束值分隔。BETWEEN语句会匹配这个范围中所有的值,包括开始值和结束值。

还有一个需要注意的地方是,对于空值的检查。在创建表的时候,设计人员会指定某一列是否能够为空,当一列可以为空的时候,被称为包含空值NULL。

NULL被定义为无值(no value),它与包含字段为0,空字符串或仅仅包含空格不同。

要判断值是否为空,不能简单的使用 value = NULL 。SELECT语句有一个特殊的WHERE子句,可以用来检查具有NULL值的列。这个WHERE子句就是 IS NULL 子句。先看一个例子:

SELECT cust_name
FROM Customers
WHERE cust_email IS NULL;

结果如下:

IS NULL操作符.png

为了验证这个检索结果的正确性,可以使用SELECT cust_name, cust_email FROM Customers;来看一下未经过滤掉顾客信息。�

当表中没有�IS NULL的列时,会返回一个空的结果。

还有一点需要注意的是,当通过过滤选择不包含指定值的所有列时,可能会希望返回包含�NULL值的行,但是这做不到。因为NULL有特殊含义,数据库不知道它们是否匹配,所以在进行匹配过滤或者非匹配过滤时,不会返回这些结果。下面用一个例子来说明这个嗯题:

SELECT cust_name, cust_email
FROM Customers
WHERE cust_email <> 'sales@villagetoys.com';

结果如下:

NULL和非匹配.png

结合之前验证IS NULL语句检索结果正确性的语句的检索结果可以看出来,cust_email为NULL的行没有被检索出来。

最后需要提到的是,许多的DBMS扩展了标准的操作符集,提供了更高级的过滤选择,具体的信息可以查阅对应的DBMS的文档。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • 这篇文章主要是讨论通过组合WHERE子句来建立功能更强,更高级的搜索条件,其中包括NOT和IN操作符 此前我们讲过...
    CoolForrest阅读 355评论 0 1
  • 数据库入门 数据库: 保存有组织的数据的容器(通常是一个文件或一组文件).数据库软件应该称为 DBMS(DataB...
    Mjericho阅读 490评论 0 0
  • SQL与MySQL简介 数据库基础 从SQL的角度来看,数据库就是一个以某种有组织的方式存储的数据集合。我们可以采...
    heming阅读 3,043评论 1 8
  • 很多次的同学聚会,我都会惊讶于同学的成长速度飞快,反观自己也被自己吓一跳,速度太慢了。自己脑海深处潜意识是...
    开启2017阅读 306评论 2 3
  • 上上周日在雷克雅未克碰到了一个很有趣的活动,只要有能上网的智能手机,就可以每晚在音乐厅Harpa的立面上玩乓(Po...
    tftlg阅读 297评论 0 1