나는 다음과 같이 많은 쿼리를 보았습니다.
Select 1
From table
이것은 무엇을 1
의미하며 어떻게 실행될 것이며 무엇을 반환합니까?
또한 어떤 유형의 시나리오에서 사용할 수 있습니까?
답변
SELECT 1 FROM TABLE_NAME
“테이블에서 1 반환”을 의미합니다. 그것은 자체적으로 꽤 주목할 수 없으므로 일반적으로 함께 사용되며 WHERE
종종 EXISTS
(@gbn 메모와 같이 반드시 모범 사례는 아니지만 실제로 의미가없는 경우에도 주목할만큼 일반적입니다. 즉, 다른 사람들이 사용하기 때문에 즉시 사용할 수 있고 즉시 “더 분명해”집니다. 물론 그것은 점성 닭고기 대 계란 문제 일 수 있지만 일반적으로 머 무르지는 않습니다)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
기본적으로는 위의 표 2에서 해당 ID를 (이것은 분명 인위적인 예입니다,하지만 난 그게 아이디어를 전달 믿습니다. 개인적으로, 나는 아마 위의 할 것가 표 1에서 모든 것을 반환 SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
나는 같은 것을 볼로 우연히 설득력이없는 이유가없는 한 독자에게 더 분명하게 FAR ).
편집하다
실제로 지금까지 잊어 버린 한 가지 사례가 있습니다. 외부 언어를 사용하여 데이터베이스에 값이 있는지 확인하려는 경우 때때로 SELECT 1 FROM TABLE_NAME
사용됩니다. 이것은 개별 열을 선택하는 것보다 큰 이점을 제공하지는 않지만 구현에 따라 SELECT *
DB를 언어로 반환하는 열이 많을수록 데이터가 커지기 때문에 종종 을 수행하는 것보다 상당한 이점을 제공 할 수 있습니다 결과적으로 더 많은 시간이 소요됩니다.
답변
select 1 from table
테이블의 모든 행에 대해 상수 1을 반환합니다. 레코드가 where
절 및 / 또는과 일치하는지 저렴하게 결정하려는 경우에 유용합니다 join
.
답변
당신이 같은 것을 의미한다면
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
다음 보다 더 나은 신화 입니다1
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
1
또는 *
(가) 무시됩니다 존재하고 당신이 당이 쓸 수있는 은 ANSI SQL 1992 표준 페이지 191 :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
답변
그것이 말하는 것을 수행합니다-항상 정수 1을 반환합니다. where 절과 일치하는 레코드가 있는지 확인하는 데 사용됩니다.
답변
select 1 from table
일부 데이터베이스에서는 연결을 테스트하기위한 쿼리로 사용되며 연결 풀에서 연결을 검색하거나 리턴 할 때 자주 사용됩니다.
답변
답변
널리 알려져 있지는 않지만 쿼리에는 HAVING
절이없는 절이 있을 수 있습니다 GROUP BY
.
이러한 상황에서는 HAVING
조항이 전체 세트에 적용됩니다. 분명히, SELECT
절은 열을 참조 할 수 없습니다. 그렇지 않으면 “정확한”오류가 발생합니다. “그룹 BY에 포함되어 있지 않기 때문에 선택에서 열이 유효하지 않습니다”등.
따라서, 리터럴 값이 있어야합니다 (SQL 제로 열이있는 결과 집합을 허용하지 않기 때문에 – 왜?!) 사용하고 리터럴 값 1 ( INTEGER
) 일반적으로 사용되는 다음 경우 HAVING
절들을 평가는 TRUE
다음 결과 집합이 하나 하나 개의 행이 될 것입니다 값 1을 표시하는 열, 그렇지 않으면 빈 세트가 표시됩니다.
예 : 열에 둘 이상의 고유 값이 있는지 확인하려면 다음을 수행하십시오.
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);