當前位置:成語大全網 - 書法字典 - SQL子查詢

SQL子查詢

所謂的SQL子查詢是嵌套在其他查詢中的查詢。子查詢通常用於篩選WHERE子句的IN運算符並填充計算列。讓我們從這兩個使用場景中了解壹下。

本節涉及的關系表如下:

頂部的訂單表Orders存儲訂單ID、訂單日期和客戶ID。特定的訂單信息存儲在OrderItems表中,該表通過order_num關聯。特定的客戶信息存儲在客戶表Customers中,並通過cust_id字段進行關聯。

現在,假設我們需要檢索RGA01產品的所有客戶信息,我們應該怎麽做?

首先,我們只列出步驟:

接下來,讓我們完成第壹步:

包含產品RGAN01的訂單號:

通過訂單號,您可以從訂單表中檢索客戶ID:

運行結果:

接下來,讓我們合並上面的兩個步驟:將第壹個查詢轉換為子查詢,並將其放在WHERE語句的in運算符之後:

運行結果與上面第二步中獲得的結果相同:

在SELECT語句中,子查詢由內向外處理:首先執行SELECT order _ num from orders where prod _ id =‘rgan 01‘的子查詢,並將返回的訂單編號作為IN運算符的參數,執行外部查詢:SELECT cust _ id from order _ num IN(20007,20008);。

最後,我們來看第三步,根據客戶ID檢索客戶相關信息。

運行結果:

同樣,我們可以用子查詢替換上面的WHERE子句:

至此,我們的檢索任務完成:查詢購買了RGAN01產品的所有客戶的姓名和聯系信息。

子查詢的另壹個使用場景是創建計算字段。同樣,我們從壹個案例中了解到:檢索每個客戶的訂單總數。

客戶表和訂單表是壹對多的關系,即壹個客戶對應多個訂單,但壹個訂單只對應壹個客戶。

以下SQL檢索客戶10000001的訂單號:

要對每個客戶的訂單進行計數,應該將其用作子查詢:

運行結果:

上面的SQL為Customers表中的每個客戶返回三列:cust_name cust_state和orders。其中,orders創建的計算字段是壹個子查詢,對檢索到的每個客戶執行壹次,once * * *執行子查詢六次。

在子查詢的條件中,我們使用表的完全限定列名Orders。cust _ id =客戶。cust _ id,因為訂單表和客戶表包含具有相同字段名的列。

在本節中,我們學習了子查詢在SELECT語句中的兩種用法:將子查詢應用於WHERE子句的IN運算符、執行條件篩選以及使用子查詢創建計算字段。

子查詢的檢索效率不理想。在下壹篇文章中,小宇將與您壹起學習連接表~連接表是數據檢索的本質和重點,因此我們將拭目以待!