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):
DUALis 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
DUALtable has one column calledDUMMYand one row containing the valueX.
DUAL是一个在数据字典里的很小的表,Oracle数据库和用户写的程序可以引用它来保证一个已知的结果。当一个值(比如当前date和time)有且仅需返回一次的时候,这个dual表还是很管用的。所有数据库用户都可以访问DUAL。
DUAL表有一列,名叫DUMMY和有一行,值为X。
DUALis a table automatically created by Oracle Database along with the data dictionary.DUALis in the schema of the userSYSbut is accessible by the nameDUALto all users. It has one column, DUMMY, defined to be VARCHAR2(1), and contains one row with a value X.
Selecting from the
DUALtable is useful for computing a constant expression with theSELECTstatement. BecauseDUALhas 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
SELECTcan 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
DUALas a dummy table name in situations where no tables are referenced:
在没有引用表的情况下,你可以指定DUAL为一个虚拟表名。
mysql> SELECT 1 + 1 FROM DUAL;
-> 2
DUALis purely for the convenience of people who require that allSELECTstatements should haveFROMand possibly other clauses. MySQL may ignore the clauses. MySQL does not requireFROM DUALif 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- ...
随机推荐
- [转载]IIS6.0开启WOFF/SVG文件支持
http://www.bao21.com/120.html http://stackoverflow.com/questions/18369036/bootstrap-3-glyphicons-not ...
- LintCode 387: Smallest Difference
LintCode 387: Smallest Difference 题目描述 给定两个整数数组(第一个是数组A,第二个是数组B),在数组A中取A[i],数组B中取B[j],A[i]和B[j]两者的差越 ...
- 自然语言处理词向量模型-word2vec
自然语言处理与深度学习: 语言模型: N-gram模型: N-Gram模型:在自然语言里有一个模型叫做n-gram,表示文字或语言中的n个连续的单词组成序列.在进行自然语言分析时,使用n-gram或者 ...
- 洛谷 P3307: bzoj 3202: [SDOI2013] 项链
题目传送门:洛谷P3307.这题在bzoj上是权限题. 题意简述: 这题分为两个部分: ① 有一些珠子,每个珠子可以看成一个无序三元组.三元组要满足三个数都在$1$到$m$之间,并且三个数互质,两个珠 ...
- PE结构详解
1 基本概念 下表描述了贯穿于本文中的一些概念: 名称 描述 地址 是“虚拟地址”而不是“物理地址”.为什么不是“物理地址”呢?因为数据在内存的位置经常在变,这样可以节省内存开支.避开错误的内存位置等 ...
- 公司内网yum源
新增yum源配置文件 vi /etc/yum.repos.d/szyum.repo 内容如下: #[redhat6.3] [base] name=redhat63 baseurl=http://10. ...
- python 元组分组并排序
# -*- coding: utf-8 -*- # @Time : 2018/8/31 14:32 # @Author : cxa # @File : glomtest.py # @Software: ...
- linux安装python3(已有python2.x情况下)
参考:https://www.cnblogs.com/Guido-admirers/p/6259410.html 1.官网下载python3 cd /home/download wget https: ...
- linux定时任务-cron
/sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 ...
- No.20 selenium学习之路之文件读写
1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.tx ...