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

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

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

SQL功能MySQLOracleSQL ServerPostgreSQLSQLite
查询指定字段✔️✔️✔️✔️✔️
查询全部字段✔️✔️✔️✔️✔️
无表查询✔️✔️*✔️✔️✔️

备注: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 表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不剪发的Tony老师

为 5 个 C 币而折腰。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值