五种主流数据库:基本检索功能

SQL 使用 SELECT 语句查询数据,本文比较五种主流数据库基本数据检索功能的实现和差异,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

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

SQL功能 MySQL Oracle SQL Server PostgreSQL SQLite
查询指定字段 ✔️ ✔️ ✔️ ✔️ ✔️
查询全部字段 ✔️ ✔️ ✔️ ✔️ ✔️
无表查询 ✔️ ✔️* ✔️ ✔️ ✔️

备注:Oracle 23c 开始支持无表查询语句。

查询指定字段

员工表(employee)中存储了关于员工的信息。假设我们现在打算群发邮件,需要找出所有员工的姓名、性别和电子邮箱地址。这个功能可以通过一个简单的查询语句来实现:

SELECT emp_name, sex, email
FROM employee;

其中 SELECT 是 SQL 中的关键字,表示查询数据;FROM 也是关键字,表示要从哪个表中进行查询;emp_name、sex 和 email 表示需要返回的字段,多个字段使用逗号分隔;分号表示 SQL 语句的结束。查询返回的结果如下:

emp_name|sex|email 
--------|---|------------------------
刘备     ||liubei@shuguo.com 
关羽     ||guanyu@shuguo.com 
张飞     ||zhangfei@shuguo.com 
...

以上语法在五种数据库中实现相同。

⚠️注意:SQL 语句由不同的子句组成部分,SELECT、FROM 和 WHERE 等关键字都是子句。编写 SQL 语句时,关键字不分区大小写,一般使用大写形式。表名、列名等标识符一般也不区分大小写,通常使用小写形式;但是 MySQL 在 Linux 环境下的数据库名、表名、变量名等区分大小写。

查询全部字段

一个特殊的查询操作就是查询表的全部字段。SQL 为此提供了一个简单写法,就是使用星号(*)表示全部字段。例如,以下语句查询职位信息表中的全部字段:

SELECT *
FROM job;

数据库服务器在解析该语句时,会基于表的字段定义将其扩展为如下形式:

SELECT job_id, job_title, min_salary, max_salary
FROM job;

查询返回的结果如下:

job_id|job_title |min_salary|max_salary
------|----------|----------|----------
     1|总经理     |  24000.00| 50000.00
     2|副总经理   |  20000.00| 30000.00
     3|人力资源总监|  20000.00| 30000.00
...

使用星号无法指定字段出现的顺序,由数据库按照表定义时的顺序返回结果。

以上语法在五种数据库中实现相同。

⚠️注意:虽然使用星号可以快速编写查询语句,但是在实际项目中不推荐使用这种写法。因为应用程序可能并不需要全部字段,星号会返回无用的字段;另外,当表结构发生变化时,星号返回的信息也会发生改。

无表查询

通常来说查询操作的对象是表,但是为了执行简单的计算和快速信息检索,许多数据库管理系统都实现了一种不需要表的查询语句,例如:

SELECT 1+1;

以上查询语句中只有 SELECT 子句,没有 FROM 子句。这种语法并不属于 SQL 标准,而是数据库管理系统的扩展功能。查询返回了一个算术表达式的值:

1+1
---
 2

五种数据库都支持这种语法。其中 Oracle 23c 才开始支持,在之前的 Oracle 版本中,我们可以使用以下等价的查询语句:

SELECT 1+1 
FROM dual;

其中,dual 是 Oracle 数据库中的一个特殊的表,它只有一个字段并且只包含一行数据。另外,MySQL 也提供了 dual 表。

你可能感兴趣的:(数据库,数据库,sql,mysql,oracle,sqlserver,postgresql,sqlite)