当前位置: 首页 > news >正文

【MySQL】(基础篇六) —— 过滤数据

过滤数据

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

WHERE子句

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

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

【示例】找出employees表中员工id为100的员工的所有信息

SELECT *
FROM `employees`
WHERE employee_id = 100;

运行结果:
在这里插入图片描述

MySQL在执行匹配时默认不区分大小写。

在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误,后面还会学习其它的子句,在全部学完之后,我会总结一下每个子句的先后顺序。

WHERE子句操作符

上面例子中,我们使用等号对条件进行相等比较,where子句还为我们提供了其它的操作符,让我们能够更加灵活地操作筛选的条件。下表给出这些操作符以及对应的含义

操作符说明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
BETWEEN A AND B在 A 和 B 之间

【示例】找出employees表中部门id(department_id)小于等于40的所有员工数据

SELECT *
FROM `employees`
WHERE department_id <= 40;

运行结果:

在这里插入图片描述

【示例】找出employees表中job_id不是ST_CLERK的所有员工数据

SELECT *
FROM `employees`
WHERE job_id != 'st_clerk';

如果匹配的是字符串类型,则需要加引号,单引号和双引号都可以

<>!= 都可以表示‘不等于’,我更习惯使用!= ,因为在其他的一些语言中(Java,python)中,它也表示不等于。

【示例】找出employees表中员工id在100和110之间的员工的所有信息

SELECT *
FROM `employees`
WHERE employee_id BETWEEN 100 AND 110;

运行结果:

在这里插入图片描述

空值检查

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

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

SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。其用法如下:

【示例】查询employees表中manager_id 为 NULL的条目信息

SELECT *
FROM `employees`
WHERE manager_id IS NULL;

运行结果:
在这里插入图片描述

IS NOT NULL则可以实现相反的效果,NOT操作符的具体含义,我会在下面讲解

组合子句

为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。

AND操作符

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

【示例】查找employees表中first_name为David且last_name为Austin的条目信息

SELECT *
FROM `employees`
WHERE first_name = 'david' AND last_name = 'austin';

运行结果:

在这里插入图片描述

OR操作符

OR操作符指示MySQL检索匹配任一条件的行。

【示例】查找employees表中first_name为David或first_name为John的条目信息

SELECT *
FROM `employees`
WHERE first_name = 'david' OR first_name = 'john';

运行结果:

在这里插入图片描述

计算次序

WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂和高级的过滤。但是,组合AND和OR带来了一个的问题。SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。换句话说,由于AND在计算次序中优先级更高,写多个操作符的话可能会被错误地组合了。

此问题的解决方法是使用圆括号明确地分组相应的操作符。

【示例】查找employees表中first_name为David或John,且salary大于9000的条目信息

SELECT *
FROM `employees`
WHERE (first_name = 'david' OR first_name = 'john') AND salary > 9000;

运行结果:

在这里插入图片描述

IN操作符

圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。

【示例】查找employees表中salary为2200,2400和3300的条目信息

SELECT *
FROM `employees`
WHERE salary IN (2200,2400,3300);

运行结果;

在这里插入图片描述

IN操作符和OR连接多个子句的功能类似,但选择使用它的优点如下:

  • 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
  • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
  • IN操作符一般比OR操作符清单执行更快。
  • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。后续文章将对此进行详细介绍。

NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。

【示例】查找employees表中commission_pct字段不为空的条目信息

SELECT *
FROM `employees`
WHERE commission_pct IS NOT NULL;

在这里插入图片描述

http://www.lryc.cn/news/369365.html

相关文章:

  • 利用 HTML5 Canvas 实现在线签字功能
  • GaussDB技术解读——GaussDB架构介绍(二)
  • EfficientNet详解
  • UI前端交互的艺术:探索设计的四个维度、五个层面、六个要点与七大原则
  • java接口设计需要考虑哪些方面
  • Opencv图像处理
  • LeetCode | 2879.显示前三行
  • Qt实现简易播放器
  • 适配Android12启动页
  • 人工智能在医学领域的应用及技术实现
  • MySQL—多表查询—练习(1)
  • 千益畅行:合法合规的旅游卡服务,打破误解
  • 【Echarts系列】水平柱状图
  • 怎样把便签里的内容移到桌面?桌面便签软件使用方法
  • 量化入门:qmt获取可转债基本信息和行情数据
  • AVL树 ---(C++)
  • 基于spring boot+MySQL 小区物业管理系统-计算机毕设 附源码37236
  • Linux/Ubuntu/Debian常用服务管理命令
  • Maven的三种项目打包方式——pom,jar,war的区别
  • [手游] 三色绘恋S Mobile Link
  • nss刷题(4)
  • iOS调整collectionViewCell顺序
  • 【回调函数】
  • 找树左下角的值-力扣
  • 【AI应用探讨】— Gemma2模型应用场景
  • 树二叉树
  • 无源晶振振荡电路失效问题分析与解决策略
  • LIMS系统在汽车第三方检测实验室的应用
  • positivessl泛域名https证书
  • MySQL bin-log日志恢复数据