[sql] 무에서 선택 하시겠습니까?

다음과 같은 진술을 할 수 있습니까?

SELECT "Hello world"
WHERE 1 = 1

SQL에서?

내가 알고 싶은 가장 중요한 것은 아무것도 선택하지 않아도된다는 것입니다. 즉, FROM 절이 없습니다.



답변

공급 업체간에 일관성이 없습니다. Oracle, MySQL 및 DB2는 이중을 지원합니다.

SELECT 'Hello world'
  FROM DUAL

… SQL Server, PostgreSQL 및 SQLite에는 다음이 필요하지 않습니다 FROM DUAL.

SELECT 'Hello world'

MySQL은 두 가지 방법을 모두 지원합니다.


답변

에서 오라클 :

SELECT 'Hello world' FROM dual

SQL Server의 이중 대응 :

SELECT 'Hello world'


답변

이 시도.

단일:

SELECT *  FROM (VALUES ('Hello world')) t1 (col1) WHERE 1 = 1

다중:

SELECT *  FROM (VALUES ('Hello world'),('Hello world'),('Hello world')) t1 (col1) WHERE 1 = 1

자세한 내용은 http://modern-sql.com/use-case/select-without-from


답변

다음은 https://blog.jooq.org/tag/dual-table/ 에서 이중 데이터베이스 지원의 가장 완전한 목록입니다 .

다른 많은 RDBMS에서는 다음과 같은 명령문을 실행할 수 있으므로 더미 테이블이 필요하지 않습니다.

SELECT 1;
SELECT 1 + 1;
SELECT SQRT(2);

다음은 RDBMS이며 일반적으로 위의 작업이 가능합니다.

  • H2
  • MySQL
  • Ingres
  • Postgres
  • SQLite
  • SQL 서버
  • Sybase ASE

다른 RDBMS에서는 Oracle과 같이 더미 테이블이 필요합니다. 따라서 다음과 같이 작성해야합니다.

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 지원
  • 오라클 : DUAL
  • Sybase SQL Anywhere : SYS.DUMMY

Ingres에는 DUAL이 없지만 실제로 Ingres에서는 FROM 절없이 WHERE, GROUP BY 또는 HAVING 절을 사용할 수 없으므로 실제로 필요합니다.


답변

SQL Server에서 다음을 입력합니다.

Select 'Your Text'

FROMor WHERE절이 필요하지 않습니다 .


답변

할 수 있습니다. 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

데이터 교환은 Transact-SQL (SQL에 대한 SQL Server 독점 확장)을 사용합니다.

다음과 같은 쿼리를 실행하여 직접 시도 할 수 있습니다.

SELECT 'Hello world'


답변

불가능하다고 생각합니다. 이론적으로 : select는 두 가지 작업을 수행합니다.

  • 세트를 좁히거나 쪼개기 (세트 이론);

  • 결과 매핑.

첫 번째는 수직 감소로 볼 수있는 where 절에 반대되는 수평 감소로 볼 수 있습니다. 반면에 조인은 집합을 가로로 늘릴 수 있으며 유니온은 집합을 세로로 늘릴 수 있습니다.

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

두 번째는 매핑입니다. 매핑은 변환기에 가깝습니다. SQL에서는 일부 필드를 사용하고 0 개 이상의 필드를 반환합니다. select에서 sum, avg 등과 같은 일부 집계 함수를 사용할 수 있습니다. 또는 모든 열 값을 가져 와서 문자열로 변환 할 수 있습니다. C # linq에서는 select가 T 유형의 객체를 받아들이고 U 유형의 객체를 반환한다고 말합니다.

나는 당신이 할 수 있다는 사실 때문에 혼란이 있다고 생각합니다 select 'howdy' from <table_name>. 이 기능은 매핑, 선택의 변환기 부분입니다. 무언가를 인쇄하는 것이 아니라 변환 중입니다! 귀하의 예에서 :

SELECT "
WHERE 1 = 1

당신은 아무것도 / 널로 변환하고 아무것도 / "Hello world"테이블 없음 세트를 하나의 행으로 좁히고, imho는 전혀 의미가 없습니다.

열 수를 제한하지 않으면 "Hello world"테이블에서 사용 가능한 각 행에 대해 인쇄되는 것을 알 수 있습니다. 지금 쯤이면 왜 그런지 이해하길 바랍니다. 선택 항목은 사용 가능한 열에서 아무것도 가져 오지 않고 텍스트가있는 열 하나를 만듭니다 "Hello world"..

그래서 제 대답은 아니오입니다. select는 항상 수행 할 테이블 열이 필요하기 때문에 from 절을 생략 할 수 없습니다.