是否有可能有这样的陈述
SELECT "Hello world"
WHERE 1 = 1
Run Code Online (Sandbox Code Playgroud)
在SQL?
我想知道的主要事情是,我可以从无选择,即没有FROM子句.
OMG*_*ies 124
它在各个供应商之间并不一致 - Oracle,MySQL和DB2支持双重:
SELECT 'Hello world'
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
...而SQL Server,PostgreSQL和SQLite不需要FROM DUAL:
SELECT 'Hello world'
Run Code Online (Sandbox Code Playgroud)
MySQL确实支持两种方式.
reb*_*ard 25
在Oracle中:
SELECT 'Hello world' FROM dual
Run Code Online (Sandbox Code Playgroud)
SELECT 'Hello world'
Run Code Online (Sandbox Code Playgroud)
以下是来自https://blog.jooq.org/tag/dual-table/的最完整的双数据库支持列表:
在许多其他 RDBMS 中,不需要虚拟表,因为您可以发出如下语句:
Run Code Online (Sandbox Code Playgroud)SELECT 1; SELECT 1 + 1; SELECT SQRT(2);这些是 RDBMS,上面通常是可能的:
- H2
- MySQL
- 安格尔
- Postgres
- SQLite
- 数据库服务器
- Sybase ASE
在其他 RDBMS 中,需要虚拟表,就像在 Oracle 中一样。因此,您需要编写以下内容:
Run Code Online (Sandbox Code Playgroud)SELECT 1 FROM DUAL; SELECT 1 + 1 FROM DUAL; SELECT SQRT(2) FROM DUAL;这些是 RDBMS 及其各自的虚拟表:
- DB2:SYSIBM.DUAL
- 德比:SYSIBM.SYSDUMMY1
- H2:可选地支持 DUAL
- HSQLDB:INFORMATION_SCHEMA.SYSTEM_USERS
- MySQL:可选地支持 DUAL
- 甲骨文:双
- Sybase SQL Anywhere:SYS.DUMMY
Ingres 没有 DUAL,但实际上需要它,因为在 Ingres 中你不能有没有 FROM 子句的 WHERE、GROUP BY 或 HAVING 子句。
尝试这个。
单:
SELECT * FROM (VALUES ('Hello world')) t1 (col1) WHERE 1 = 1
Run Code Online (Sandbox Code Playgroud)
多:
SELECT * FROM (VALUES ('Hello world'),('Hello world'),('Hello world')) t1 (col1) WHERE 1 = 1
Run Code Online (Sandbox Code Playgroud)
此处有更多详细信息:http : //modern-sql.com/use-case/select-without-from
您可以。我在StackExchange Data Explorer查询中使用以下行:
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
Run Code Online (Sandbox Code Playgroud)
数据交换使用Transact-SQL(SQL Server对SQL的专有扩展)。
您可以通过运行类似以下的查询来自己尝试:
SELECT 'Hello world'
Run Code Online (Sandbox Code Playgroud)