ITPub博客

首页 > 数据库 > 数据库开发技术 > 主流数据库:实现数据过滤

主流数据库:实现数据过滤

原创 数据库开发技术 作者:BUAA_dxy 时间:2023-12-28 21:00:00 0 删除 编辑

在实际应用中,我们通常无须返回表中的全部数据,大多数情况下只需检索满足特定条件的记录。例如,查找某个部门中的员工或者当前用户未完成的订单。

本文比较五种主流数据库数据过滤功能的实现和差异,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

🏷️示例表和数据初始化脚本下载。

SQL功能 MySQL Oracle SQL Server PostgreSQL SQLite
比较运算符 ✔️ ✔️ ✔️ ✔️ ✔️
BETWEEN ✔️ ✔️ ✔️ ✔️ ✔️
IN ✔️ ✔️ ✔️ ✔️ ✔️

在 SQL 语句中,我们可以使用关键字 WHERE 指定数据的过滤条件。例如,以下语句查找姓名为“刘备”的员工信息:

SELECT emp_name, sex, hire_date, salary
FROM employee
WHERE emp_name = '刘备';

其中,WHERE 子句位于 FROM 子句之后,用于指定一个或者多个过滤条件。只有满足条件的数据才会返回,其他数据将被忽略。该语句返回的结果如下:

emp_name|sex|hire_date |salary 
--------|---|----------|--------
刘备 |男 |2000-01-01|30000.00

对于 Oracle 而言,DATE 数据类型中不仅包含了日期信息,也包含时间信息,因此以上查询返回的入职日期为“2000-01-01 00:00:00”,而不是“2000-01-01”。

🏷️通过查询条件过滤数据的操作在关系运算中被称为选择(Selection)。选择操作是针对表进行的水平过滤,保留满足条件的记录生成新的关系表。

WHERE 子句中的查询条件也被称为谓词(Predicate)。谓词运算的结果可能为真(True)、假(False)或者未知(Unknown)。当谓词运算的结果为真时表示数据满足查询条件,返回相应的数据;否则表示数据不满足查询条件,不返回相应的数据。

比较运算符

最常见的查询条件就是比较运算符,比较运算符可以比较两个数据的大小,包括字符、数字以及日期类型数据的比较。表 2.1 列出了 SQL 中的各种比较运算符。

运算符 描述 示例
= 等于 emp_id = 1
!=或者<> 不等于 sex != ‘男’
> 大于 salary > 10000
>= 大于或等于 hire_date >= DATE ‘2018-01-01’
< 小于 bonus < 5000
<= 小于或等于 dept_id <= 2
BETWEEN 位于指定范围之内 salary BETWEEN 10000 AND 15000
IN 属于指定列表之中 emp_name IN (‘刘备’, ‘关羽’, ‘张飞’)

MySQL 中的 <=> 表示等于;Oracle中 的 ^= 表示不等于;SQL Server 中的 !< 和 !> 分别表示大于或等于、小于或等于;PostgreSQL 中的 IS [NOT] DISTINCT FROM 分别表示不等于和等于。

我们来看一个日期数据的比较运算,以下语句查找 2018 年 1 月 1 日之后入职的员工:

-- Oracle、MySQL 以及 PostgreSQL
SELECT emp_name, hire_date
FROM employee
WHERE hire_date >= DATE '2018-01-01';

查询条件中的 DATE ‘2018-01-01’ 定义了一个日期常量值。如果使用 Microsoft SQL Server 或者 SQLite,指定日期常量时可以直接使用字符串字面值:

-- Microsoft SQL Server、SQLite、MySQL 以及 PostgreSQL
SELECT emp_name, hire_date
FROM employee
WHERE hire_date >= '2018-01-01';

查询返回的结果如下:

emp_name|hire_date 
--------|----------
蒋琬 |2018-01-28
黄权 |2018-03-14
糜竺 |2018-03-27
邓芝 |2018-11-11
简雍 |2019-05-11
孙乾 |2018-10-09

BETWEEN 运算符

BETWEEN 运算符用于查找指定范围之内的数据。例如,以下语句查找月薪位于 10 000 元到 15 000 元之间的员工:

SELECT emp_name, salary
FROM employee
WHERE salary BETWEEN 10000 AND 15000;

查询返回的结果如下:

emp_name|salary 
--------|--------
孙尚香 |12000.00
赵云 |15000.00
法正 |10000.00

从查询结果中可以看出,BETWEEN 运算符包含了两端的值(10 000 和 15 000)。

IN 运算符

IN 运算符用于查找指定列表中的数据。例如,以下语句查找姓名为“刘备”、“关羽”或者“张飞”的员工:

SELECT emp_id, emp_name
FROM employee
WHERE emp_name IN ('刘备', '关羽', '张飞');

查询返回的结果如下:

emp_id|emp_name
------|--------
2|关羽
1|刘备
3|张飞

员工的姓名只要等于列表中的任何一个值都会返回对应的结果。

原文作者:SQL编程思想;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
《SQL编程思想》作者,专注于数据库领域知识的分享。

注册时间:2021-08-26

  • 博文量
    443
  • 访问量
    546892