从什么都不select?

是否有可能有类似的声明?

SELECT "Hello world" WHERE 1 = 1 

在SQL?

我想知道的主要事情是我可以从没有select,即没有一个FROM子句。

这在供应商中并不一致 – Oracle,MySQL和DB2支持双重:

 SELECT 'Hello world' FROM DUAL 

…而SQL Server,PostgreSQL和SQLite不需要FROM DUAL

 SELECT 'Hello world' 

MySQL确实支持这两种方式。

Oracle中

 SELECT 'Hello world' FROM dual 

SQL Server中的双重等价物

 SELECT 'Hello world' 

在SQL Server中input:

 Select 'Your Text' 

不需要FROMWHERE子句。

您可以。 我在StackExchange数据资源pipe理器查询中使用以下行:

 SELECT (SELECT COUNT(*) FROM VotesOnPosts WHERE VoteTypeName = 'UpMod' AND UserId = @UserID AND PostTypeId = 2) AS TotalUpVotes, (SELECT COUNT(*) FROM Answers WHERE UserId = @UserID) AS TotalAnswers 

Data Exchange使用Transact-SQL(SQL Server专有的SQL扩展)。

你可以尝试运行一个查询,如:

 SELECT 'Hello world' 

在标准SQL中,没有。 WHERE子句意味着一个表格expression式。

从SQL-92规范:

7.6“哪里条款”

function

指定一个由“search条件”应用到前面的“from子句”的结果派生的表。

反过来:

7.4“从条款”

function

指定从一个或多个命名表派生的表。

一个标准的方法(即应该在任何SQL产品上工作):

 SELECT DISTINCT 'Hello world' AS new_value FROM AnyTableWithOneOrMoreRows WHERE 1 = 1; 

假设你想把WHERE子句改为更有意义的东西,否则可以省略。

我认为这是不可能的。 理论上来说:select执行两种事情:

  • 缩小/扩大集合(set-theory);

  • 映射结果。

第一个可以看作是一个横向递减,与where子句相反,可以被看作是一个垂直递减。 另一方面,联合可以水平地增加集合,联合可以垂直地增加集合。

  augmentation diminishing horizontal join/select select vertical union where/inner-join 

第二个是映射。 一个映射,更多的是一个转换器。 在SQL中它需要一些字段并返回零个或多个字段。 在select,你可以使用一些聚合函数,如sum,avg等。或者把所有的列值转换成string。 在C#linq中,我们说select接受一个Ttypes的对象并返回一个Utypes的对象。

我认为这个混乱是因为你可以这样做: select 'howdy' from <table_name> 。 这个function是映射,转换器的一部分select。 你不打印的东西,但转换! 在你的例子中:

 SELECT " WHERE 1 = 1 

你正在将nothing / null转换成"Hello world"并且你将没有/没有表的集合缩小到一行,这是imho毫无意义的。

您可能会注意到,如果您不限制列的数量,则会为表格中的每个可用行打印"Hello world" 。 我希望,你明白为什么现在。 您的select不会从可用的列中获取任何内容,并使用文本"Hello world"创build一个列。

所以,我的答案是没有。 你不能忽略from子句,因为select总是需要表列来执行。

我知道这是一个老问题,但是对于你的问题最好的解决方法是使用一个哑子查询:

 SELECT 'Hello World' FROM (SELECT name='Nothing') n WHERE 1=1 

这样,您可以在select语句之后拥有WHERE和任何子句(如联合或应用等),因为伪子查询强制使用FROM子句而不更改结果。