- 초보개발자로써 혼자서 공부한 내용을 정리삼아 블로그에 작성하니 잘못된 점 바로잡아주시면 감사하겠습니다! -
이번 업무중에 join을 활용하여 데이터를 가져오는 SQL을 작성하던 중 사수님께서 공부로 JOIN을 사용하지 않고
IN, EXISTS 을 사용하여 SQL 을 작성해보라는 말씀을 하여 기록을 남기기 위해 글을 작성합니다.
IN 과 EXISTS
IN
- 실행순서 : EXISTS 쿼리 -> 메인쿼리 순서
- 집합 내부에 값이 존재하는지 여부 확인
- 존재하는 데이터값을 비교하기 때문에 EXISTS 절보다 속도가 느림
WHERE 메인쿼리테이블의 컬럼명 IN(SELECT 컬럼명 FROM 테이블 WHERE 조건절)
위와 같은 형태로 작성하고 설명하자면 서브쿼리 데이터들중에 메인쿼리 테이블의 데이터에서 존재하는 ROW 만 추출
EXISTS
- 실행순서 : 메인쿼리 -> EXISTS 쿼리 순서
- 결과로 TRUE, FALSE 반환
- 조건에 해당하는 ROW의 존재 유무 확인 이후 수행 x
- 보통 IN 보다는 EXISTS 의 성능이 더 좋음
- 테이블 간의 결과를 어떤 값이 존재하는지 확인하는 경우에 사용
WHERE EXISTS(SELECT 컬럼명 FROM 서브테이블 WHERE 메인테이블.컬럼명 = 서브테이블.컬럼명)
NOT
IN, EXISTS 둘다 앞에 NOT 을 붙이게 되면 반대로 조건에 맞지 않는 ROW 들만 출력하게 됩니다.
'DB > MySQL' 카테고리의 다른 글
Lock 과 Index (0) | 2024.08.12 |
---|---|
JOIN 에서 WHERE절과 ON절의 차이 (2) | 2024.01.30 |