每个SELECT语句中必需的FROM子句

时间:2009-04-01 12:51:07

标签: sql mysql

是每个SELECT语句中必需的FROM子句吗?谢谢..

7 个答案:

答案 0 :(得分:14)

不是 - 您可以使用SELECT初始化变量。

示例from here

的MySQL> SELECT 1 + 1;          - > 2

答案 1 :(得分:7)

不在MySQL,没有。你可以这样做:

SELECT 1 + 1;

虽然它会出现在某些DBMS中 - 例如,Oracle会要求你这样做:

SELECT 1 + 1 FROM DUAL;

答案 2 :(得分:1)

没有。你很容易做到

SELECT 1+1

答案 3 :(得分:0)

(编辑:错过了MYSQL标签。)

这取决于数据库。

在Oracle,IIRC中,需要来自。但是Oracle有一个表DUAL,它总是返回一行,用于在SELECT子句中完成所有工作的情况。

另一方面,SQL Server不需要FROM,只需选择它就可以返回变量的值:

SELECT @myVar

答案 4 :(得分:0)

正如ocedecio所提到的,在每个陈述中都不需要。

例如,我倾向于使用以下语法初始化具有数据的表

insert into status(code, description)
select 'O', 'Open'
union all select 'C', 'Closed'
union all select 'P', 'Parked'

等。

编辑(以下是gamecat的评论)

上面的示例演示了SELECT FROM without FROM可能具有实际用途。 你当然可以打电话:

select 'O', 'Open'
union all select 'C', 'Closed'
union all select 'P', 'Parked'

答案 5 :(得分:0)

基本上在SQL server 2005中,标量值函数和系统函数不需要FROM关键字,但它对于表值函数是必需的。

标量值函数可以执行,如下面的语法

选择functionname(arguments)

表值函数可以执行,如下面的语法

从functionname(arguments)中选择*

否则

从functionname(argument1,argument2)

中选择col1,col2

答案 6 :(得分:0)

实际上," SELECT 1 "和" SELECT 1 FROM DUAL "在最新版本的MySQL中工作。

有趣的是," SELECT 1 WHERE 1 = 1 "需要一个FROM子句:" SELECT 1 FROM DUAL WHERE 1 = 1 "很好。在其他平台上,如PostgreSQL," SELECT 1 WHERE 1 = 1 "工作正常。

另一个奇怪之处:" SELECT 1 FROM DUAL GROUP BY 1 HAVING 1 = 1 "适用于MySQL 5.7,但在MySQL 5.5中失败。

不同平台中必需/可选FROM子句的摘要:

  • MySQL,MariaDB,Amazon Aurora:可选或使用" FROM dual "。
  • Oracle:使用" FROM dual "。
  • IBM DB2:使用" FROM sysibm.sysdummy1 "。
  • Informix:使用" FROM systables WHERE tabid = 1 "
  • Firebird,InterBase:使用" FROM rdb $ database "。
  • Microsoft Access:必需,但没有虚拟表。尝试使用" FROM(SELECT COUNT(*)FROM first_table_found WHERE 1 = 0)AS dual "。
  • SQL Server,SQL Azure,SQL Server CE,Sybase ASE,SQL Anywhere,Ingres,PostgreSQL,Redshift,SQLite:可选。