SQL筆記:利用SQL相關子查詢,來產生多張資料表間的統計檢視表

在利用SQL製作檢視表時,我們常常會將多張資料表JOIN起來查詢,但是這樣的JOIN方式通常只能夠「完全條列」出綜合後的結果,卻無法達到統計式的用法、用途。舉例來說,我要列舉公司的銷售人員,每一個人的通訊錄中總共有幾筆顧客的資料?這樣的統計方式,利用單純的JOIN可能很難達成。(尤其在統計的欄位超過一個以上的時候,語法的複雜度會拉升很多)

SQL語法:相互關聯子查詢(Correlated Subqueries)

首先先讓我們描述一下要進行的情境,已知三張資料表,其關聯結構如下:

如上圖,所以我們可以觀察到武將列表、武器列表、資產列表,總共三張資料表。

這些資料表我們將其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.武將列表;

所以我們可以得到下圖的查詢結果,所有的統計資料就羅列在其中啦!

相關參考

SQL Command Statement 子查詢 SubQuery SubSelect 相關子查詢 CorrelatedSubQuery 巢狀查詢 NestedQuery DerivedTable SelectFromSelect