Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

하위 쿼리를 INNER JOIN으로 변환하려면 어떻게 해야 합니까?


이해하기 위해 다음 표의 데이터를 사용하고 있습니다. −

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)