엄밀히 말하자면, 문장 의 FROM
절은 SELECT
선택 사항이 아닙니다. SQL-99 구문 은 기본 SELECT
문장을 자세히 설명 하고 FROM
절에는 대괄호가 없습니다. 이는 표준이 선택 사항이 아닌 것으로 간주 함을 나타냅니다.
SELECT [ DISTINCT | ALL ]
{Column expression [ AS name ]} [ ,... ] | *
FROM <Table reference> [ {,<Table reference>} ... ]
[ WHERE search condition ]
[ GROUP BY Columns [ HAVING condition ] ]
[ORDER BY {col_name | expr | position} [ASC | DESC],...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options |
INTO DUMPFILE 'file_name' |
INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]
실제 사용에서 프로그래머와 DBA는 종종 테이블의 데이터를 조작하거나 테이블과 데이터 구조를 조작하는 것 이외의 작업을 수행하는 것이 유용하다는 것을 알게됩니다. 이러한 유형의 작업은 SQL 표준의 범위를 크게 벗어나며 특정 구현의 기본 요소보다 더 많은 데이터 기능과 관련이 있습니다. 우리가 실행하려는 여부 SELECT getdate()
나 SELECT 1
또는 SELECT DB_NAME()
(나 방언이 좋아 무엇이든), 우리는 실제로 테이블에서 데이터를 원하지 않는다.
오라클은 다음과 같은 효과적인 정의로 더미 테이블을 사용하여 표준 및 구현 불일치를 해결하기로 결정했습니다.
CREATE TABLE DUAL (
DUMMY CHAR(1)
)
INSERT INTO DUAL (DUMMY) VALUES ('X')
다른 RDBMS는 기본적으로 더미 테이블 FROM
이 지정 되지 않은 경우 더미 테이블이 사용된다고 가정 합니다.
DUAL 테이블 의 역사는 Wikipedia에 있습니다.
DUAL 테이블은 Oracle Corporation의 Charles Weiss가 내부보기에 참여하기위한 테이블을 제공하기 위해 작성했습니다.
Oracle Data Dictionary에서 DUAL 테이블을 기본 개체로 만들었습니다. 그 자체로 볼 수는 없었지만 쿼리가 예상되는 뷰 내부에서 사용되었습니다. 아이디어는 DUAL 테이블에 JOIN을 수행하고 테이블의 각 행마다 결과에 두 개의 행을 작성할 수 있다는 것입니다. 그런 다음 GROUP BY를 사용하여 결과 조인을 요약하여 DATA 익스텐트 및 INDEX 익스텐트의 스토리지 양을 표시 할 수 있습니다. DUAL이라는 이름은 단 하나의 행에서 한 쌍의 행을 작성하는 프로세스에 적합 해 보였습니다.
원래의 DUAL 테이블에는 두 개의 행이 있었으므로 (따라서 이름) 한 행만있었습니다.
select
한다from
. DB2에는 SYSIBM.SYSDUMMY1 이라는 유사한 더미 테이블이 있습니다 . 또한 당신은 이미 이것을 알고 있지만, 당신select 'A' from dual
이dual
테이블에 실제로 액세스하지 않아서 편집의 질문에 대답합니다 (새로운 질문 btw를 나타냅니다).