[mysql] 표에서 1을 선택한다는 것은 무슨 의미입니까?

나는 다음과 같이 많은 쿼리를 보았습니다.

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 일부 데이터베이스에서는 연결을 테스트하기위한 쿼리로 사용되며 연결 풀에서 연결을 검색하거나 리턴 할 때 자주 사용됩니다.


답변

결과는 1테이블의 모든 레코드에 대한 것입니다.
__


답변

널리 알려져 있지는 않지만 쿼리에는 HAVING절이없는 절이 있을 수 있습니다 GROUP BY.

이러한 상황에서는 HAVING조항이 전체 세트에 적용됩니다. 분명히, SELECT절은 열을 참조 할 수 없습니다. 그렇지 않으면 “정확한”오류가 발생합니다. “그룹 BY에 포함되어 있지 않기 때문에 선택에서 열이 유효하지 않습니다”등.

따라서, 리터럴 값이 있어야합니다 (SQL 제로 열이있는 결과 집합을 허용하지 않기 때문에 – 왜?!) 사용하고 리터럴 값 1 ( INTEGER) 일반적으로 사용되는 다음 경우 HAVING절들을 평가는 TRUE다음 결과 집합이 하나 하나 개의 행이 될 것입니다 값 1을 표시하는 열, 그렇지 않으면 빈 세트가 표시됩니다.

예 : 열에 둘 이상의 고유 값이 있는지 확인하려면 다음을 수행하십시오.

SELECT 1
  FROM tableA
HAVING MIN(colA) < MAX(colA);