MySQL必知必会——第六章过滤数据

2023-11-11

过滤数据

本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件。

使用WHERE子句

数据库一般包含大量的数据,很少需要检索表中所有的行。通常只会根据需求来提取部分表数据。只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。

在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE关键字位于FROM关键字后。

mysql> SELECT prod_name, prod_price
    -> FROM products
    -> WHERE prod_price = 2.50;
+---------------+------------+
| prod_name     | prod_price |
+---------------+------------+
| Carrots       |       2.50 |
| TNT (1 stick) |       2.50 |
+---------------+------------+
2 rows in set (0.01 sec)

这条语句从products表中检索两个列,但不返回所有行,只返回prod_price值为2.50的行。

  • SQL过滤与应用过滤 数据也可以在应用层过滤。让数据库返回大量原始数据,然后在客户机进行遍历检索。但这将会极大影响客户机性能,并且客户机应用将缺乏可伸缩性,再者多余数据导致网络宽带的浪费。
  • WHERE子句的位置 在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE后,否则会产生错误(ORDER BY的使用:MySQL必知必会——第五章排序检索数据)。

WHERE子句操作符

MySQL支持的条件操作符:

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

检查单个值

检索文本值:

mysql> SELECT prod_name, prod_price
    -> FROM products
    -> WHERE prod_name = 'fuses';
+-----------+------------+
| prod_name | prod_price |
+-----------+------------+
| Fuses     |       3.42 |
+-----------+------------+
1 row in set (0.00 sec)

WHERE prod_name = 'fuses’语句,它返回prod_name的值为Fuses的一行。

列出价格小于10的所有产品:

mysql> SELECT prod_name, prod_price
    -> FROM products
    -> WHERE prod_price < 10;
+---------------+------------+
| prod_name     | prod_price |
+---------------+------------+
| .5 ton anvil  |       5.99 |
| 1 ton anvil   |       9.99 |
| Carrots       |       2.50 |
| Fuses         |       3.42 |
| Oil can       |       8.99 |
| Sling         |       4.49 |
| TNT (1 stick) |       2.50 |
+---------------+------------+
7 rows in set (0.00 sec)

列出价格小于等于10的所有产品:

mysql> SELECT prod_name, prod_price
    -> FROM products
    -> WHERE prod_price <= 10;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| .5 ton anvil   |       5.99 |
| 1 ton anvil    |       9.99 |
| Bird seed      |      10.00 |
| Carrots        |       2.50 |
| Fuses          |       3.42 |
| Oil can        |       8.99 |
| Sling          |       4.49 |
| TNT (1 stick)  |       2.50 |
| TNT (5 sticks) |      10.00 |
+----------------+------------+
9 rows in set (0.00 sec)

不匹配检查

列出不是由供应商1003制造的所有产品:

mysql> SELECT vend_id, prod_name
    -> FROM products
    -> WHERE vend_id <> 1003;
+---------+--------------+
| vend_id | prod_name    |
+---------+--------------+
|    1001 | .5 ton anvil |
|    1001 | 1 ton anvil  |
|    1001 | 2 ton anvil  |
|    1002 | Fuses        |
|    1002 | Oil can      |
|    1005 | JetPack 1000 |
|    1005 | JetPack 2000 |
+---------+--------------+
7 rows in set (0.01 sec)

这里的 <> 可以替换成 !=

  • 何时使用引号 观察上述例子,会看到有些过滤条件的值括在单引号内(如,‘fuses’)。这里单引号是用来限定字符串的。在MySQL中,将值与字符串类型的列进行比较需要限定引号。而与数值列进行比较的值不用引号。

范围值检查

为了检查某个范围的值,可以使用BETWEEN操作符。其语法与其他操作符略有不同,它需要两个值,范围的开始值与结束值。

检索价格在5和10之间的产品:

mysql> SELECT prod_name, prod_price
    -> FROM products
    -> WHERE prod_price BETWEEN 5 AND 10;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| .5 ton anvil   |       5.99 |
| 1 ton anvil    |       9.99 |
| Bird seed      |      10.00 |
| Oil can        |       8.99 |
| TNT (5 sticks) |      10.00 |
+----------------+------------+
5 rows in set (0.00 sec)

使用BETWEEN时,必须指定它的开始值与结束值。这两个值必须用AND关键字分隔。数据过滤时,开始值与结束值也包括在结果内。

空值检查

在创建表时,可以指定其中的列是否可以不包含值。一个列不包含值时,称其为包含空值NULL。

NULL 无值(no value),它与字段包含0、空字符或仅仅包含空格不同。

SELECT语句有一个特殊的WHERE子句,IS NULL子句,用来检查具有NULL值的列。

mysql> SELECT prod_name
    -> FROM products
    -> WHERE prod_price IS NULL;
Empty set (0.00 sec)

当要检索的列没有无值的行时,不返回数据。

mysql> SELECT cust_id
    -> FROM customers
    -> WHERE cust_email IS NULL;
+---------+
| cust_id |
+---------+
|   10002 |
|   10005 |
+---------+
2 rows in set (0.01 sec)

这条语句显示没有填写邮箱的顾客。

  • NULL与不匹配 在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但未知具有特殊的含义,数据库不知道它们是否匹配,所有过滤时不会返回具有NULL值的行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL必知必会——第六章过滤数据 的相关文章

  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • mysql-如何向列申请补助?

    用户名 撤销对数据库的选择 Person I set GRANT SELECT id ON database Person TO username localhost 不是工作 gt SELECT secret FROM Person Go
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • Oracle:使用SQL或PL/SQL查找动态SQL中的错误位置

    如何在 PL SQL 或 SQL 中找到动态 SQL 语句中的错误位置 从 SQL Plus 中 我看到了错误的位置 例如 无效的 SQL DML 语句 SYS orcl gt SELECT 2 X 3 FROM 4 TABLEX 5 TA
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教

随机推荐

  • Ubuntu下文件权限管理

    参考 Ubuntu Linux 下文件权限管理 作者 莘莘 发布时间 2021 07 12 17 09 48 网址 https blog csdn net lcx1837 article details 118676383 spm 1001
  • GetLastError()返回值列表

    GetLastError 返回值列表 0 操作成功完成 1 功能错误 2 系统找不到指定的文件 3 系统找不到指定的路径 4 系统无法打开文件 5 拒绝访问 6 句柄无效 7 存储控制块被损坏 8 存储空间不足 无法处理此命令 9 存储控制
  • Debian小技巧1--常用软件服务配置方法

    Debian小技巧1 常用软件服务配置方法 最近 由于需要开始使用debian系统了 在使用过程会碰见一些经典的配置和操作方法 因此和往常一样记录下自己操作过程 后续将持续更新 优化 一方面以便于自己查阅 另一方面分享给有需要的人学习 1
  • 西门子触摸屏vb脚本从入门到精通_如何使用西门子触摸屏做一个弹窗?

    上篇文章我们讲到 西门子触摸屏变量的三种更新方式 根据命令 循环连续 循环使用 默认 这篇我们将一个实际案例 现场有台设备想在执行开机过程时触摸自动跳到执行过程的画面 假如PLC有个执行开机的变量M0 0 当M0 0为1的时候 自动切换画面
  • vue 评论小案例

  • vqvae详细解释

    模型综述 VQ VAE Vector Quantised Variational AutoEncoder 首先出现在论 Neural Discrete Representation Learning VAE假设隐向量分布服从高斯分布 VQV
  • 一些开源的,好看的前端组件/样式库

    以下是一些受欢迎的开源 CSS 样式库 Bootstrap https getbootstrap com Materialize CSS https materializecss com Bulma https bulma io Found
  • linux下测试磁盘的读写IO速度

    使用dd命令 这不是一个专业的测试工具 不过如果对于测试结果的要求不是很苛刻的话 平时可以使用来对磁盘的读写速度作一个简单的评估 另外由于这是一个免费软件 基本上 NIX系统上都有安装 首先了解两个特殊设备 dev null 伪设备 回收站
  • 使用OpenCV-python对植物图片进行分类

    文章目录 图片分类的思路和需要加载的库函数说明 核心代码分析 数据预处理 文件处理和命名匹配 数据预处理 特征提取和标签提取 学习模型 数据划分和模型训练 预测输出 利用训练好的模型进行图片分类 完整代码附录和运行结果 图片分类的思路和需要
  • vmware无法打开内核设备 打开模块DevicePowerOn电源失败

    无法打开内核设备 VMCIDev VMX 重叠 I O 操作在进 行中 你想要在安装 VMware Workstation 前重启吗 打开模块DevicePowerOn电源失败 启动VM时报错如上 解决方法一 亲测可行 对虚拟机相对应的 v
  • 使用GetProcAddress获取C++重载函数

    GetProcAddress函数是用来在动态加载完动态链接库后 从链接库中获取函数地址的 它的用法如下 FARPROC GetProcAddress HMODULE hModule LPCSTR lpProcName hModule参数就是
  • Spring三级缓存详解

    Spring三级缓存是为了解决对象间的循环依赖问题 A依赖B B依赖A 这就是一个简单的循环依赖 我们来先看看三级缓存的源码 1 查看 获取Bean 的源码 注意getSingleton 方法 public class DefaultSin
  • PLSQL Developer安装和配置

    PLSQL Developer安装 下载安装地址 https www allroundautomations com registered plsqldev 1 自己选择合适版本 2 接下来默认安装即可 3 本地连接直接输入 4 远程连接需
  • Canvas 画布随机变换背景色

  • JavaScript获取当前时间函数封装

    JavaScript获取当前时间函数封装 function getNowDate var str var weekList 日 一 二 三 四 五 六 var date new Date var year date getFullYear
  • Labelme标注灰度图,执行出现错误:AssertionError: rgb must be 3 dimensional的解决方案

    labelme标注灰度图后 执行json to dataset之后 出现错误 AssertionError rgb must be 3 dimensional 解决办法 找到安装labelme的位置 找到json to dataset py
  • 二等分计算机打印机尺寸,电脑打印纸三种等分是什么尺寸

    满意答案 kimwk 2015 11 10 采纳率 55 等级 8 已帮助 6710人 打印纸一般规格有宽度为241mm的和381mm的 三等分就是341 381 3 而长边这边尺寸也是固定的 是280mm 一般长边长度可以分等分 有不分等
  • Movidius神经计算棒3-完整配置开发环境

    上面是我的微信和QQ群 欢迎新朋友的加入 cd ncsdk make install 这里有个题外话 英特尔这个玩意搞得不太友好 很多软件都有版本限制 高了或或者低了都要不得 这倒也没啥事 但是有个受影响的是 官方提供的make insta
  • 【Linux】系统下各个文件目录的作用

    目录名 作用 bin 普通用户的可执行文件 二进制 boot linux内核和系统启动文件 dev 设备文件 etc 系统配置文件 home 用户主目录 initrd 启动时挂在initrdimg映像文件 lib 共享库文件 lost fo
  • MySQL必知必会——第六章过滤数据

    过滤数据 本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件 使用WHERE子句 数据库一般包含大量的数据 很少需要检索表中所有的行 通常只会根据需求来提取部分表数据 只检索所需数据需要指定搜索条件 search criteri