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

하위 쿼리를 LEFT 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 NOT IN (Select id From reserve);
+----------+
| Name     |
+----------+
| Virender |
+----------+
1 row in set (0.00 sec)

이제 다음 단계를 통해 위의 하위 쿼리를 RIGHT 조인으로 변환할 수 있습니다 -

  • 서브 쿼리에 이름이 지정된 'Reserve' 테이블을 FROM 절로 이동하고 LEFT JOIN을 사용하여 'Customers'에 조인합니다.
  • WHERE 절은 customer_id 열을 하위 쿼리에서 반환된 ID와 비교합니다. 따라서 IN 식을 FROM 절에 있는 두 테이블의 id 열 간의 명시적 직접 비교로 변환합니다.
  • WHERE 절에서 'Reserve' 테이블에 NULL이 있는 행으로 출력을 제한합니다.
mysql> SELECT Name from customers LEFT JOIN reserve ON customer_id = Id WHERE Id IS NULL;
+----------+
| Name     |
+----------+
| Virender |
+----------+
1 row in set (0.00 sec)