五种主流数据库:实现数据过滤
在实际应用中,我们通常无须返回表中的全部数据,大多数情况下只需检索满足特定条件的记录。例如,查找某个部门中的员工或者当前用户未完成的订单。
本文比较五种主流数据库数据过滤功能的实现和差异,包括 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|张飞
员工的姓名只要等于列表中的任何一个值都会返回对应的结果。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!