SQL过滤数据——WHERE

如何使用 SELECT 语句的 WHERE 子句指定搜索条件。
总表
在这里插入图片描述

1、使用 WHERE 子句

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

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

SELECT name,price
FROM books
WHERE price=35.9;

表示从 books 表中查询 name、price,条件是 price=35.9。根据满足条件的过滤数据。
在这里插入图片描述
注意:WHERE 子句的位置 在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于 WHERE 之后,否则将会产生错误。

2、WHERE 子句操作符

我们在做相等检验时看到了第一个 WHERE 子句,它确定一个列是否包含 指定的值。SQL支持列出的所有条件操作符。
在这里插入图片描述注意:操作符兼容
列出的某些操作符是冗余的(如< >与!=相同,!<相当于>=)。 并非所有 DBMS都支持这些操作符。想确定你的 DBMS支持哪些操作 符,请参阅相应的文档。

提示:何时使用引号
如果仔细观察上述 WHERE 子句中的条件,会看到有的值括在单引号内, 而有的值未括起来。单引号用来限定字符串。如果将值与字符串类型的 列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。

2.1、单个值过滤
比如过滤条件是价格不超过 35。

SELECT name,price
FROM books
WHERE price<=35;

在这里插入图片描述
2.2、不匹配检查
比如过滤条件是种类不是科学技术。

SELECT name,type
FROM books
WHERE type!='科学技术';

在这里插入图片描述
2.3、范围值检查
比如过滤条件是价格在 30 到 40 之间。

SELECT name,price
FROM books
WHERE price BETWEEN 30 AND 40;

在这里插入图片描述
2.4、空值检查
在创建表时,表设计人员可以指定其中的列能否不包含值。在一个列不 包含值时,称其包含空值 NULL。

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

确定值是否为 NULL,不能简单地检查是否= NULL。SELECT 语句有一个 特殊的 WHERE 子句,可用来检查具有 NULL 值的列。这个 WHERE 子句就 是 IS NULL 子句。其语法如下:

SELECT name
FROM books
WHERE price IS NULL;

在这里插入图片描述

3、组合 WHERE 子句

为 了进行更强的过滤控制,SQL允许给出多个 WHERE 子句。

3.1、AND 和 OR 操作符
很好理解,AND 就是同时满足条件,OR 就是满足其中一个 条件即可。
例如:价格小于35,且销售量大于1000

SELECT name,price,sales
FROM books
WHERE price<35 AND sales>1000;

在这里插入图片描述例如:价格小于35,或者销售量大于1000

SELECT name,price,sales
FROM books
WHERE price<35 OR sales>1000;

在这里插入图片描述注意:AND 优先级比 OR 高,所以要先判断 OR 的话,就要圆括号()。
例如:如果想要价格小于35或者销售量大于1000,然后再种类属于科学技术。
错误:

SELECT name,price,sales,type
FROM books
WHERE price<35 OR sales>1000 AND type='科学技术';

正确:

SELECT name,price,sales,type
FROM books
WHERE (price<35 OR sales>1000) AND type='科学技术';

在这里插入图片描述
提示:在 WHERE 子句中使用圆括号 任何时候使用具有 AND 和 OR 操作符的 WHERE 子句,都应该使用圆括 号明确地分组操作符。不要过分依赖默认求值顺序,即使它确实如你 希望的那样。使用圆括号没有什么坏处,它能消除歧义。

3.2、IN 操作符
IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN 取 一组由逗号分隔、括在圆括号中的合法值。
WHERE 子句中用来指定要匹配值的清单的关键字,功能与 OR 相当。

例如:查询范围是人物传记、科学技术

SELECT name,type
FROM books
WHERE type IN ('人物传记','科学技术');

在这里插入图片描述
这个和 OR 不就是一样的吗?

SELECT name,type
FROM books
WHERE type='人物传记' OR type='科学技术';

其实这个有以下的优点:

  1. 在有很多合法选项时,IN 操作符的语法更清楚,更直观。
  2. 在与其他 AND 和 OR 操作符组合使用 IN 时,求值顺序更容易管理。
  3. IN 操作符一般比一组 OR 操作符执行得更快(在上面这个合法选项很 少的例子中,你看不出性能差异)。
  4. IN 的最大优点是可以包含其他 SELECT 语句,能够更动态地建立 WHERE 子句。

3.3、NOT 操作符
WHERE 子句中的 NOT 操作符有且只有一个功能,那就是否定其后所跟的 任何条件。因为 NOT 从不单独使用(它总是与其他操作符一起使用),所 以它的语法与其他操作符有所不同。NOT 关键字可以用在要过滤的列前, 而不仅是在其后。

例如:否定(排除科学技术)

SELECT name,type
FROM books
WHERE NOT type='科学技术';

在这里插入图片描述
说明:MariaDB 中的 NOT MariaDB 支持使用 NOT 否定 IN、BETWEEN 和 EXISTS 子句。大多数 DBMS允许使用 NOT 否定任何条件。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值