什麼是 MySQL 子查詢及其一般類別?


子查詢最好定義為查詢中的查詢。子查詢使您能夠編寫選擇資料的查詢行,這些行的條件實際上是在查詢在執行時執行時開發的。更正式地說,它是在另一個 SELECT 語句的一個子句中使用 SELECT 語句。事實上,一個子查詢可以包含在另一個子查詢中,而另一個子查詢又包含在另一個子查詢中,依此類推。子查詢也可以巢狀在 INSERT、UPDATE 和 DELETE 語句中。子查詢必須用括號括起來。

子查詢可以在允許表示式的地方使用,只要它返回單個值。這意味著返回單個值的子查詢也可以在 FROM 子句列表中作為物件列出。這被稱為內聯檢視,因為當子查詢用作 FROM 子句的一部分時,它被視為虛擬表或檢視。子查詢可以放在主查詢的 FROM 子句、WHERE 子句或 HAVING 子句中。它也稱為內部查詢或內部 SELECT,包含子查詢的查詢稱為外部查詢或外部 SELECT 或容器查詢。以下是其一般類別:

標量子查詢

標量子查詢返回單個值,即一行一列的資料。標量子查詢是一個簡單的運算元,我們幾乎可以在任何允許使用單列或文字的地方使用它。為了說明這一點,我們使用具有以下資料的‘Cars’、‘Customers’和‘Reservations’表:

mysql> Select * from Cars;
+------+--------------+---------+
| ID   | Name         | Price   |
+------+--------------+---------+
| 1    | Nexa         | 750000  |
| 2    | Maruti Swift | 450000  |
| 3    | BMW          | 4450000 |
| 4    | VOLVO        | 2250000 |
| 5    | Alto         | 250000  |
| 6    | Skoda        | 1250000 |
| 7    | Toyota       | 2400000 |
| 8    | Ford         | 1100000 |
+------+--------------+---------+
8 rows in set (0.02 sec)

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 Reservations;
+------+-------------+------------+
| ID   | Customer_id | Day        |
+------+-------------+------------+
| 1    | 1           | 2017-12-30 |
| 2    | 2           | 2017-12-28 |
| 3    | 2           | 2017-12-29 |
| 4    | 1           | 2017-12-25 |
| 5    | 3           | 2017-12-26 |
+------+-------------+------------+
5 rows in set (0.00 sec)

正如我們所知,標量子查詢將返回單個值,以下是標量子查詢:

mysql> Select Name from Customers WHERE Customer_id = (Select Customer_id FROM Reservations WHERE ID = 5);
+--------+
| Name   |
+--------+
| Gaurav |
+--------+
1 row in set (0.06 sec)

表子查詢

表子查詢返回一個結果,其中包含一個或多個行,這些行包含一個或多個列的資料。使用來自‘cars’、‘Customers’和‘Reservations’表的以下查詢是表子查詢的示例:

mysql> Select Name from customers where Customer_id IN (SELECT DISTINCT Customer_id from reservations);
+---------+
| Name    |
+---------+
| Rahul   |
| Yashpal |
| Gaurav  |
+---------+
3 rows in set (0.05 sec)

相關子查詢

相關子查詢是一個在 WHERE 子句中使用外部查詢值的子查詢。使用來自‘cars’表的以下查詢是相關子查詢的示例:

mysql> Select Name from cars WHERE Price < (SELECT AVG(Price) from Cars);
+--------------+
| Name         |
+--------------+
| Nexa         |
| Maruti Swift |
| Alto         |
| Skoda        |
| Ford         |
+--------------+
5 rows in set (0.00 sec)

mysql> Select Name from cars WHERE Price > (SELECT AVG(Price) from Cars);
+--------+
| Name   |
+--------+
| BMW    |
| VOLVO  |
| Toyota |
+--------+
3 rows in set (0.00 sec)

更新於:2020年6月22日

167 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.