如何將子查詢轉換為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)
利用以下步驟,我們可以將上述子查詢轉換為 inner join −
將子查詢中命名的“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)
正如我們所見,以上結果與子查詢的結果並不完全相同,因此使用 DISTINCT 關鍵字可以獲取以下相同結果
mysql> SELECT DISTINCT name from customers,reserve WHERE customer_id = id; +----------+ | Name | +----------+ | Rahul | | Yashpal | | Gaurav | +----------+ 3 rows in set (0.03 sec)
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP