【SQL 必知必会】- 第五课 高级数据过滤

news/2025/3/15 16:03:59/

目录

组合WHERE 子句

        AND操作符

        OR操作符

        求值顺序

        在WHERE 子句中使用圆括号

IN 操作符

        为什么要使用IN 操作符?

NOT 操作符

        也可使用<>操作符来完成。

        说明:MariaDB 中的NOT


组合WHERE 子句

        AND操作符

        要通过不止一个列进行过滤,可以使用AND 操作符给WHERE 子句附加条件。

        OR操作符

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

        求值顺序

        SQL(像多数语言一样)在处理OR 操作符前,优先处理AND 操作符。

        圆括号具有比AND 或OR 操作符更高的求值顺序,所以DBMS首先过滤圆括号内的OR条件。

        在WHERE 子句中使用圆括号

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


IN 操作符

        WHERE 子句中用来指定要匹配值的清单的关键字,功能与OR 相当。

        IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN 取一组由逗号分隔、括在圆括号中的合法值。

        你可能会猜测 IN 操作符完成了与 OR 相同的功能,恭喜你猜对了!

        为什么要使用IN 操作符?

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


NOT 操作符

        WHERE 子句中用来否定其后条件的关键字。

        WHERE 子句中的NOT 操作符有且只有一个功能,那就是否定其后所跟的任何条件。因为NOT 从不单独使用(它总是与其他操作符一起使用),所以它的语法与其他操作符有所不同。

        NOT 关键字可以用在要过滤的列前,而不仅是在其后。

SELECT prod_name FROM Products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name;

        也可使用<>操作符来完成。

SELECT prod_name FROM Products WHERE vend_id <> 'DLL01' ORDER BY prod_name;

        在实际的工作中,更加倾向于 <> 的写法,逻辑更加的清晰明了,也更加简洁。

        为什么使用NOT?对于这里的这种简单的WHERE 子句,使用NOT 确实没有什么优势。但在更复杂的子句中,NOT 是非常有用的。例如,在与IN 操作符联合使用时,NOT 可以非常简单地找出与条件列表不匹配的行。

        说明:MariaDB 中的NOT

        MariaDB 支持使用NOT 否定IN、BETWEEN 和EXISTS 子句。大多数DBMS 允许使用NOT 否定任何条件。


http://www.ppmy.cn/news/39380.html

相关文章

041:cesium加载Blue Marble地图

第041个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载Blue Marble地图。Blue Marble是一个术语,用来描述星球漂浮在浩瀚太空中的形象。早在 1972 年,阿波罗 17 号任务的工作人员就首次捕捉到了地球的标志性卫星图像,并将其称为“Blue Marble”。从那时起,NA…

【Java EE】-多线程编程(四) 死锁

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享&#xff1a;2023.3.31号骑行的照片再发一次(狗头)。 主要内容&#xff1a;什么是死锁&#xff1f;不可重入可重入、死锁的三个典型情况&#xff1a;1、一个线程一…

RabbitMQ快速入门

文章目录RabbitMQ快速入门1、Java原生2、SpringBoot快速整合2.1、Fanout2.1.1、Producer2.1.2、Consumer2.1.3、测试2.2、Direct2.3、Topic3、设置过期时间TTL3.1、对队列进行设置3.2、对消息进行设置4、死信队列5、内存监控6、内存换页7、磁盘监控RabbitMQ快速入门 1、Java原…

【JavaWeb】10— Vue.js

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

window的rabbitmq在nacos的使用

1.下载erlang并安装配置&#xff1a;Downloads - Erlang/OTP .然后重启生效 2.下载rabbitmq&#xff1a;Installing on Windows — RabbitMQ 3.下载并放在rabbitmq的plugins里:Releases rabbitmq/rabbitmq-delayed-message-exchange GitHub 进入rabbitmq的sbin目录&#xf…

Mathematica(38)-添加注释

我们再写文章的时候&#xff0c;常常需要采用求解软件Mathematica进行求解公式等操作&#xff0c;那么为了避免乱糟糟的情形&#xff0c;还是得给代码加上注释&#xff0c;下面总结一下注释的用法&#xff1a; &#xff08;1&#xff09;一般代码的注释方法 方法一&#xff1…

面向对象编程(基础)10:类的成员之三:构造器(Constructor)

我们new完对象时&#xff0c;所有成员变量都是默认值&#xff0c;如果我们需要赋别的值&#xff0c;需要挨个为它们再赋值&#xff0c;太麻烦了。我们能不能在new对象时&#xff0c;直接为当前对象的某个或所有成员变量直接赋值呢&#xff1f; 可以&#xff0c;Java给我们提供…

ToBeWritten之SAE-J1850协议

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…