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

发布时间:2023年12月28日

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

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

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

SQL功能MySQLOracleSQL ServerPostgreSQLSQLite
比较运算符??????????
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|张飞 

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

文章来源:https://blog.csdn.net/horses/article/details/135271397
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。