表数据查询WHERE

过滤数据

如何筛选数据? 如何使用SELECT语句的WHERE子句指定搜索条件

常见的基本查询语句:

SELECT语句是最常用的查询语句,它的使用方式有些复杂,但功能是相当强大的。SELECT语句的基本语法如下: select selection_list //要查询的内容,选择哪些列

from 数据表名 //指定数据表

where //查询时需要满足的条件,行必须满足的条件

group by grouping_columns //如何对结果进行分组

order by sorting_cloumns //如何对结果进行排序

having secondary_constraint //查询时满足的第二条件

limit count //限定输出的查询结果

使用WHERE子句: 数据库表一般包含大量的数据,很少需要检索表中所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出,如下所示:

SELECT 字段名 FROM 表名 WHERE 条件;

为什么要进行数据的筛选,数据筛选的必要性? SQL过滤与应用过滤 数据也可以在应用层过滤。为了这个目 的,SQL的SELECT语句检索出超过实际所需的数据,然后客户 机代码对返回数据进行循环,以提取出需要的行。 通常,这种实现并不令人满意。因此,对数据库进行了优化, 以便快速有效地对数据进行过滤。因为我们在客户机应用(或开发语言)处理数据库的工作将会极大地影响应用的性能,并且使所创建 的应用完全不具备可伸缩性。此外,如果在客户机上过滤数据, 服务器不得不通过网络发送多余的数据,这将导致网络带宽的 浪费。

DeepinScrot-5748

这个例子采用了简单的相等测试j仅仅是对单个值进行过滤:它检查一个列是否具有指定的值,据此进行过滤。但是SQL允许做的事情不仅仅是相等测试。

= 等于

select name from customers where name='李逵';

<> 不等于

select name from customers where name<>'李逵';

!= 不等于

select name from customers where name!='李逵';

< 小于 (一般情况下后面会跟数字)

select name from customers where name<'李逵';

select * from customers where userid<10014;

<= 小于等于

select * from customers where userid<=10014;

> 大于

select * from customers where userid>10014;

>= 大于等于

select * from customers where userid>=10014;

BETWEEN .. AND ..在指定的两个值之间

select name from customers where userid between 10010 and 10014; 注意:在使用BETWEEN时,必须指定两个值,所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值.

空值检查(IS NULL)

在创建表时,表设计人员可以指定其中的列是否可以不包含值。在 一个列不包含值时,称其为包含空值NULL。 NULL 无值(no value),它与字段包含0、空字符串或仅仅包含 空格不同。

SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。其语法如下:

SELECT 列 FROM students WHERE 列 IS NULL;

DeepinScrot-3908

组合WHERE子句

AND操作符

为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加条件。下面的代码给出了一个例子: SELECT 列,列 FROM students WHERE 条件1 and 条件2;

SELECT name,adress FROM customers WHERE userid<=10015 AND adress='北京市'

DeepinScrot-4603

OR操作符

OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。

SELECT 列,列 FROM students WHERE 条件1 OR 条件2;

DeepinScrot-5201

注意:计算次序 WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂 和高级的过滤。 例如:SELECT name,age,weight FROM students WHERE height = 170 or height = 180 and age < 19 ; 当SQL看到上述WHERE子句时,它理解为由身高180的任何 年龄小于19的同学,或者身高等于170的任何同学,实际的情况是这样的。换句话说,由于AND在计算次序中优先级更高,操作符被错误地组合了。

那如何才能够按照真实的sql语义来筛选呢? 此问题的解决方法是使用圆括号明确地分组相应的操作符。请看下 面的SELECT语句及输出: SELECT name,age,weight FROM students WHERE (height = 170 or height = 180) and age < 19 ;

这条SELECT语句与前一条的唯一差别是,这条语句中,前两个 条件用圆括号括了起来。因为圆括号具有较AND或OR操作符高 的计算次序,DBMS首先过滤圆括号内的OR条件,然后在结合后面条件进行筛选.

总结: 在WHERE子句中使用圆括号 任何时候使用具有AND和OR操作 符的WHERE子句,都应该使用圆括号明确地分组操作符。不要 过分依赖默认计算次序,即使它确实是你想要的东西也是如 此。使用圆括号没有什么坏处,它能消除歧义。

IN操作符

圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。下面的例子说明了这个操作符 格式如下: SELECT 列 FROM 表名 WHERE 列 IN(列值,列值);

SELECT name FROM customers WHERE userid IN(10011,10013);

DeepinScrot-2122

NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。

SELECT name FROM customers WHERE userid NOT IN(10011,10013);

DeepinScrot-2322

解释一下这条sql语句的含义

SELECT * FROM customers WHERE NOT age=20;

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

推荐阅读更多精彩内容

  • 最近过年到了叫喝酒,聚会的,越来越多。本想利用这些时间好好的学习一下,时间都被打乱了。喝一次酒要付出两天的时间成本...
    k承龙阅读 701评论 0 48
  • 因为我想活着,我不能掩藏我心中的本欲,正如我心中爱你美丽,又怎能嘴上装四大皆空。 --今何在 《悟空传》 好久没静...
    不正式青年阅读 271评论 0 7
  • 一本原来很久之前读过,现在第二次相遇的书。 生活被千万次定义正确与否,无人知晓一头雾水,一知半解时间给出亿万解法我...
    ZoeyeoZ阅读 295评论 2 1