返回顶部
首页 > 资讯 > 数据库 >SQL 入门教程:组合 WHERE 子句
  • 807
分享到

SQL 入门教程:组合 WHERE 子句

SQL入门教程:组合WHERE子句 2018-08-24 00:08:02 807人浏览 才女
摘要

目录一、AND 操作符二、OR 操作符三、求值顺序请参阅 目录汇总:sql 入门教程:面向萌新小白的零基础入门教程 使用 WHERE 子句 中介绍的所有 WHERE 子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤

SQL 入门教程:组合 WHERE 子句

目录
  • 一、AND 操作符
  • 二、OR 操作符
  • 三、求值顺序
  • 请参阅

目录汇总:sql 入门教程:面向萌新小白的零基础入门教程

使用 WHERE 子句 中介绍的所有 WHERE 子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤控制,SQL 允许给出多个 WHERE 子句。这些子句有两种使用方式,即以 AND 子句或 OR 子句的方式使用。

操作符(operator)

用来联结或改变 WHERE 子句中的子句的关键字,也称为逻辑操作符(logical operator)。

一、AND 操作符

要通过不止一个列进行过滤,可以使用 AND 操作符给 WHERE 子句附加条件。下面的代码给出了一个例子:

输入▼

SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = "DLL01" AND prod_price <= 4;

分析▼

此 SQL 语句检索由供应商 DLL01 制造且价格小于等于 4 美元的所有产品的名称和价格。这条 SELECT 语句中的 WHERE 子句包含两个条件,用 AND 关键字联结在一起。AND 指示 DBMS 只返回满足所有给定条件的行。如果某个产品由供应商 DLL01 制造,但价格高于 4 美元,则不检索它。类似地,如果产品价格小于 4 美元,但不是由指定供应商制造的也不被检索。这条 SQL 语句产生的输出如下:

输出▼

prod_id     prod_price     prod_name
-------     ----------     --------------------
BNBG02      3.4900         Bird bean bag toy
BNBG01      3.4900         Fish bean bag toy
BNBG03      3.4900         Rabbit bean bag toy

AND

用在 WHERE 子句中的关键字,用来指示检索满足所有给定条件的行。

这个例子只包含一个 AND 子句,因此只有两个过滤条件。可以增加多个过滤条件,每个条件间都要使用 AND 关键字。

说明:没有 ORDER BY 子句

为了节省空间,也为了减少你的输入,我在很多例子里省略了 ORDER BY 子句。因此,你的输出完全有可能与教程中的输出不一致。虽然返回行的数量总是对的,但它们的顺序可能不同。当然,如果你愿意也可以加上一个 ORDER BY 子句,它应该放在 WHERE 子句之后。

二、OR 操作符

OR 操作符与 AND 操作符正好相反,它指示 DBMS 检索匹配任一条件的行。事实上,许多 DBMS 在 OR WHERE 子句的第一个条件得到满足的情况下,就不再计算第二个条件了(在第一个条件满足时,不管第二个条件是否满足,相应的行都将被检索出来)。

请看如下的 SELECT 语句:

输入▼

SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = "DLL01" OR vend_id = "BRS01";

分析▼

此 SQL 语句检索由任一个指定供应商制造的所有产品的产品名和价格。OR 操作符告诉 DBMS 匹配任一条件而不是同时匹配两个条件。如果这里使用的是 AND 操作符,则没有数据返回(因为会创建没有匹配行的 WHERE 子句)。这条 SQL 语句产生的输出如下:

输出▼

prod_name               prod_price
-------------------     ----------
Fish bean bag toy       3.4900
Bird bean bag toy       3.4900
Rabbit bean bag toy     3.4900
8 inch teddy bear       5.9900
12 inch teddy bear      8.9900
18 inch teddy bear      11.9900
Raggedy Ann             4.9900

OR

WHERE 子句中使用的关键字,用来表示检索匹配任一给定条件的行。

三、求值顺序

WHERE 子句可以包含任意数目的 ANDOR 操作符。允许两者结合以进行复杂、高级的过滤。

但是,组合 ANDOR 会带来了一个有趣的问题。为了说明这个问题,来看一个例子。假如需要列出价格为 10 美元及以上,且由 DLL01 或 BRS01 制造的所有产品。下面的 SELECT 语句使用组合的 ANDOR 操作符建立了一个 WHERE 子句:

输入▼

SELECT prod_name, prod_price
FROM Products
WHERE vend_id = "DLL01" OR vend_id = "BRS01"
      AND prod_price >= 10;

输出▼

prod_name               prod_price
-------------------     ----------
Fish bean bag toy       3.4900
Bird bean bag toy       3.4900
Rabbit bean bag toy     3.4900
18 inch teddy bear      11.9900
Raggedy Ann             4.9900

分析▼

请看上面的结果。返回的行中有 4 行价格小于 10 美元,显然,返回的行未按预期的进行过滤。为什么会这样呢?原因在于求值的顺序。SQL(像多数语言一样)在处理 OR 操作符前,优先处理 AND 操作符。当 SQL 看到上述 WHERE 子句时,它理解为:由供应商 BRS01 制造的价格为 10 美元以上的所有产品,以及由供应商 DLL01 制造的所有产品,而不管其价格如何。换句话说,由于 AND 在求值过程中优先级更高,操作符被错误地组合了。

此问题的解决方法是使用圆括号对操作符进行明确分组。请看下面的 SELECT 语句及输出:

输入▼

SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = "DLL01" OR vend_id = "BRS01")
      AND prod_price >= 10;

输出▼

prod_name               prod_price
-------------------     ----------
18 inch teddy bear      11.9900

分析▼

这条 SELECT 语句与前一条的唯一差别是,将前两个条件用圆括号括了起来。因为圆括号具有比 ANDOR 操作符更高的优先级,所以 DBMS 首先过滤圆括号内的 OR 条件。这时,SQL 语句变成了选择由供应商 DLL01 或 BRS01 制造的且价格在 10 美元及以上的所有产品,这正是我们希望的结果。

提示:在 WHERE 子句中使用圆括号

任何时候使用具有 ANDOR 操作符的 WHERE 子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认求值顺序,即使它确实如你希望的那样。使用圆括号没有什么坏处,它能消除歧义。

请参阅

  • 组合 WHERE 子句
  • IN 操作符
  • NOT 操作符
  • WHERE AND OR IN NOT 练习题

(完)

您可能感兴趣的文档:

--结束END--

本文标题: SQL 入门教程:组合 WHERE 子句

本文链接: https://lsjlt.com/news/8602.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQL 入门教程:组合 WHERE 子句
    目录一、AND 操作符二、OR 操作符三、求值顺序请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 使用 WHERE 子句 中介绍的所有 WHERE 子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤...
    99+
    2018-08-24
    SQL 入门教程:组合 WHERE 子句
  • SQL 入门教程:使用 WHERE 子句
    目录请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria)...
    99+
    2015-08-13
    SQL 入门教程:使用 WHERE 子句
  • MySQL数据库入门——where子句,组合where的子句
    select语句的where子句指定搜索条件过滤显示的数据。(1)使用where子句在 select 语句中,where子句在from子句之后给出,返回满足指定搜索条...
    99+
    2024-04-02
  • SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句
    文章目录 1SQL语法1.1 SELECT 语句1.1.1SQL SELECT 语句1.1.2SQL SELECT 语法 1.2DISTINCT 语句1.2.1 DISTINCT 的作用...
    99+
    2023-09-01
    sql 数据库 mysql
  • SQL 入门教程:子查询
    目录一、利用子查询进行过滤请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 SELECT 语句 是 SQL 的查询。我们迄今为止所看到的所有 SELECT 语句都是简单查询,即从单个数据库表中检索数据的单条语句。 ...
    99+
    2017-11-30
    SQL 入门教程:子查询
  • SQL 入门教程:SELECT 语句
    目录请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 SQL 语句是由简单的英语单词构成的。这些单词称为关键字,每个 SQL 语句都是由一个或多个关键字构成的。最经常使用的 SQL 语句大概就是 SELECT 语句了。它的...
    99+
    2019-04-11
    SQL 入门教程:SELECT 语句
  • SQL 入门教程:创建组合(UNION)查询
    目录一、使用 UNION二、UNION 规则三、包含或取消重复的行四、对组合查询结果排序请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 可用 UNION 操作符来组合数条 SQL 查询。利用 UN...
    99+
    2014-09-12
    SQL 入门教程:创建组合(UNION)查询
  • SQL 入门教程:数据分组(GROUP BY)
    目录创建分组请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 从 聚集函数 得知,使用 SQL 聚集函数可以汇总数据。这样,我们就能够对行进行计数,计算和与平均数,不检索所有数据就获得最大值和最小值。 目前为止的所有计算都...
    99+
    2020-02-12
    SQL 入门教程:数据分组(GROUP BY)
  • SQL 零基础入门教程
    目录一、了解 SQL二、检索数据三、排序检索数据四、过滤数据五、高级数据过滤六、用通配符进行过滤七、创建计算字段八、使用函数处理数据九、汇总数据十、分组数据十一、使用子查询十二、联结表十三、创建高级联结十四、组合查询十五、插入数据十六、更...
    99+
    2014-09-15
    SQL 零基础入门教程
  • SQL 教程-入门基础篇
    文章目录 SQL 简介SQL 语法SQL SELECT 语句SQL SELECT DISTINCT 语句SQL WHERE 子句SQL AND & OR 运算符SQL ORDER BY...
    99+
    2023-08-31
    sql 数据库 mybatis mysql
  • SQL 入门教程:数据插入(INSERT)
    目录一、插入完整的行二、插入部分行三、插入检索出的数据请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 毫无疑问,SELECT 是最常用的 SQL 语句了,这就是前 14 部分都在讲它的原因。但是,还有其他 3 个...
    99+
    2015-09-22
    SQL 入门教程:数据插入(INSERT)
  • OpenMP深入剖析reduction子句教程
    目录前言从并发求和开始解决求和问题的各种办法使用数组巧妙解决并发程序当中的数据竞争问题reduction 子句深入剖析 reduction 子句加法+操作符乘法*操作符逻辑与&...
    99+
    2022-11-16
    OpenMP剖析reduction子句 OpenMP reduction
  • SQL 入门教程:LIKE 操作符
    目录一、百分号(%)通配符二、下划线(_)通配符三、方括号([])通配符四、使用通配符的技巧请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 前面介绍的所有操作符都是针对已知值进行过滤的。不管是匹配一个值还是多个值,检验大...
    99+
    2022-02-08
    SQL 入门教程:LIKE 操作符
  • SQL 入门教程:拼接字段
    目录使用别名请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 为了说明如何使用 计算字段,我们来举一个简单例子,创建由两列组成的标题。 Vendors 表包含供应商名和地址信息。假如要生成一个供应商报表,需要在格式化的名称...
    99+
    2020-03-12
    SQL 入门教程:拼接字段
  • SQL 入门教程:使用函数
    目录一、文本处理函数二、日期和时间处理函数三、数值处理函数请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 大多数 SQL 实现支持以下类型的函数。 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。 ...
    99+
    2017-06-27
    SQL 入门教程:使用函数
  • SQL 入门教程:聚集函数
    目录一、AVG() 函数二、COUNT() 函数三、MAX() 函数四、MIN() 函数五、SUM() 函数请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 我们经常需要汇总数据而不用把它们实际检索出来,为此 SQL 提供...
    99+
    2020-07-09
    SQL 入门教程:聚集函数
  • SQL 入门教程:创建视图
    目录一、利用视图简化复杂的联结二、用视图重新格式化检索出的数据三、用视图过滤不想要的数据四、使用视图与计算字段请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 理解了什么是 视图 以及管理它们的规则和约束后,我们来创建视图...
    99+
    2022-01-24
    SQL 入门教程:创建视图
  • SQL 入门教程:数据库基础
    目录一、数据库二、表三、列和数据类型四、行五、主键请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 你正在读本 SQL 教程,这表明你需要以某种方式与数据库打交道。SQL 正是用来实现这一任务的语言,因此在学习 SQL 之...
    99+
    2017-01-19
    SQL 入门教程:数据库基础
  • SQL 入门教程:创建联结(JOIN)
    目录一、WHERE 子句的重要性二、内联结三、联结多个表请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 创建 联结 非常简单,指定要联结的所有表以及关联它们的方式即可。请看下面的例子: 输入▼ SELECT...
    99+
    2015-05-03
    SQL 入门教程:创建联结(JOIN)
  • SQL 入门教程:创建表(CREATE TABLE)
    目录一、表创建基础二、使用 NULL 值三、指定默认值请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 SQL 不仅用于表数据操纵,而且还用来执行数据库和表的所有操作,包括表本身的创建和处理。 一般有两种创建表的方法: ...
    99+
    2014-12-06
    SQL 入门教程:创建表(CREATE TABLE)
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作