4.3 where关键字过滤查询数据

news2024/12/31 5:25:36

文章目录

  • 1.使用WHERE子句
  • 2.WHERE子句操作符
    • 2.1 使用单个值
    • 2.2 不匹配检查
    • 2.3 范围值查询
    • 2.4 空值检查
  • 3.组合WHERE子句
    • 3.1 AND操作符
    • 3.2 OR操作符
    • 3.3 计算次序
  • 4.IN操作符
  • 5.NOt关键字
  • 5.注意事项
    • 5.1 NULL与不匹配
    • 5.2 SQL过滤与应用过滤
    • 5.3 WHERE子句的位置


1.使用WHERE子句

数据库表一般包含大量数据,我们很少需要查询表中的全部数据,通常只会根据特定操作或报告的需要提取表数据的子集。只查找所需数据需要指定搜索条件,搜索条件也称为过滤条件;

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

SELECT prod_price,prod_name
FROM products
WHERE prod_price = 3.42;

其查询结果如下:
在这里插入图片描述

这个例子使用了简单的相等测试,它检查一个列是否具有指定的值,根据此值进行过滤,但 WHERE 子句还有很多其他功能可以实现;

2.WHERE子句操作符

MySql 支持以下所有的条件操作符:

操作符说明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
BETWEEN在指定的俩个值之间

2.1 使用单个值

我们再来看一个测试相等的例子:

SELECT prod_price,prod_name
FROM products
WHERE prod_name = 'fuses';

输出:

在这里插入图片描述

其返回prod_name的值为 Fuses 的一行,MySql 在执行匹配时默认不区分大小写,所以 Fuses 与 fuses 没有区别;

接下来再来看一个使用其他操作符的例子:

SELECT prod_price,prod_name
FROM products
WHERE prod_price < 10;

输出:

在这里插入图片描述

其查询价格小于10的全部所有产品;

下一条语句查询价格小于等于10 的所有产品:

SELECT prod_price,prod_name
FROM products
WHERE prod_price <= 10;

输出:

在这里插入图片描述

2.2 不匹配检查

下面的例子查询不是由供货商1003 制造的所有产品:

SELECT vend_id,prod_name
FROM products
WHERE vend_id <> 1003;

输出:

在这里插入图片描述

其查询结果与下方的SQL语句一致:

SELECT vend_id,prod_name
FROM products
WHERE vend_id != 1003;

输出:

在这里插入图片描述

2.3 范围值查询

为了检查某个范围的值,可以使用 BETWEEN 操作符;其语法与其他 WHERE 子句的操作符不同,它需要俩个值,即范围的开始值与结束值;如:

SELECT prod_price,prod_name
FROM products
WHERE prod_price BETWEEN 5 AND 10;

输出:

在这里插入图片描述

其用来查询价格在 5-10 之间的所有产品,这俩个值用 AND 关键字分隔,BETWEEN 匹配范围中所有的值,包括指定的开始值和结束值;

2.4 空值检查

在创建表时,初始设计可以指定某些列是否可以为 NULL,这个 WHERE 子句就是 IS NULL 子句,如:

SELECT cust_id
FROM customers
WHERE cust_email IS NULL;

输出:
在这里插入图片描述

这条语句查询没有电子邮件地址的所有人员ID,同时,也可以查询不为空的列,如:

SELECT cust_id
FROM customers
WHERE cust_email IS NOT NULL;

输出:
在这里插入图片描述

这条语句查询有电子邮件地址的所有人员ID;

3.组合WHERE子句

MySql允许给出多个WHERE子句,这些子句以俩种方式进行使用:以AND子句或OR子句方式进行连接使用;

3.1 AND操作符

为了使用多个列的条件进行过滤,可以使用AND操作符给WHERE子句附加条件,如:

SELECT prod_id, prod_price,prod_name
FROM products
WHERE vend_id = 1003 AND prod_price <= 10;

输出:
在这里插入图片描述

这条SQl语句查询所有供应商1003制造并且价格小于等于 10 的产品名称,产品ID和产品价格;

AND关键字表明返回同时满足所有给定条件的行;还可以继续增加过滤条件,每增加一个过滤条件,就要使用一个AND关键字;

3.2 OR操作符

OR操作符与AND操作符不同,其表示查询时匹配任一条件的行;如:

SELECT prod_price,prod_name
FROM products
WHERE vend_id = 1002 OR vend_id = 1003;

输出:

在这里插入图片描述

其表示查询由供应商1002 或 供应商1003 ,同时返回他们俩家供应商的全部产品名称和价格,如果这里使用 AND 关键字,则不反回任何数据,因为表中没有既是供应商1002制造,又是供应商1003制造的商品;

3.3 计算次序

WHERE 子句可以包含任意数量的AND 和 OR 操作符,允许俩者同时使用,以便完成更加复杂的过滤条件,但这也带来一个问题,假如需要查询价格大于等于10 且供应商为1002或1003的全部产品,其SQL语句如下:

SELECT prod_price,prod_name
FROM products
WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10;

输出:
在这里插入图片描述

返回结果中有俩个价格小于10 的产品,很显然返回的结果不满足预期,原因就在于计算的次序,SQL 在处理条件过滤时,优先处理AND关键字,然后才处理 OR 关键字,上面的语句会被认为是要查询供应商为1003并且价格大于10 或供应商为1002 的商品,在供应商1002的商品中,并没有了限定价格的条件,遇到类似这样的问题,我们可以使用小括号来限定我们的条件组合,如:

SELECT prod_price,prod_name
FROM products
WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;

输出:

在这里插入图片描述

这样,就会优先查找供应商为1002和1003的产品,在从产品中过滤出价格大于等于10 的产品来进行展示;

4.IN操作符

IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配,将范围的值全部放到小括号中,由逗号进行分隔,如:

SELECT prod_price,prod_name
FROM products
WHERE vend_id IN (1002,1003)
ORDER BY prod_name;

输出:
在这里插入图片描述

这条SQL语句查询供应商1002与1003制造的所有产品,并通过产品名称进行排序,IN关键字后的括号中包含所有条件的合法清单,其用逗号分隔,这里要注意的是全部的合法清单,如果括号中是(1002,1007),其并不会查询1003,1004…1006这几个值,因为其不在括号中;

IN操作符的优点如下:

  1. 在使用较长的条件时,IN操作符的语法更加清晰直观;
  2. 在使用IN操作符时,计算的次序更容易管理;
  3. IN操作符一般比OR操作符执行更快;
  4. IN操作符最大的优势在于可以包含其他SELECT语句,可以实现子查询(后续将介绍子查询);

5.NOt关键字

NOt 关键字有且只有一个功能,除了 IS NOT NUll 我们在前边介绍过外,其他所有的格式都一致,其作用就是否定它之后所跟的任何条件,如:

SELECT prod_price,prod_name
FROM products
WHERE vend_id NOT IN (1002,1003)
ORDER BY prod_name;

输出:
在这里插入图片描述

其查询结果不是查询匹配供应商为1002和1003的,而是匹配除他们俩家供应商外其他所有供应商的;

5.注意事项

5.1 NULL与不匹配

要注意,在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行,但这是不行的,因为未知具有特殊的含义,数据库不知道他们是否匹配,所以在匹配查询或者不匹配查询时不返回它们;

所以在查询数据时,一定要验证返回数据中确实给出了被过滤列具有 NULL 的行;

5.2 SQL过滤与应用过滤

数据也可以在应用层进行过滤,在应用层进行过滤,SQl会提供超过实际所需的数据,然后应用再对返回的全部数据进行循环过滤,提取出需要的数据;

通常,这样的做法很不适合商业化的开发,一般商业化开发中,表中会存在大量数据,大量数据在客户——应用——数据库中进行交互,十分占用网络通信,并且在应用层处理大量的数据也十分影响系统性能;

所以要尽可能的在SQl中过滤掉不需要的数据,将数据之间的传递尽可能的使其内容瘦身;

5.3 WHERE子句的位置

在同时使用 ORDER BY 和 WHERE 子句时,应该让 ORDER BY 位于 WHERE 之后,否则将会产生错误;

其实在这里可以通过书写顺序进行理解,我们要先将数据通过 WHERE 进行过滤,然后再通过 ORDER BY 进行排序,这样需要排序的数据更少,性能更好;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【RSA】HTTPS中SSL/TLS握手时RSA前后端加密流程

SSL/TLS层的位置 SSL/TLS层在网络模型的位置&#xff0c;它属于应用层协议。接管应用层的数据加解密&#xff0c;并通过网络层发送给对方。 SSL/TLS协议分握手协议和记录协议&#xff0c;握手协议用来协商会话参数&#xff08;比如会话密钥、应用层协议等等&#xff09;&…

QT中级(6)基于QT的文件传输工具(2)

QT中级&#xff08;6&#xff09;基于QT的文件传输工具&#xff08;2&#xff09;本文实现第一步1 新增功能2 运行效果3 实现思路4 源代码实现这个文件传输工具大概需要那几步&#xff1f;实现多线程对文件的读写实现TCP客户端和服务端实现网络传输 书接上回&#xff1a;QT中级…

27k入职阿里测开岗那天,我哭了,这5个月付出的一切总算没有白费~

先说一下自己的个人情况&#xff0c;计算机专业&#xff0c;16年普通二本学校毕业&#xff0c;经历过一些失败的工作经历后&#xff0c;经推荐就进入了华为的测试岗&#xff0c;进去才知道是接了个外包项目&#xff0c;不太稳定的样子&#xff0c;可是刚毕业谁知道什么外包不外…

沸点 | 实时图数据库技术将赋能银行数字化转型——访同心尚科技总裁王昊

实时图数据库技术将赋能银行数字化转型 ——访同心尚科技总裁王昊 本报记者 赵萌 全国两会召开在即&#xff0c;近日&#xff0c;在多家媒体或研究机构的两会热点话题预测中&#xff0c;“科技创新”“数字经济”位列其中。如何更好发挥信息科技对支持实体经济发展的放大、叠加…

【运维有小邓】Oracle数据库审计

一些机构通常将客户记录、信用卡信息、财务明细之类的机密业务数据存储在Oracle数据库服务器中。这些数据存储库经常因为内部安全漏洞和外部安全漏洞而受到攻击。对这类敏感数据的任何损害都可能严重降低客户对机构的信任。因此&#xff0c;数据库安全性对于任何IT管理员来说都…

webpack.config.js与package.json文件的配置

path要使用绝对路径&#xff0c;通过每次复制文件位置非常麻烦且容易导致问题 使用node中的 写个包名跟入口名称&#xff0c;其他全部回车 此步完成后&#xff0c;自动生成一个package.json包 licence指的是开源&#xff0c;一般不写 安装文件夹需要的依赖 dirname是node自带…

图注意网络GAT理解及Pytorch代码实现【PyGAT代码详细注释】

文章目录GAT代码实现【PyGAT】GraphAttentionLayer【一个图注意力层实现】用上面实现的单层网络测试加入Multi-head机制的GAT对数据集Cora的处理csr_matrix()处理稀疏矩阵encode_onehot()对label编号build graph邻接矩阵构造GAT的推广GAT 题&#xff1a;Graph Attention Netwo…

Netty之ChannelFuture详解

目录 目标 Netty版本 Netty官方API 客户端如何与服务器建立连接&连接成功后的操作方式 实现 如何处理客户端与服务器连接关闭后的操作 正确关闭连接的方式 方法一 方法二 目标 了解Netty如何处理客户端与服务器之间的连接与关闭问题。 Netty版本 <dependency&…

Kafka系列之:Kafka生产者和消费者

Kafka系列之:Kafka生产者和消费者 一、Kafka生产者发送流程二、提高生产者吞吐量三、Kafka消费方式四、Kafka消费者总体工作流程五、按照时间消费Kafka Topic一、Kafka生产者发送流程 batch.size:只有数据积累到batch.size之后,sender才会发送数据,默认16K。linger.ms:如果…

预热:Eyeshot 2023 Beta 正式版不远 Eyeshot 2023 Fem

预热&#xff1a;Eyeshot 2023 Beta 离正式版不远 Eyeshot 2023 Fem 破解版 devDept Software 自豪地宣布推出新的Eyeshot 2023 Beta版本。 现在已经完成了几次迁移&#xff0c;我们有了一个最终的工作区架构&#xff0c;它不再需要设计/设计用户界面分离的对象。正如我们在迁移…

SMPL可视化大杀器,你并不需要下载SMPL就能可视化你的3D Pose

SMPL 是一种3D人体建模方法&#xff0c;现在几乎所有的元宇宙人体建模都是基于此类方法&#xff0c;包括但不限于元宇宙&#xff0c;自动驾驶等领域。它能估计出比较准确的人体3D姿态&#xff0c;得益于海量数据训练的人体3D先验。不仅仅是人体&#xff0c;包括手部&#xff0c…

【Windows应急响应】HW蓝队必备——开机启动项、临时文件、进程排查、计划任务排查、注册表排查、恶意进程查杀、隐藏账户、webshell查杀等

Windows应急响应应急响应的重要性开机启动项temp文件分析浏览器信息分析文件时间属性分析最近打开文件分析进程分析计划任务隐藏账户的发现添加与删除恶意进程发现及关闭补丁信息webshell查杀应急响应的重要性 近年来信息安全事件频发&#xff0c;信息安全的技能、人才需求大增…

linux + jenkins + svn + maven + node 搭建及部署springboot多模块前后端服务

linux搭建jenkins 基础准备 linux配置jdk、maven&#xff0c;配置系统配置文件 vi /etc/profile配置jdk、maven export JAVA_HOME/usr/java/jdk1.8.0_261-amd64 export CLASSPATH.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport MAVEN_H…

【深入浅出 Yarn 架构与实现】4-6 RM 行为探究 - 申请与分配 Container

本小节介绍应用程序的 ApplicationMaster 在 NodeManager 成功启动并向 ResourceManager 注册后&#xff0c;向 ResourceManager 请求资源&#xff08;Container&#xff09;到获取到资源的整个过程&#xff0c;以及 ResourceManager 内部涉及的主要工作流程。 一、整体流程 …

吴恩达机器学习笔记——线性回归

1.模型描述有训练集数据房子面积和卖出的价钱&#xff0c;我们用这组数据来模拟特定面积的房子能够卖出的价钱。这是一个很明显的监督学习&#xff08;supervised learning&#xff09;的例子&#xff0c;因为我们的训练集里包含了正确的结果&#xff08;即房子的卖价&#xff…

非递归迭代实现二叉树前序,中序,后序遍历

文章目录1. 前序遍历2. 中序遍历3. 后序遍历1. 前序遍历 题目链接 解题思路&#xff1a; 非递归遍历一棵树有两点&#xff1a; 1.左路结点 2.左路结点的右子树 什么意思呢&#xff1f; 我们知道前序遍历是按照根&#xff0c;左子树&#xff0c;右子树来的。所以它是先根&…

js中的原型链

js中原型和原型链&#x1f61a; 1、为什么需要原型链&#xff1f;&#x1f923;&#x1f61a; 凡事都是有一定的需求和原因发展起来的&#xff0c;在ECMA中为什么要提出原型链这个概念呢&#xff1f; 我们知道&#xff0c;创建对象有两种方式。一种是通过字面量来创建&#…

科研 | 论文写作 | 最常用的LaTeX语法

最常用的LaTeX语法1. 行内公式2. 行间公式3. 下标4. 上标5. 公式编号6. 数学公式7. 根号和分式8. 上下标记9. 向量10. 积分、极限、求和、乘积11. 三圆点12. 重音符号13. 矩阵14. 小写希腊字母和大写希腊字母15. 公式组合16. 拆分单个公式1. 行内公式 格式&#xff1a;将公式编…

流计算框架storm概览

Attention: supervison 和 nimbus的状态都实时保存在zookeeper集群中和本地. Enchance, this means you can kill -9 Nimbus or the Supervisors and theyll start back up as nothing happened. Topologies 1. storm jar all-my-code.jar org.apache.storm.MyTopology a…

父类子类静态代码块、构造代码块、构造方法执行顺序

github:https://github.com/nocoders/java-everything.git 名词解释 静态代码块&#xff1a;java中使用static关键字修饰的代码块&#xff0c;每个代码块只会执行一次&#xff0c;JVM加载类时会执行静态代码块中的代码&#xff0c;静态代码块先于主方法执行。构造代码块&#…