select 1 from dual
begin 2018年7月14日15:06:29
select 1 from dual
Oracle下的select 1 from dual
今天在看公司代码的时候,发现有这一句SQL:
select 1 from dual
然后觉得有点奇怪,数据库里面都没有创建这个dual表,这个表是从何而来呢?然后Google了一波,理解了一下。
首先,公司用的是Oracle数据库,关于Oracle数据库中的dual表,官方文档说明(The DUAL Table):
DUAL
is a small table in the data dictionary that Oracle Database and user-written programs can reference to guarantee a known result. The dual table is useful when a value must be returned only once, for example, the current date and time. All database users have access toDUAL
.
The
DUAL
table has one column calledDUMMY
and one row containing the valueX
.
DUAL
是一个在数据字典里的很小的表,Oracle数据库和用户写的程序可以引用它来保证一个已知的结果。当一个值(比如当前date和time)有且仅需返回一次的时候,这个dual表还是很管用的。所有数据库用户都可以访问DUAL
。
DUAL
表有一列,名叫DUMMY
和有一行,值为X
。
DUAL
is a table automatically created by Oracle Database along with the data dictionary.DUAL
is in the schema of the userSYS
but is accessible by the nameDUAL
to all users. It has one column, DUMMY, defined to be VARCHAR2(1), and contains one row with a value X.
Selecting from the
DUAL
table is useful for computing a constant expression with theSELECT
statement. BecauseDUAL
has only one row, the constant is returned only once. Alternatively, you can select a constant, pseudocolumn, or expression from any table, but the value will be returned as many times as there are rows in the table.
DUAL
是一个随着Oracle数据库创建数据字典时自动创建的表。虽然DUAL
在用户SYS
模式下,但是还是可以被所有用户访问的。它有一列,DUMMY
,定义为VARCHAR2(1)
,和包含一行数据,值为X
。
对于用SELECT
计算一个常量表达式来说,从DUAL
选择是比较好用的。因为DUAL
只有一行,所以常量只会返回一次。或者,你可以从任意一个表中选择常量、伪列和表达式,但是这个值将返回多次,次数和表的行数一样多。
我们可以在Oracle数据库查询:
SQL> select * from dual;
DUMMY
-----
X
好的,现在我们知道了dual这个表是长什么样了,也知道为什么会用这个表了。划重点:当一个值必须返回,且只返回一次,可以从dual表选择返回。
我看了一下项目代码,这句SQL是传给数据库连接池验证连接的,这样就很合理了:不需要返回太多的值,但是有必须有返回,选择从dual返回再正确不过了。
MySQL下的select 1 from dual
SELECT
can also be used to retrieve rows computed without reference to any table.
SELECT
也可以在没有引用任何表,用来检索行。
For example:
比如:
mysql> SELECT 1 + 1;
-> 2
You are permitted to specify
DUAL
as a dummy table name in situations where no tables are referenced:
在没有引用表的情况下,你可以指定DUAL
为一个虚拟表名。
mysql> SELECT 1 + 1 FROM DUAL;
-> 2
DUAL
is purely for the convenience of people who require that allSELECT
statements should haveFROM
and possibly other clauses. MySQL may ignore the clauses. MySQL does not requireFROM DUAL
if no tables are referenced.
DUAL
单纯是为那些要求所有SELECT
语句应该有FROM
或者其他子句的人们提供便利。MySQL可能忽略这个子句。即使没有表引用,MySQL也不要求FROM DUAL
。
在MySQL中使用dual表并不总是对的:
mysql> select 1 from dual;
3013 - Unknown table ****.dual
其实MySQL就直接SELECT
就行。
end 2018年7月14日17:36:24
select 1 from dual的更多相关文章
- select 1 from dual 中的1表示的含义
select 1 from dual 在这条sql语句中的1代表什么意思?查出来是个什么结果? 其实: select 1 from table; select anycol(目的表集合中的任意 ...
- Oacle 插入多条记录的语法理解;INSERT ALL INTO ....... SELECT 1 FROM dual;
单表Insert into的语句就不说了,这里主要说插入多条语句的说明 For a multitable insert operation, each expression in the values ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- ORACLE的DUAL表及DB2的SYSIBM.SYSDUMMY1
在ORACLE中,数据库用户通过访问DUAL表获取一些系统信息:DB2中,相应的表为SYSIBM.SYSDUMMY1表 ORACE中举例: SELECT SYSDATE FROM DUAL;获取当前日 ...
- oracle中dual的使用
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下:1.查看当前用户,可以在 SQL Plus中执行下面语句select ...
- ORACLE中伪表 dual 的用法
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 sel ...
- oracle 中的dual表简介与用法
Dual表是每个数据库创建时默认生成的,该表仅有一列一行. 1)分析dual表执行,如下:
- 【转】详解Oracle的dual表
网址:http://www.adp-gmbh.ch/ora/misc/dual.html dual is a table which is created by oracle along with t ...
- oracle中dual表的使用
dual表是一个虚拟表,用来和select语句一起使用.1.查看当前用户select user from dual2.用来调用系统函数select to_char(sysdate,'yyyy-mm- ...
随机推荐
- 在传统的ADO.NET中使用事务
using (SqlConnection conn = new SqlConnection()) { SqlCommand cmd = conn.CreateCommand(); //启动事务 Sql ...
- 【文件上传】文件上传的form表单提交方式和ajax异步上传方式对比
一.html 表单代码 …… <input type="file" class="file_one" name="offenderExcelFi ...
- oracle05
1. 数据处理 说完了所有的查询,下面说说增.删.改. 1.1. Update 在plsql Developer工具中,加上rowid可以更改数据. 使用工具进行更新数据的操作 在工具中更新数据方式一 ...
- UNIX环境高级编程 第9章 进程关系
在第8章学习了进程的控制原语,通过各种进程原语可以对进程进行控制,包括新建进程.执行新程序.终止进程等.在使用fork( )产生新进程后,就出现了进程父子进程的概念,这是进程间的关系.本章更加详细地说 ...
- mysql处理旧数据-使用模板以及临时表,不建议直接使用本表!!
一 业务背景新版本中新建了一个项目的角色表,即每个项目都拥有几个角色,原来历史项目是没有角色的,这就要求使用脚本对表中的历史项目进行处理, 业务需求:每个项目都要有三个角色: 表 : pm_proje ...
- MIUI7,Android版本5.0.2,一个程序发送自定义广播,另一个程序没有接收到
对照<第一行代码——Android>进行学习,第五章中说到广播包的相关知识,前面获取广播等程序例程都可以跑的通,但是在5.3.2节中,程序A发送自定义广播,并接收自定义广播,同时程序B也接 ...
- java map遍历并删除特定值
删除map中包含password和username的键值对 若是在map中直接删除,会指针错误 Iterator<Map.Entry<String,Object>> it = ...
- https://www.yunpanjingling.com/
https://www.yunpanjingling.com/ 账号 kein20 passwd a1234
- openjudge-NOI 2.5基本算法之搜索 专题题解目录
1.1700 八皇后问题 2.1756 八皇后 3.1789 算24
- 列表CListCtrl类使用
CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem.每一行和每一列都有个ID号,可以确定唯一的单元格. 最近使用了这个控件,有心得总结如下: (Dialog ...