第一次接触dual表是在项目中看到别人写的,眼前一亮,又是发现新大陆的感觉,这样就有这篇博客诞生了。

自行百度一波,发现并不只有MySQL中有dual表。

一、Oracle中的dual表

ORACLE关于DUAL表不同寻常特性的解释:
There is internalized code that makes this happen. Code checks that ensure that a table scan of SYS.DUAL only returns one row. Svrmgrl behaviour is incorrect but this is now an obsolete product. The base issue you should always remember and keep is: DUAL table should always have 1 ROW. Dual is a normal table with one dummy column of varchar2(1). This is basically used from several applications as a pseudo table for getting results from a select statement that use functions like sysdate or other prebuilt or application functions. If DUAL has no rows at all some applications (that use DUAL) may fail with NO_DATA_FOUND exception. If DUAL has more than 1 row then applications (that use DUAL) may fail with TOO_MANY_ROWS exception. So DUAL should ALWAYS have 1 and only 1 row.

其实dual表主要就是Oracle在用,因为在Oracle中要满足select from 的结构。
  DUAL是Oracle与数据字典一起自动创建的一个表,它只有一列:DUMMY,其数据类型为:VARCHAR2(1)。DUAL中只有一行数据:‘X’。DUAL属于SYS模式,但所有用户都可以使用DUAL名称访问它。用SELECT计算常量表达式、伪列等值时常用该表,因为它只返回一行数据,而使用其它表时可能返回多个数据行。
  DUAL是一个Oracle内部表,不论我们做什么操作(不要删除记录)它都只有一条记录,上面插入了一条之后,他仍然只有1条记录,所以很多取系统时间,计算,等只要选择一条记录,而且记录内容与表内容无关的操作,我们都喜欢使用这个表。虚表(dual)是oracle提供的最小的工作表,它仅包含一行一列。对于虚表(dual)来说,其中的列往往是不相关的或无关紧要的。

实例:
(1)查看当前用户,可以在 SQL Plus中执行下面语句

select user from dual;

(2)用来调用系统函数

select to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间
select sys_context('userenv','terminal') from dual;--获得主机名
select sys_context('userenv','language') from dual;--获得当前locale
select DBMS_RANDOM.random from dual;--获得一个随机数

(3)可以用做计算器

select 7*9*10-10 from dual;

(4)查看系统时间

select sysdate from dual;

以上参考自:
https://blog.csdn.net/sinat_27143551/article/details/50269051

二、MySQL中的dual表

MySQL文档中对于dual表的解释:
You are allowed to specify DUAL as a dummy table name in situations where no tables are referenced:
SELECT 1+1 AS SUM FROM DUAL;
DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses. MySQL may ignore the clauses. MySQL does not require FROM DUAL if no tables are referenced.

由此看来MySQL中不是必须要满足select from结构,他的存在是为了给有这个要求的人使用,相当于一个摆设。

三、Oracle和MySQL中的dual对比

我们用实例来对比看区别:

select * from dual;
//MySQL报错: 1096 - No tables used
//Oracle返回“DUMMY”,其值为“X”, 行为和只有一行记录的普通表是一样的!
select  express [from dual];
//MySQL中select 1+1;和select 1+1 from dual;作用相同。
//Oracle中必须加上from dual,不然报错:ORA-00923: FROM keyword not found where expected
select  express  from dual where 0=2;
//mysq 和 oracle的行为一致:该句就如同你认为的正常表那样——会先计算where的条件,再行计算express;这里的where条件会决定expres是否会返回!
select 1 + 1 from dual where 0 = 2;
//此时无论是Oracle还是MySQL都不可以省略from dual。

SQL server中是否有dual表呢???
SQL Server中没有DUAL,要什bai么就直接SELECT什么。

越大气越成功,越努力越幸运!

各种数据库中的dual表相关推荐

  1. Oracle数据库中的dual表

    select user from dual; select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间 select S ...

  2. Oracle表里的照片怎么导出来,如何导出oracle数据库中某张表到excel_oracle数据库表格导出到excel...

    如何将oracle数据库表字段导成excel表格 这个你只要用ADO连oracle并获取记录集,根据你用的编程语言打开EXCEL,然后操作EXCEL对象的工作表就可以了.以VB为例: 1.在工程中引用 ...

  3. SQL Server 将指定的数据库中的所有表都列出来

    在很多情况下我们需要将指定的数据库中的所有表都列出来.在使用c#进行软件开发时,我们有哪些方法可是实现这个目的呢?本人对此进行概要的总结,有以下6中方式可以实现这个目的. 1.sqldmo SQLDM ...

  4. mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表

    展开全部 查询32313133353236313431303231363533e59b9ee7ad9431333431356639一个数据库中的所有表sql语句是show tables: 显示所有数据 ...

  5. 获取数据库中的所有表

    本Blog登出后受到了大家的关注,其中"盛国军"朋友提出了使用存储过程"sp_tables"也可以实现这个目的,所有本人对这个Blog有进行了完善. 在很多情况 ...

  6. Java代码判断数据库中某张表是否存在

    最近在开发一个同步数据的统计任务的时候遇到一个问题:要在Java代码中判断数据库中某张表是否存在,查资料后,总结了以下两种方法: 1.使用JdbcTemplate bean public boolea ...

  7. 一条SQL语句查询数据库中的所有表、存储过程、触发器

    一条SQL语句查询数据库中的所有表.存储过程.触发器 (sysobjects表信息)   该条语句查询返回所有的用户表 select * from sysobjects where xtype='u' ...

  8. SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称

    1.查询数据库中的所有数据库名: 1 SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: 1 SELECT Nam ...

  9. SQL2000数据库中删除“坏表”的方法

    SQL2000数据库中删除"坏表"的方法 在一些网站或者软件系统中,由于安全或者程序异常等问题,可能会在SQL Server 2000中造成一个异常问题:在企业管理器中打开数据库发 ...

  10. SQL - 通过某个字段名称找到数据库中对应的表

    工作中,我们经常会碰到会为一个已有的系统增加一些东西,如在报表中增加一些字段,或者在导出Excel文件时增加一些Column. 这时侯,我们不知道我们需要的数据在数据库中的哪个表中.至少,我们知道这个 ...

最新文章

  1. Ubuntu换回Gnome界面
  2. react中ref的使用
  3. C++ 类的静态成员详细讲解
  4. 1、tomcat目录及端口规划实践
  5. 意法半导体STM32 ARM Cortex 32位微控制器
  6. Python教程:迭代器的正确使用方法
  7. mysql按某一字段分组取最大(小)值所在行的数据
  8. C++对C的一些加强和变化
  9. centos7 安装java 8_CentOS 7.8下安装完美安装配置Rosetta
  10. Python把汉字转换成拼音
  11. IOS学习之UITableView滚动到指定位置
  12. 拓客系统专用服务器,北京拓客系统
  13. 手机端html怎么复制到剪贴板,移动端和pc端的复制到剪贴板功能
  14. 【深度学习】常用数据集标注软件使用指南
  15. Alien Skin X7PS调色滤镜插件下载及PS调色滤镜教程
  16. 【Linux学习笔记】38:有关Linux进程家族树
  17. css绘制卡券优惠券_用纯css来实现一个优惠券
  18. MongoDB 文档数据库
  19. 挑战GPT-3以色列推出参数多30亿、词条多5倍的新语言模型
  20. Heritrix3.1 过滤url

热门文章

  1. 2008'中国地理信息系统优秀工程公示
  2. java webservice是什么_WebService的基本概念:java webservice,什么是webservice
  3. 怎么用CDN给网站加速?大热的CDN,你确定你还不想了解?
  4. GO常见高频面试题(GMP、三色标记)
  5. 张三思评博客:常见的并发网络服务程序设计方案
  6. 教你在 Markdown 文档中借助 MathType 公式编辑器插入 LaTeX 公式
  7. 微信域名防封技术、微信域名检测技术的常见问题解答
  8. mysql cnf和ini区别_再谈mysql的配置文件my.ini or my.cnf (之一) .
  9. ICP许可证申办常见问题答疑
  10. html640设计稿,移动设备分辨率(终于弄懂了为什么移动端设计稿总是640px和750px)...