"1 개 선택"은 무엇을합니까?


80

일부 기사를 읽었지만 실제로 무엇을하는지 이해하지 못했습니다 select 1 from. 누군가 " select 1대신 사용해야합니다"라고 말합니다 select *. 다음은 예시 테이블입니다.

cust_id     cust_name       cust_address

1000000001  Village Toys    Mapl
1000000002  Kids Place      South
1000000003  Fun4All         Sunny
1000000004  Fun4All         Riverside
1000000005  The Toy Store   53rd

select 1 from customer_table이 문장이 무엇을하는지 쓸 때 결과는 무엇입니까 ?


십년 정도 전에,이 제안하는 합리적인 조언이었다 select 1대신 select *예에서 EXISTS절을. 최적화 프로그램은 오래 전에 개선되었습니다. 그것은 없었다 결코 "이 결과 세트에서 모든 열을 얻을"에 대한 교체.
Damien_The_Unbeliever

12
해보 셨나요 ???
Jimmy D

답변:


72
select 1 from table

테이블의 모든 행에 대해 1의 열을 반환합니다. 다음과 같이 where 문과 함께 사용하여 주어진 키에 대한 항목이 있는지 확인할 수 있습니다.

if exists(select 1 from table where some_column = 'some_value')

친구가 말한 것은 select * from table로 대량 선택을하는 대신 다음 두 가지 이유로 정확하게 필요한 열을 지정해야한다는 것입니다.

1) 성능 및 실제로 필요한 것보다 더 많은 데이터를 검색 할 수 있습니다.

2) 쿼리의 사용자는 열의 순서에 의존 할 수 있습니다. 테이블이 업데이트되면 클라이언트는 예상과 다른 순서로 열을 수신합니다.


33

구성은 일반적으로 "존재"확인에 사용됩니다.

if exists(select 1 from customer_table where customer = 'xxx')

또는

if exists(select * from customer_table where customer = 'xxx')

두 구조 모두 동일합니다. 과거에 사람들은 쿼리 관리자가 최상의 인덱싱 된 열을 사용하기 때문에 select *가 더 낫다고 말했습니다. 이것은 사실이 아닌 것으로 입증되었습니다.


24

그것은 당신이 무엇을 물어 않는 SELECT 1 FROM tableSELECT(귀국일)는 1당신이 얻을 것이다 테이블의 3 열이있는 경우 해당 테이블의 모든 행에 대한

1
1
1

설명하신 문제 일 수있는 Count (*) 대 Count (1) 을 살펴보십시오 .


3
내가 왜 그걸 원할까요?
CodyBugstein

7
@Imray WHERE절의 조건 이 참인지 거짓 인지에 관심이있을 때 유용합니다 . 하위 쿼리에서 자주 사용됩니다.
Andreas

9

이 문 SELECT 1 FROM SomeTable1테이블의 각 행에 대한 값 을 포함하는 열을 반환 합니다. 예 SELECT 1, cust_name FROM SomeTable를 들어 다른 열을 추가 하면 좀 더 명확 해집니다.

            cust_name
----------- ---------------
1           Village Toys
1           Kids Place
1           Fun4All
1           Fun4All
1           The Toy Store

4
SELECT COUNT(*) in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)- EXISTS조건은 CONDITIONS 충족 여부에 관계없이 항상 true를 반환합니다.

NOT EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS)- NOT EXISTS조건 CONDITIONS은 충족 여부에 관계없이 항상 거짓을 반환 합니다.

SELECT COUNT 1 in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)- EXISTS조건 CONDITIONS이 충족 되면 true를 반환합니다 . 그렇지 않으면 거짓.

NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)- NOT EXISTS조건 CONDITIONS이 충족 되면 거짓을 반환 합니다. 그렇지 않으면 사실입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.