SQL | 高级数据过滤

5-高级数据过滤

通过组合WHERE子句,建立功能更强的检索语句。

5.1-组合WHERE子句

前面写的都是单一条件下的WHERE子句,SQL语句允许给出多个WHERE子句来组合检索,这些WHERE子句通过AND子句或者OR子句进行连接。

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

5.1.1 AND操作符

要通过不止一个列进行过滤,可以通过AND操作符进行连接。

select prod_id,prod_price,prod_name
from products
where vend_id = 'DLL01' AND prod_price <= 4;

上述SQL语句用于检索由DLL01供应商提供的价格小于等于4元的所有产品的价格和名称。该条语句包含两个查询条件,一个是供应商id为DLL01,另一个条件为价格小于等于4,使用AND进行连接。

上述语句使用了一个AND连接符,因此只有两个过滤条件。可以增加多个过滤条件,每个条件之间都要使用AND连接符进行连接。

5.1.2 OR连接符

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

select prod_id,prod_price,prod_name
from products
where vend_id = 'DLL01' OR vend_id = 'BRS01';

 

上述SQL语句通过OR连接符进行检索,只要满足任意一个条件,就会将数据纳入检索范围。

5.1.3 求值顺序

WHERE子句可以包含很多的AND和OR操作符。但是这么做可能会有一些小问题。

例如:想要列出价格为10元以上,且有DLL01或者BRS01制造的所有产品

select prod_id,prod_price,prod_name
from products
where vend_id  = 'DLL01' or vend_id = 'BRS01' and prod_price >= 10;

 

可以看到,价格低于十元的产品也被输出了出来。

原因 在于求值顺序,SQL在处理OR操作符前,会优先处理AND操作符。当SQL看到上述语句时,会理解为:由供应商BRS01提供的10元以上的产品,以及由供应商DLL01提供的所有产品,而不管其价格如何。BRS01和价格大于等于10优先组合在一起。

解决办法是使用圆括号对操作符进行分组:

select prod_id,prod_price,prod_name
from products
where (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10;

 

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

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

5.2-IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。

select prod_name,prod_price
from products
where vend_id IN ('DLL01','BRS01')
order by prod_name;

 

上述语句检索由供应商DLL01和供应商BRS01所提供的产品。

IN操作符完成的功能与OR操作符完成的功能类似。

select prod_name,prod_price
from products
where vend_id = 'DLL01' OR vend_id = 'BRS01'
order by prod_name;

  两个语句输出的内容相同。

使用IN操作符的优点:

  • 有很多合法选项时,IN操作符更为清晰明了。

  • 在与其他AND和OR操作符组合使用IN时,求值顺序更容易理解。

  • IN操作符一般比一组OR操作符执行速度更快。

  • IN最大的优点是,可以包含其他select语句,能够更动态的建立where子句。

5.3-NOT操作符

WHERE子句中的NOT操作符有且只有一个作用,否定其后跟随的任何条件。

NOT从不单独使用,总是与其他操作符一起使用。

select prod_name
from products
where NOT vend_id = 'DLL01'
order by prod_name;

检索所有vend_id不是DLL01的行。

上面的语句也可以使用"<>"或者"!="来实现。

select prod_name
from products
where vend_id <> 'DLL01'
order by prod_name;

select prod_name
from products
where vend_id != 'DLL01'
order by prod_name;

对于简单的where语句来说,使用NOT操作符确实没有多少优势,但是如果SQL语句比较复杂的话,NOT就非常有用。

例如,在与IN操作符联合使用时,NOT可以非常简单地找出与条件列表不匹配的行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/69635.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法】稀疏数组

文章目录 一&#xff1a;为什么会使用稀疏数组1.1 先看一个实际的需求1.2 基本介绍1.2.1 稀疏数组的处理方法1.2.2 数组的举例说明1.2.3 应用实例1.2.4 整体思路分析二维数组转稀疏数组的思路稀疏数组转原始的二维数组的思路 二&#xff1a;代码实现2.1 创建一个原始的11*11二维…

每天一道leetcode:剑指 Offer 12. 矩阵中的路径(中等DFS深度优先遍历)

今日份题目&#xff1a; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元…

HCIA---动态路由---RIP协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 前言 一.动态路由 二.动态路由协议分类 IGP&#xff1a;内部网关协议 EGP:外部网关协议 三.RIP协议概述 RIP版本分类&#xff1a; RIP三要素&#xff1a; 思维…

全景图!最近20年,自然语言处理领域的发展

夕小瑶科技说 原创 作者 | 小戏、Python 最近这几年&#xff0c;大家一起共同经历了 NLP&#xff08;写一下全称&#xff0c;Natural Language Processing&#xff09; 这一领域井喷式的发展&#xff0c;从 Word2Vec 到大量使用 RNN、LSTM&#xff0c;从 seq2seq 再到 Attenti…

【计算机网络】12、frp 内网穿透

文章目录 一、服务端设置二、客户端设置 frp &#xff1a;A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet。是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且…

SQL Server Reporting Services 报错:报表服务器无法访问服务帐户的私钥

解决这个问题&#xff0c;有小伙伴提到可以使用命令 exec DeleteEncryptedContent 但这对这边的环境时行不通的&#xff0c;我在【服务账户】的配置和【数据库】的配置中到使用了域账户&#xff0c;试了几次都不行。改成使用内置账户就好了。具体原因还没扒拉&#xff08;欢迎…

4-5-tablewidget

文章目录 添加控件&#xff0c;添加行列数widget.cppwidget.h效果 添加控件&#xff0c;添加行列数 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this)…

linux和C++中的 线程同步与线程安全 对比

线程同步与线程安全 线程进程与线程的区别并发和并行的区别linux线程常用接口函数函数定义函数使用 多线程理解 线程同步五个线程同时启动&#xff0c;每一个循环打印3次五个线程&#xff0c;每一个循环1000 结果是<5000代码和测试结果测试结果分析可以用信号量和互斥锁解决…

一文走进时序数据库性能测试工具 TSBS

一、背景 在物联网、车联网等时序数据场景中&#xff0c;数据的高速写入能力至关重要&#xff0c;会对产品方案的可用性、可靠性和扩展性产生影响。 以物联网为例&#xff0c;当面临千万甚至上亿设备、平均每个设备采集几十个到几百个指标时&#xff0c;每秒生成的数据将达到…

vue3 setup+Taro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造

vue3 setupTaro3 调用原生小程序自定义年月日时分多列选择器&#xff0c;NutUI改造 NutUI 有日期时间选择器&#xff0c;但是滑动效果太差&#xff0c;卡顿明显。换成 原生小程序 很顺畅 上代码&#xff1a; <template><view><pickermode"multiSelector&…

Grafana+Prometheus技术文档-进阶使用-监控spring-boot项目

阿丹&#xff1a; 之前已经实现了使用Prometheus来对服务器进行了监控和仪表盘的创建&#xff0c;现在就需要对这些监控方法使用在spring-boot中去。 实现思路&#xff1a; 1、集成Actuator 2、加入Prometheus的依赖 3、配置开放端口、以及开放监控 4、配置Prometheus中的配置…

Linux命令200例:tree用于以树状结构显示文件和目录

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

【Terraform学习】保护敏感变量(Terraform配置语言学习)

实验步骤 创建 EC2 IAM 角色 导航到IAM 在左侧菜单中&#xff0c;单击角色 。单击创建角色该按钮以创建新的 IAM 角色。 在创建角色部分&#xff0c;为角色选择可信实体类型&#xff1a; AWS 服务 使用案例:EC2 单击下一步 添加权限&#xff1a;现在&#xff0c;您可以看到…

穿越未来:探索虚拟现实科技的未来前景

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;科技&#xff0c;正如一颗崭新的明星&#xff0c;迅猛崛起&#xff0c;为人类带来前所未有的体验和想象空间。随着科技的飞速发展&#xff0c;VR 科技的未来充满了无限的可能性&#xff0c;正将我们引向一个…

VUE+ElementUI的表单验证二选一必填项,并且满足条件后清除表单验证提示

上代码 <el-form-item label"出库单号" prop"ecode" ref"ecode" :rules"rules.ecode"><el-input v-model"queryParams.ecode" placeholder"出库单号和出库箱号至少填写一项" clearable style"width…

SpringBoot启动报错:java: 无法访问org.springframework.boot.SpringApplication

报错原因&#xff1a;jdk 1.8版本与SpringBoot 3.1.2版本不匹配 解决方案&#xff1a;将SpringBoot版本降到2系列版本(例如2.5.4)。如下图&#xff1a; 修改版本后切记刷新Meavn依赖 然后重新启动即可成功。如下图&#xff1a;

Linux如何开启指定端口号

本文已收录于专栏 《运维》 目录 概念说明防火墙端口号 提供服务具体分类具体操作防火墙操作端口号操作 总结提升 概念说明 防火墙 防火墙是一种网络安全设备或软件&#xff0c;用于监控和控制网络流量&#xff0c;保护网络免受恶意攻击和未经授权的访问。防火墙可以根据预定义…

MySQL 数据类型总结

整形数据类型 1字节 8bit 2^8256

VBA_MF系列技术资料1-152

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…