sql组合查询语句_数据库查询语句where的用法

sql组合查询语句_数据库查询语句where的用法目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 使用 WHERE 子句 中介绍的所有 WHERE 子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤控制,SQL 允许给出多个 WHER

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 练习题

(完)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5996.html

(0)
上一篇 2023-04-19 15:30
下一篇 2023-04-19

相关推荐

  • Oracle学习笔记二十八:视图的使用「建议收藏」

    Oracle学习笔记二十八:视图的使用「建议收藏」一、视图概念 • 视图概念 • 视图是基于一个表或多个表或视图的逻辑表(虚表),本身不包含数据,通过它可以对表里面的数据进行查询。 • 基表 • 视图是从一个或多个实际表中获得的,这些表的数据存放在数

    2023-05-23
    96
  • mysql大表建索引_mysql索引字段

    mysql大表建索引_mysql索引字段通常我们往大表里面添加索引或者添加新字段,不能直接执行,执行时间很长,造成锁表操作,必须借助于pt或者gh-ost等数据库管理工具添加。 例子如下: pt-online-schema-change –

    2023-04-12
    127
  • mysql默认的事务隔离级别能达到什么效果_数据库四大特性

    mysql默认的事务隔离级别能达到什么效果_数据库四大特性网上对于此类的文章已经十分饱和了,那还写的原因很简单——作为自己的理解笔记。 前言 ​ 此篇文章作为自己学习 的一些个人理解,使用的引擎是 。首先先讲讲 事务 的概念,在 中其对 事务 的描述是这样的

    2023-01-26
    99
  • Python字体选择最佳实践

    Python字体选择最佳实践Python是一门强大的通用编程语言,广泛应用于Web开发、数据科学、机器学习、人工智能等领域。在Python开发中,字体选择是一个很重要的方面,它关系到代码的可读性和美观度。本文将从多个方面介绍Python字体选择的最佳实践。

    2024-02-05
    41
  • Python 中 NoneType 的含义及使用

    Python 中 NoneType 的含义及使用在 Python 中,NoneType 是一个非常重要和常见的数据类型。它表示一个不确定的、空的或者缺失的值,通常用于表示一个没有被初始化的变量或者一个函数没有返回值的情况。在本文中,我们将从多个方面对 Python 中 NoneType 的含义及使用进行详细的阐述。

    2024-01-27
    70
  • 用Python的os.path.basename函数获取文件名

    用Python的os.path.basename函数获取文件名 在Python中,我们可以使用os.path.basename函数获取文件路径中的文件名部分,该函数用于获取文件的基本名称(字符串中最后一个反斜杠以后的部分),并将其作为字符串返回。如果路径以反斜杠结尾,则返回前一个部分。该函数可以应用于多种操作系统,如Windows,Linux,Unix等。使用该函数时,需要导入os模块。

    2023-12-10
    65
  • 简单的mysql主从同步

    简单的mysql主从同步1 准备好两台mysql(192.168.206.128(这台做主库) 192.168.206.129(从库)) 2 设置主库 #vi /etc/mysql/my.cnf [mysqld] log-…

    2023-03-08
    94
  • 实战kudu集成impala[通俗易懂]

    实战kudu集成impala[通俗易懂]推荐阅读: 论主数据的重要性(正确理解元数据、数据元) CDC+ETL实现数据集成方案 Java实现impala操作kudu 实战kudu集成impala impala基本介绍 impala是clou

    2023-01-23
    101

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注