本指南介紹SQL中從資料庫多個資料表檢索資料的各種方法,支援複雜的資料分析和報告產生。
連接用於基於公共列組合多個表的行,建立一個單一的結果集。主要有三種連接類型:
聯合 (Unions) 將多個查詢的結果組合成單一的結果集。它們類似於連接,但不使用公共列進行匹配。聯合可以用來合併不同結構的表中的資料或刪除重複行。
子查詢是在查詢中的查詢,用於過濾或修改從主查詢檢索的資料。它們用括號括起來,可用於WHERE、HAVING或FROM子句。
當連接表時未指定連接條件時,就會發生笛卡爾積連接。這會導致大量不必要的行,從而成為效能殺手。務必始終指定連線條件以避免笛卡爾積連線。
FROM子句中的子查詢允許您將子查詢的結果集用作主查詢中的表。這對於複雜的資料轉換或簡化巢狀查詢非常有用。
計算列: 使用數學運算或函數在查詢中建立新列。 CASE語句: 使用邏輯表達式根據指定條件選擇不同的值。 OVER()函數: 將聚合函數應用於分區內的行組。 臨時表: 建立臨時表以儲存中間結果,允許進行複雜的資料轉換而無需修改原始表。 派生表: 與臨時表類似,但它們是在查詢中內聯建立的。
範例1: 擷取豐田和寶馬製造的汽車的名稱和型號。
<code class="language-sql">SELECT cars.model, brands.brand FROM cars JOIN brands ON cars.brand = brands.id WHERE brands.brand IN ('Toyota', 'BMW');</code>
範例2: 檢索是跑車或四輪傳動車的汽車的名稱和顏色。
<code class="language-sql">SELECT cars.model, colors.color FROM cars JOIN models ON cars.model = models.id JOIN colors ON cars.color = colors.id WHERE models.model IN ('Sports', '4WD');</code>
範例3: 使用左外連接檢索所有品牌,即使庫存中沒有汽車。
<code class="language-sql">SELECT brands.brand FROM brands LEFT JOIN cars ON brands.id = cars.brand;</code>
透過掌握連接、聯合和其他高級SQL技術,您可以有效地從多個表中檢索資料並產生複雜的報告。這對資料分析師、資料科學家和資料庫管理員來說是一項至關重要的技能。
以上是如何使用 SQL 查詢從多個表中檢索資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!