서브쿼리 질문!! 0 2 883

by 가영 [SQL Query] [2017.08.25 04:19:41]


EXIST를 사용한 이 SQL문이 잘 이해가 안되는데 좀 세세하게 설명해주실분 계시나요 ㅠㅠ

SELECT에 왜 1을 썼는지하며,, EXIST가 조건을 만족하는 행을 찾으면 바로 검색이 중단된다는데 이 SQL문에서는

어떻게 적용된건지 잘 이해가 안갑니다..! 디비 초보좀 도와주세용 ㅠ 

 

 

다음은 EXISTS 서브쿼리를 사용하여 '20120501' 부터 '20120502' 사이에 경기가 있는 경기장을 조회하는 SQL문이다.

 

[예제] SELECT STADIUM_ID ID, STADIUM_NAME 경기장명

FROM STADIUM A

WHERE EXISTS (SELECT 1

FROM SCHEDULE X

WHERE X.STADIUM_ID = A.STADIUM_ID AND X.SCHE_DATE BETWEEN '20120501' AND '20120502')

 

[실행 결과] ID 경기장명

--- ---------------------------------

B01 인천월드컵경기장

B04 수원월드컵경기장

B05 서울월드컵경기장

C02 부산아시아드경기장 4개의 행이 선택되었다.

by jkson [2017.08.25 08:15:32]

exists 문은 참 거짓을 반환하는 함수라고 생각하세요.

exists 문 안에 쿼리 결과가 1줄 이상 있으면 참,

하나도 없으면 거짓이라고 생각하면 됩니다.

row 단위로 참 거짓을 판단하기 때문에 select 절에 어떤 컬럼이 와도 됩니다.

어떤 컬럼이 와도 상관 없기 때문에 그냥 편하게 1을 적어준 거구요.

1 row만 있어도 참이기 때문에 1 row 검색되는 순간 더이상 검색하지 않습니다.

EXISTS 문안에

X.STADIUM_ID = A.STADIUM_ID 

조건으로 인해 STADIUM의 STADIUM_ID를 하나 받아와서

SCHEDULE 에 해당 ID와 일치하는 정보가 있는지 찾아서 있으면

결과 ROW로 던져주고 없으면 다음 STADIUM_ID로 진행하게 됩니다.


by 우리집아찌 [2017.08.25 09:00:34]

검색 컬럼에 인덱스도 있어야겠지요..

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입