在利用SQL製作檢視表時,我們常常會將多張資料表JOIN起來查詢,但是這樣的JOIN方式通常只能夠「完全條列」出綜合後的結果,卻無法達到統計式的用法、用途。舉例來說,我要列舉公司的銷售人員,每一個人的通訊錄中總共有幾筆顧客的資料?這樣的統計方式,利用單純的JOIN可能很難達成。(尤其在統計的欄位超過一個以上的時候,語法的複雜度會拉升很多)
首先先讓我們描述一下要進行的情境,已知三張資料表,其關聯結構如下:
如上圖,所以我們可以觀察到武將列表、武器列表、資產列表,總共三張資料表。
這些資料表我們將其SELECT出來看一下,可以看到欄位以及資料內容大致上如下列情況:
在大家有了資料表的結構後,假設我們想要知道每一個武將的ID、姓名、擁有的武器數量、擁有的資產數量,那麼在製作這類型的統計檢視表時,利用傳統的JOIN方式其實不太容易辦到,但我們可以用相互關聯子查詢(Correlated Subqueries)來達成此一需求。
SQL相互關聯子查詢的語法如下:
SELECT iAutoIndex AS 武將編號, cName AS 武將姓名, ( SELECT COUNT(*) AS Expr1 FROM dbo.武器列表 WHERE dbo.武將列表.iAutoIndex = iMap2武將列表 ) AS 武器筆數, ( SELECT COUNT(*) AS Expr1 FROM dbo.資產列表 WHERE dbo.武將列表.iAutoIndex = iMap2武將列表 ) AS 資產筆數 FROM dbo.武將列表;
所以我們可以得到下圖的查詢結果,所有的統計資料就羅列在其中啦!