在 SQL 中,DISTINCT
關(guān)鍵字用于返回唯一不同的值。當(dāng)使用 DISTINCT
與 SELECT
語句結(jié)合時,它會從指定的列中篩選出不同的值。關(guān)于 NULL
值的處理,SQL 標(biāo)準(zhǔn)規(guī)定,DISTINCT
關(guān)鍵字在比較時會將 NULL
值視為相等。這意味著,如果兩行中的某列都為 NULL
,那么這兩行會被視為相同的行,并且只會在結(jié)果集中返回一行。
以下是一個簡單的示例,說明了 DISTINCT
如何處理 NULL
值:
CREATE TABLE example (
id INT,
name VARCHAR(255),
value INT
);
INSERT INTO example (id, name, value) VALUES (1, 'A', 10);
INSERT INTO example (id, name, value) VALUES (2, 'B', 20);
INSERT INTO example (id, name, value) VALUES (3, 'C', NULL);
INSERT INTO example (id, name, value) VALUES (4, 'A', NULL);
SELECT DISTINCT name, value
FROM example;
在這個示例中,盡管有兩行的 name
列都是 ‘A’,但由于它們的 value
列分別是 10 和 NULL
,根據(jù) SQL 的 DISTINCT
規(guī)則,這兩行被視為不同的行。因此,查詢結(jié)果將包含兩行:
name | value
-----+-------
A | 10
B | 20
C | NULL
需要注意的是,不同的數(shù)據(jù)庫系統(tǒng)(如 MySQL、PostgreSQL、SQL Server 等)可能在處理 NULL
值時略有差異,但大多數(shù)系統(tǒng)都會遵循 SQL 標(biāo)準(zhǔn)的規(guī)定。因此,在實(shí)際使用中,建議查閱特定數(shù)據(jù)庫系統(tǒng)的文檔以了解其具體行為。