다음과 같은 진술을 할 수 있습니까?
SELECT "Hello world"
WHERE 1 = 1
SQL에서?
내가 알고 싶은 가장 중요한 것은 아무것도 선택하지 않아도된다는 것입니다. 즉, FROM 절이 없습니다.
다음과 같은 진술을 할 수 있습니까?
SELECT "Hello world"
WHERE 1 = 1
SQL에서?
내가 알고 싶은 가장 중요한 것은 아무것도 선택하지 않아도된다는 것입니다. 즉, FROM 절이 없습니다.
FROM NULL사이 SELECT와 WHERE. 모호한 표현은 주로 숙제이기 때문에 누군가가 와서 내 직감이 틀렸다면 답을 말해주는 것을 원하지 않았습니다.
답변:
공급 업체간에 일관성이 없습니다. Oracle, MySQL 및 DB2는 이중을 지원합니다.
SELECT 'Hello world'
FROM DUAL
... SQL Server, PostgreSQL 및 SQLite에는 다음이 필요하지 않습니다 FROM DUAL.
SELECT 'Hello world'
MySQL은 두 가지 방법을 모두 지원합니다.
DUAL팬텀과 같은 테이블에서 쿼리를 수행 할 수 있습니다.
이 시도.
단일:
SELECT * FROM (VALUES ('Hello world')) t1 (col1) WHERE 1 = 1
다중:
SELECT * FROM (VALUES ('Hello world'),('Hello world'),('Hello world')) t1 (col1) WHERE 1 = 1
WHERE 1 = 1무엇입니까? PostgreSQL에서는 그것없이 작동합니다. 아니면 다른 DMBS와 관련이 있습니까?
SELECT * FROM (VALUES ("Hello world")) t1 (col1)여전히 미세. Where이 질문에 답하십시오.
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 절을 사용할 수 없으므로 실제로 필요합니다.
할 수 있습니다. 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 절을 생략 할 수 없습니다.
표준 SQL에서는 아니요. WHERE절은 테이블 식을 의미한다.
SQL-92 사양에서 :
7.6 "where 절"
함수
이전 "from 절"의 결과에 "검색 조건"을 적용하여 파생 된 테이블을 지정합니다.
차례로:
7.4 "from 절"
함수
하나 이상의 명명 된 테이블에서 파생 된 테이블을 지정합니다.
이를 수행하는 표준 방법 (즉, 모든 SQL 제품에서 작동해야 함) :
SELECT DISTINCT 'Hello world' AS new_value
FROM AnyTableWithOneOrMoreRows
WHERE 1 = 1;
... WHERE절을 더 의미있는 것으로 변경하고 싶다고 가정하면 , 그렇지 않으면 생략 할 수 있습니다.
SELECT절이 상수로만 구성되고 AnyTableWithOneOrMoreRows저장된 테이블 임을 인식하는 경우가 있으므로 통계를 사용하여 테이블에 0 행.
또 다른 가능성이 있습니다-독립형 VALUES():
VALUES ('Hello World');
산출:
column1
Hello World
여러 값을 간결하게 지정해야 할 때 유용합니다.
VALUES (1, 'a'), (2, 'b'), (3, 'c');
산출:
column1 column2
1 a
2 b
3 c
이 구문은 SQLite / PostgreSQL / DB LUW / MariaDB 10.3에서 지원됩니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 질문에 대한 가장 좋은 해결 방법은 더미 하위 쿼리를 사용하는 것입니다.
SELECT 'Hello World'
FROM (SELECT name='Nothing') n
WHERE 1=1
이렇게하면 더미 하위 쿼리가 결과를 변경하지 않고 FROM 절을 강제로 사용하므로 select 문 뒤에 WHERE 및 모든 절 (예 : Joins 또는 Apply 등)이있을 수 있습니다.
SELECTa FROM가 없으므로 Oracle 등에서는 여전히 실패합니다.
SELECT 'Hello' FROM dual WHERE 1=1하위 쿼리를 건너 뛸 수 있기 때문에 더 간단 합니다.
SELECT는 FROM절 없이 명령문 (즉, a ) 을 가질 수 있는지 물었습니다 . 질문을 읽지 않았습니까?
WHERE없이 FROM. 이를 감안할 때 나는 OP 질문의 첫 번째 진술에 응답했습니다.
WHERE표준 SQL이 있는지 기억하지 못했습니다 . 다른 답변도 읽었습니다. 그건 그렇고 : 올바른 것은 당신이SELECTFROM " WHERE없이 FROM"(?)가 아니라 " 없이 가질 수 없다는 것입니다 . @DomingoR, 쿼리는 어디에서 작동합니까? 여전히 a SELECTwithout a FROM(부 쿼리에)가 있으므로 a없이 쿼리를 허용하지 않고 FROM표준 SQL에서 벗어난 쿼리 에서만 작동 하는 DBMS에서 실패 FROM하고 SELECT. 그래서 당신의 대답은 아무 소용이 없습니다.
저는 파이어 버드를 사용하고 있습니다. 먼저 "NoTable"이라는 하나의 열 테이블을 다음과 같이 만듭니다.
CREATE TABLE NOTABLE
(
NOCOLUMN INTEGER
);
INSERT INTO NOTABLE VALUES (0); -- You can put any value
이제 이것을 쓸 수 있습니다
select 'hello world' as name
주목할만한
표시하려는 열을 추가 할 수 있습니다.