[笔记]流行数据库SQL差异分析之“不从实体表中取得数据”
不从实体表中取得数据
有的时候我们需要查询一些不能从任何实体表中能够取得的数据,比如将数字1作为结果集或者计算字符串“abc”的长度。
解决方案1:
SELECT 1 FROM T_Employee //但是会出现多条1,根据数据表记录。
SELECT DISTINCT 1 FROM T_Employee //可以只出现1条,但不完美。
MYSQL和MSSQLServer允许使用不带FROM子句的SELECT语句来查询这些不属于任何实体表的数据:
SELECT 1
还可以在不带FROM子句的SELECT语句中使用函数,比如下面的SQL将字符串“abc”的长度作为结果集:
SELECT LENGTH('abc') //MYSQL,结果为3。
SELECT LEN('abc') //MSSQLServer
还可以在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
在DB2中也同样不支持不带FROM子句的SELECT语句,它也是采用和Oracle类似的系统表,最常用的系统表为SYSIBM.SYSDUMMY1。比如下面的SQL将1以及字符串’abc‘的长度作为结果
集:
SELECT 1, LENGTH('abc') FROM SYSIBM.SYSDUMMY1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架