PostgreSQL 教程: IS NULL

九月 5, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的IS NULL运算符,来检查值是否为 NULL。

NULL 和 IS NULL 运算符简介

在数据库世界中,NULL 意味着缺少信息或不适用。NULL 不是一个值,因此,您不能将它与任何其他值(例如数字或字符串)进行比较。NULL 与值的比较将始终得到 NULL,这意味着结果未知。

此外,NULL 不等于 NULL,因此以下表达式返回 NULL:

NULL = NULL

假设您有一个contacts表存储联系人的名字、姓氏、电子邮件和电话号码。在记录联系人时,您可能不知道联系人的电话号码。

为了解决这个问题,您可以将phone列定义为可为空列,并在保存联系人信息时将 NULL 插入phone列中。

CREATE TABLE contacts(
    id INT GENERATED BY DEFAULT AS IDENTITY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(255) NOT NULL,
    phone VARCHAR(15),
    PRIMARY KEY (id)
);

请注意,您将在后续教程中学习如何创建新表。现在,您只需要执行上面的语句即可创建contacts表。

如果执行CREATE TABLE语句时出现错误,您的 PostgreSQL 版本可能不支持标识列语法。在这种情况下,您可以使用以下语句:

CREATE TABLE contacts(
    id SERIAL,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(255) NOT NULL,
    phone VARCHAR(15),
    PRIMARY KEY (id)
);

以下语句插入两个联系人,一个有电话号码,另一个没有:

INSERT INTO contacts(first_name, last_name, email, phone)
VALUES ('John','Doe','john.doe@rockdata.net',NULL),
    ('Lily','Bush','lily.bush@rockdata.net','(408-234-2764)');

要查找没有电话号码的联系人,您可以使用以下语句:

SELECT
    id,
    first_name,
    last_name,
    email,
    phone
FROM
    contacts
WHERE
    phone = NULL;

该语句不返回任何行。这是因为WHERE子句中的表达式phone = NULL始终返回 false。

即使电话列中存在 NULL,表达式NULL = NULL也会返回 false。这是因为 NULL 不等于任何值,甚至它本身也不等于。

要检查值是否为 NULL,请使用IS NULL运算符:

value IS NULL

如果值为 NULL,则表达式返回 true,否则返回 false。

因此,要获取电话列中没有存储任何电话号码的联系人,请使用以下语句:

SELECT
    id,
    first_name,
    last_name,
    email,
    phone
FROM
    contacts
WHERE
    phone IS NULL;

这是输出:

PostgreSQL IS NULL

IS NOT NULL 运算符

要检查值是否不为 NULL,请使用IS NOT NULL运算符:

value IS NOT NULL

如果值不为 NULL,则表达式返回 true;如果值为 NULL,则表达式返回 false。

例如,要查找有电话号码的联系人,您可以使用以下语句:

SELECT
    id,
    first_name,
    last_name,
    email,
    phone
FROM
    contacts
WHERE
    phone IS NOT NULL;

输出是:

PostgreSQL IS NOT NULL example

在本教程中,您学习了如何使用 PostgreSQL 的IS NULL运算符,来检查值是否为 NULL。