이해하기 위해 다음 표의 데이터를 사용하고 있습니다. −
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)
이제 다음은 차를 예약한 모든 고객의 이름을 찾는 하위 쿼리입니다.
mysql> Select Name from customers WHERE customer_id IN (Select id from reserve); +----------+ | Name | +----------+ | Rahul | | Yashpal | | Gaurav | +----------+ 3 rows in set (0.00 sec)
이제 다음 단계의 도움으로 위의 하위 쿼리를 내부 조인으로 변환할 수 있습니다 -
-
서브쿼리에서 명명된 'Reserve' 테이블을 FROM 절로 이동시킨다.
-
WHERE 절은 customer_id 열을 하위 쿼리에서 반환된 ID와 비교합니다.
따라서 표현식을 두 테이블의 id 열 간의 명시적 직접 비교로 변환합니다.
mysql> SELECT Name from customers, reserve WHERE customer_id = id; +----------+ | Name | +----------+ | Rahul | | Yashpal | | Yashpal | | Rahul | | Gaurav | +----------+ 5 rows in set (0.00 sec)
위의 결과가 subquery의 결과와 정확히 같지 않음을 알 수 있으므로 DISTINCT 키워드를 사용하여 다음과 같은 결과를 얻을 수 있습니다.
mysql> SELECT DISTINCT name from customers,reserve WHERE customer_id = id; +----------+ | Name | +----------+ | Rahul | | Yashpal | | Gaurav | +----------+ 3 rows in set (0.03 sec)