資料通常儲存在多個表中,關係由外鍵定義。但是,有時兩個表可能沒有直接的外鍵關係,但它們仍然可以透過第三張表連接。本問題示範如何執行此類連接以從多個表中提取特定資訊。
與需要外鍵進行表連接的假設相反,外鍵並非必需。相反,可以根據每個表定義的謂詞連接表。
要連接缺少直接外鍵關係的表,請遵循以下步驟:
CROSS JOIN
或 INNER JOIN
運算子組合表。 WHERE
子句新增其他條件以篩選已連接的資料。 語句和表:
每個表都有一個謂詞來定義它所包含的行。例如,Species
表包含這樣的行:物種名稱對應其木材類型和最大高度。
查詢謂詞:
查詢也依據 FROM
、WHERE
和其他子句具有謂詞。表別名允許重命名列並促進連接條件。
連接表:
CROSS JOIN
和 INNER JOIN
使用 AND
組合謂詞。 UNION
使用 OR
,而 EXCEPT
使用 AND NOT
組合謂詞。 ON
和 WHERE
子句可用來指定其他連接條件。
選擇表:
要選擇正確的表,請考慮所需的輸出並確定包含必要列的表。根據它們共享的謂詞連接它們。
外鍵與查詢:
外鍵不影響查詢執行。它們強制執行完整性約束,但不限制連接。查詢根據表謂詞進行評估。
範例查詢:
要提取「ARCTIC」區域森林的森林名稱、物種名稱和木材類型:
<code class="language-sql">SELECT Forest.Fo_name, Species.Sp_name, Species.Sp_woodtype FROM Forest INNER JOIN Tree ON Forest.Fo_name = Tree.Tr_forest INNER JOIN Species ON Tree.Tr_species = Species.Sp_name WHERE Forest.Fo_loc='ARCTIC' ORDER BY Forest.Fo_name, Species.Sp_name;</code>
此查詢透過 Tr_species
和 Tr_forest
欄位有效地連接了 Forest
、Species
和 Tree
表,並根據 Fo_loc
欄位篩選結果。輸出按森林和物種名稱排序。
注意:範例查詢已根據描述進行了修正,以確保邏輯正確性並能夠連接三個表。 原始範例中 ON Tree.Tr_species=Tree.Tr_forest
條件是錯誤的,因為它試圖在一個表格內連接兩個不同的欄位。 修正後的查詢使用了正確的連接條件。
以上是如何在沒有直接外鍵關係的情況下連接表格?的詳細內容。更多資訊請關注PHP中文網其他相關文章!