从什么都不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'
不需要FROM
或WHERE
子句。
您可以。 我在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子句而不更改结果。