以下语句将查找所有没有订单或有订单的客户?

问题描述 投票:0回答:2
SELECT
    name
FROM
    customers
WHERE
    NOT EXISTS (
        SELECT
            NULL
        FROM
            orders
        WHERE
            orders.customer_id = customers.customer_id
    )
ORDER BY
    name;

并且如果您能告诉我如何使用不存在并选择null?

sql oracle select null not-exists
2个回答
0
投票

not exists条件确保orders表中没有对应customer_id的记录。

此查询为您提供所有没有订单的客户。

not exists条件下的子查询返回什么并不重要:not exists的要点是检查子查询是否返回something。一个经常满足的约定是使用select 1,但实际上可能是任何东西。


0
投票

您的查询看起来还可以。我可以这样写:

SELECT c.name
FROM customers c
WHERE NOT EXISTS (SELECT 1
                  FROM orders o
                  WHERE o.customer_id = c.customer_id
                 )
ORDER BY c.name;

注意:

  • 这等效于您的查询。
  • 这建议使用表别名。
  • 我只是不喜欢SELECT NULLNULL通常表示“丢失”或“未知”。加号SELECT 1更容易键入。但是,EXISTS正在检查是否存在,因此该值无关紧要。
© www.soinside.com 2019 - 2024. All rights reserved.