SELECT
name
FROM
customers
WHERE
NOT EXISTS (
SELECT
NULL
FROM
orders
WHERE
orders.customer_id = customers.customer_id
)
ORDER BY
name;
并且如果您能告诉我如何使用不存在并选择null?
not exists
条件确保orders
表中没有对应customer_id
的记录。
此查询为您提供所有没有订单的客户。
not exists
条件下的子查询返回什么并不重要:not exists
的要点是检查子查询是否返回something。一个经常满足的约定是使用select 1
,但实际上可能是任何东西。
您的查询看起来还可以。我可以这样写:
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 NULL
。 NULL
通常表示“丢失”或“未知”。加号SELECT 1
更容易键入。但是,EXISTS
正在检查行是否存在,因此该值无关紧要。