먼저 WHERE IN 에 대해서 알아보자.
보통 특정 컬럼에 조건이 하나인 경우에는 다음과 같이 많이 사용한다.
검색하려는 학생 이름이 여러 개라면 WHERE IN 을 사용하면 쉽다.
이 WHERE IN 에는 한가지 한계가 있는데, IN () clause 안에는 최대 1000개까지만 넣을 수 다. 만약 1000개 이상을 집어넣고 쿼리를 실행해보면 ORA-01795 maximum number of expressions in a list is 1000 에러를 보게 된다.
분석이나 디버깅할 때 WHERE IN 을 많이 쓰는데 때에 따라 1000개 이상의 검색 조건을 달아야 할 때가 있는데, 그럴 땐 두 가지 방법이 있다.
WHERE IN 에 많은 검색 조건을 사용할 땐 퍼포먼스 문제가 있을 수 있으니 대상 컬럼이 인덱스가 걸려있는지 확인하자.
이 방법의 단점은 1000개씩 끊어줘야 하는데 그게 좀 어렵지만 대신 직관적이라는 게 장점이다.
이 방법의 장점은 검색 필터가 늘어나도 쿼리 변경이 없으며 literal을 직접 기재하지 않아도 되니 쿼리가 더 간결해지고 가독성이 좋아진다.
보통 특정 컬럼에 조건이 하나인 경우에는 다음과 같이 많이 사용한다.
SELECT NAME
FROM STUDENT
WHERE NAME = 'FWANTASTIC'
검색하려는 학생 이름이 여러 개라면 WHERE IN 을 사용하면 쉽다.
SELECT NAME
FROM STUDENT
WHERE NAME IN ('FWANTASTIC', 'IU', 'BOO')
이 WHERE IN 에는 한가지 한계가 있는데, IN () clause 안에는 최대 1000개까지만 넣을 수 다. 만약 1000개 이상을 집어넣고 쿼리를 실행해보면 ORA-01795 maximum number of expressions in a list is 1000 에러를 보게 된다.
분석이나 디버깅할 때 WHERE IN 을 많이 쓰는데 때에 따라 1000개 이상의 검색 조건을 달아야 할 때가 있는데, 그럴 땐 두 가지 방법이 있다.
WHERE IN 에 많은 검색 조건을 사용할 땐 퍼포먼스 문제가 있을 수 있으니 대상 컬럼이 인덱스가 걸려있는지 확인하자.
첫 번째 방법 - OR 을 사용하기
SELECT NAME
FROM STUDENT
WHERE NAME IN ('FWANTASTIC', 'IU', ...)
OR NAME IN ('BOO', 'LOVE ATTACK', ...)
OR NAME IN ('MARSHMELLOW', 'GOOD DAY')
이 방법의 단점은 1000개씩 끊어줘야 하는데 그게 좀 어렵지만 대신 직관적이라는 게 장점이다.
두 번째 방법 - 임시 테이블 에 값을 넣고 난 후 SELECT 로 가져오기
쿼리를 실행하기 전에 검색하려는 조건들을 TEMP_TABLE이라는 임시 테이블에 저장한 다음에 이 테이블을 검색 조건에 사용한다.SELECT NAME
FROM STUDENT
WHERE NAME IN (SELECT NAME FROM TEMP_TABLE)
이 방법의 장점은 검색 필터가 늘어나도 쿼리 변경이 없으며 literal을 직접 기재하지 않아도 되니 쿼리가 더 간결해지고 가독성이 좋아진다.