SQL 8 不从实体表中取的数据

有的时候我们需要查询一些不能从人哦实体表中取得的数据,比如将数字1作为结果集,或者计算字符串"abc"的长度。

有的开发人员尝试使用下面的SQL语句来完成类似的功能:

SELECT 1 FROM T_Employee

可是执行以后却得到了下面的执行结果集:

+---+
| 1 |
+---+
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
+---+

 

结果集中出现了不知一个1,这是因为通过这种方式得到的结果集数量上取决于T_Employee表中的数据条目数的,此时必须借助于DISTINC关键字来将结果集条数限定为一条,SQL语句如下:

SELECT DISTINCT 1 FROM T_Employee

执行完毕我们就能看到下面的执行结果:

+---+
| 1 |
+---+
| 1 |
+---+

这种实现方式非常麻烦,而且如果数据库中一张表都没有的时候这样做就不奏效了。主流数据库系统为这种需求提供了比较好的支持,这一节我们就来讲讲。

MySQL和MS SQL Server允许使用不带FROM 子句的SELECT语句来查询这些不属于任何实体表的数据,比如下面的SQL语句将1作为结果集:

SELECT 1

 

执行完毕我们就能看到下面的执行结果:

+---+
| 1 |
+---+
| 1 |
+---+

还可以在不带FROM子句的SELECT语句中使用函数,比如下面的SQL语句将字符串'abc'的长度作为结果集。

SELECT LENGTH('abc')

还可以在SELECT语句中同时计算多个表达式,比如下面的SQL语句将1、2、3、'a'、'b'、'c'作为结果集:

SELECT 1,2,3,'a','b','c'


Oracle 中不允许使用这种不带FROM子句的SELECT 语句,不过我们可以使用Oracle的系统表来作为FROM子句的表明,系统表示Oracle内置的特殊表,最长将的表为DUAL。比如下面的SQL语句将1及字符串'abc'的长度作为结果集:

SELECT 1, LENGTH('abc') FROM DUAL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值