RIGHT JOIN으로 MySQL 뷰 만들기
MySQL에서 RIGHT JOIN을 사용해 뷰(View)를 생성하는 과정을 예제와 함께 살펴보겠습니다. 이를 위해 아래와 같은 두 개의 테이블, 즉 Customers와 Reserve 테이블의 데이터를 사용합니다.
예제 테이블 데이터
mysql> Select * from Customers; +-------------+----------+ | Customer_Id | Name | +-------------+----------+ | 1 | Rahul | | 2 | Yashpal | | 3 | Gaurav | | 4 | Virender | +-------------+----------+ 4 rows in set (0.00 sec) mysql> Select * from Reserve; +------+------------+ | ID | Day | +------+------------+ | 1 | 2017-12-30 | | 2 | 2017-12-28 | | 2 | 2017-12-25 | | 1 | 2017-12-24 | | 3 | 2017-12-26 | +------+------------+ 5 rows in set (0.00 sec)
위 데이터에서 확인할 수 있듯이, Customers 테이블에는 네 명의 고객 정보가 저장되어 있고, Reserve 테이블에는 각 고객의 차량 예약 기록이 들어 있습니다.
RIGHT JOIN을 사용한 뷰 생성 쿼리
이제 다음 쿼리를 실행하면 위 두 테이블에 대해 RIGHT JOIN을 적용한 customer_VRight라는 이름의 뷰가 생성됩니다. 이 뷰는 차량을 한 번도 예약하지 않은 고객의 이름만 조회하도록 설계되었습니다.
mysql> Create view customer_VRight AS SELECT NAME from Reserve RIGHT JOIN customers ON customer_id = id WHERE id IS NULL; Query OK, 0 rows affected (0.08 sec) mysql> Select * from customer_VRight; +----------+ | NAME | +----------+ | Virender | +----------+ 1 row in set (0.00 sec)
쿼리 동작 원리
이 쿼리가 어떻게 작동하는지 단계별로 이해해 보겠습니다.
1. RIGHT JOIN의 특성 활용: RIGHT JOIN은 오른쪽 테이블(customers)의 모든 행을 결과에 포함시키며, 왼쪽 테이블(Reserve)에 일치하는 데이터가 없으면 NULL 값을 반환합니다.
2. NULL 조건 필터링: WHERE id IS NULL 조건을 통해 예약 기록이 전혀 없는, 즉 조인 결과에서 매칭되지 않은 고객만 걸러냅니다.
3. 결과 확인: 실행 결과로 Virender라는 고객만 조회되었습니다. 이는 Virender(Customer_Id = 4)만이 Reserve 테이블에 예약 기록이 없는 유일한 고객이기 때문입니다.
이처럼 RIGHT JOIN과 IS NULL 조건을 조합하면, 특정 테이블에 연관 데이터가 존재하지 않는 레코드를 손쉽게 찾아낼 수 있습니다. LEFT JOIN을 사용하는 경우에도 동일한 논리를 반대 방향으로 적용하면 같은 결과를 얻을 수 있다는 점도 참고하시기 바랍니다.