【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;

在这里插入图片描述

相关推荐

  1. MySQL数据库基础二)

    2024-06-11 05:20:03       16 阅读
  2. MySQL数据库基础-SQL

    2024-06-11 05:20:03       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-11 05:20:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-11 05:20:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-11 05:20:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-11 05:20:03       20 阅读

热门阅读

  1. springboot事件发布机制之生产运用

    2024-06-11 05:20:03       10 阅读
  2. C++ C_style string overview and basic Input funcitons

    2024-06-11 05:20:03       6 阅读
  3. Helm在线部署Longhorn(1.6.0版本)分布式存储

    2024-06-11 05:20:03       10 阅读
  4. 常用API

    常用API

    2024-06-11 05:20:03      12 阅读
  5. Python图库入门:从基础到进阶的全面解析

    2024-06-11 05:20:03       12 阅读
  6. Ubuntu24.04记录网易邮箱大师的安装

    2024-06-11 05:20:03       10 阅读