SQL 最強大的功能之一是 JOIN 作業,它提供了一種簡捷的方式來將一個資料表中的每一列與另一個資料表中的每一列組合起來。然而,有時我們可能希望從一個資料表中找出另一個資料表中不存在的值。正如我們在今天的文章中所見,JOIN 也可以用於此目的,方法是包含用於連接資料表的述詞,被稱為反聯結(Anti Join)。它們在回答各種商業相關問題時非常有用,例如:
- 哪些客戶沒有下過訂單?
- 哪些員工尚未被分配部門?
- 哪些銷售人員本週沒有成交交易?
本文將使用 PostgreSQL 的 dvdrental 資料庫 dvdrental 資料庫來介紹反聯結的類型以及示範如何編寫它們。我們將在 Navicat Premium Lite 17 中編寫並執行這些查詢。
大多數資料庫開發人員和管理員對標準的內部、外部、左方和右方聯結類型都很熟悉。雖然這些聯結可以使用 ANSI SQL 編寫,但還有其他類型的聯結是基於關係代數運算子,這些運算子在 SQL 中並沒有語法可以表示。今天我們將探討其中一種聯結類型:半聯結(SEMI JOIN)。下週我們將研究類似的反聯結。為了更好地理解這些類型的聯結是如何運作,我們將使用 Navicat Premium Lite 17 在 PostgreSQL 的 dvdrental 資料庫執行一些 SELECT 查詢。它是一個基於 MySQL Sakila 範例資料庫的免費資料庫。
如果你已接觸編寫 SQL 查詢一段時間,你可能對 WHERE 子句非常熟悉。雖然 WHERE 子句對彙總欄位沒有影響,但有一種方法可以根據彙總值篩選記錄,那就是使用 HAVING 子句。本文將介紹它的工作原理,並提供一些在 SELECT 查詢中使用它的範例。
SQL 的 EXISTS 運算子為我們提供了一種根據某些其他資料的存在(或不存在)來擷取資料的簡單方法。更具體地說,它是一個邏輯運算子,用於評估子查詢的結果並傳回一個布林值(Boolean),指示是否傳回列。雖然 IN 運算子可用於類似的目的,但仍需要注意一些差異。本文將透過幾個範例介紹如何使用 EXISTS 運算子,並提供有關何時使用 EXISTS 而不是 IN 的一些指引。
在九十年代中期,Sun Microsystems 推出了一種可以「一次編寫,到處執行」的語言。這種語言就是 Java。儘管 Java 後來成為迄今為止最受歡迎的程式語言之一,但他們的口號事實證明有點樂觀。Java 語言的發展過程與 SQL 的發展過程確實有一些相似之處。它也可以從一個資料庫移植到另一個資料庫,甚至跨作業系統,而且幾乎不需要進行任何修改。至少,這是夢想。在現實世界中,生產級程式碼往往需要一些調整才能在新環境中運作。本篇文章將概述不同資料庫供應商之間 SQL 語法可能不同的一些原因。
- 2025 (1)
- 2024 (1)
- 2023 (1)
- 2022 (1)
- 2021 (1)
- 2020 (1)
- 2019 (1)
- 2018 (1)
- 2017 (1)

