다음과 같은 진술을 할 수 있습니까?
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 * FROM (VALUES ('Hello world')) t1 (col1) WHERE 1 = 1
다중:
SELECT * FROM (VALUES ('Hello world'),('Hello world'),('Hello world')) t1 (col1) WHERE 1 = 1
답변
다음은 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'
FROM
or 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 절을 생략 할 수 없습니다.