[SQL개념] MINUS, 서브쿼리로 JOIN 대체하기

Mysql에서 MINUS 구현하기

Mysql에서는 MINUS를 사용할 수 없다. 대신NOT IN을 통해 같은 쿼리문을 만들 수 있다.

예를들어MINUS를 아래와 같이 쓴다면,

SELECT userid, purchaseid FROM tb1
MINUS
SELECT userid, purchaseid FROM refund_table ;

NOT INWHERE절에 써서 MINUS와 같은 결과를 가질 수 있다. 여기서 기억할 점은 아래처럼 2개 이상의 값에 대해서도 NOT IN의 값으로 넣을 수 있다는 것이다.

SELECT userid, purchaseid 
FROM tb1 a
WHERE (userid, purchaseid) NOT IN 
(SELECT userid, purchaseid FROM refund_table));

JOIN은 데이터가 클 때 큰 트랜잭션을 요구한다

그래서 JOIN을 최대한 쓰지 않으면서 서브쿼리로 조건을 걸어주는 방식으로 쿼리문을 짜는 곳도 많다고 한다. 예를들어 아래와 같은 두 테이블이 있고, LMS에 마케팅 동의(Y)를 하고 4월 이전에 가입한 user을 찾으려고 한다.



✅JOIN문 활용

SELECT DISTINCT a.userid FROM user_table a
INNER JOIN marketing_table b
ON a.userid = b.userid
WHERE b.YN = 'Y' and b.marketing_method = 'LMS' and a.createdate < '2022-03-31' );

✅WHERE절에 서브쿼리 활용

SELECT userid FROM user_table
WHERE userid IN
(SELECT userid FROM marketing_table WHERE marketing_method = 'LMS' and YN = 'Y')

좋은 웹페이지 즐겨찾기