掌握 SQL 連接和聯合以實現高效資料檢索
本指南探討 SQL 連接和聯合如何有效地檢索和組合多個表中的資料。
第 1 部分:了解聯接和並集
SQL 連線是基於共用資料列跨多個資料表檢索資料的基礎。 存在多種連接類型:
SQL 合併合併多個 SELECT
語句的結果,預設消除重複行。 使用 UNION ALL
保留重複項。
範例:
讓我們用涉及 cars
、models
和 colors
表的範例來示範。
範例 1:內連接
擷取跑車的 ID(假設 model
ID 1 代表跑車):
<code class="language-sql">SELECT a.ID, b.model FROM cars a INNER JOIN models b ON a.model = b.ID WHERE b.ID = 1;</code>
增加汽車顏色需要再次加入:
<code class="language-sql">SELECT a.ID, b.model, c.color FROM cars a INNER JOIN models b ON a.model = b.ID INNER JOIN colors c ON a.color = c.ID WHERE b.ID = 1;</code>
範例 2:聯盟
要組合跑車(型號 ID 1)和四輪驅動車(型號 ID 3):
<code class="language-sql">SELECT a.ID, b.model, c.color FROM cars a INNER JOIN models b ON a.model = b.ID INNER JOIN colors c ON a.color = c.ID WHERE b.ID = 1 UNION SELECT a.ID, b.model, c.color FROM cars a INNER JOIN models b ON a.model = b.ID INNER JOIN colors c ON a.color = c.ID WHERE b.ID = 3;</code>
範例 3:外連接
列出所有品牌及其汽車數量,包括沒有汽車的品牌(使用左外連接):
<code class="language-sql">SELECT a.brand, COUNT(b.id) AS countOfBrand FROM brands a LEFT OUTER JOIN cars b ON a.ID = b.brand GROUP BY a.brand;</code>
範例 4:模擬 INTERSECT (MySQL)
由於 INTERSECT
並未得到普遍支持,使用聯接(對於 MySQL)的解決方法可能如下所示(此範例需要根據您的特定表結構和所需的交集標準進行調整):
<code class="language-sql"> SELECT a.ID, a.color, a.paint FROM colors a INNER JOIN colors b ON a.ID = b.ID WHERE a.ID > 2 AND b.ID -- Replace with your actual intersection condition ``` (Note: This example is a placeholder and requires adaptation to a real-world scenario to be meaningful.) This demonstrates the power of joins and unions for efficient data manipulation in SQL. Remember to adapt these examples to your specific database schema and requirements.</code>
以上是SQL 連線和聯合如何協助檢索和合併多個表中的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!