📜  从 IN 子查询中删除 - SQL (1)

📅  最后修改于: 2023-12-03 15:36:13.655000             🧑  作者: Mango

从 IN 子查询中删除 - SQL

当使用 IN 子查询时, 如果需要从结果集中删除某些特定结果, 可以使用 NOT IN, 但是一些时候更加实用的方法是使用 LEFT OUTER JOINNULL

使用 NOT IN

使用 NOT IN 可以从结果集中删除特定的值。

语法
SELECT [列名] FROM [表名] WHERE [列名] NOT IN ([值1],[值2],[值3],...)
示例
SELECT *
FROM customers 
WHERE customer_id NOT IN (SELECT customer_id FROM orders)
使用 LEFT OUTER JOIN 与 NULL

当使用 LEFT OUTER JOIN 时, 如果不存在连接的行,则结果集中的值将为 NULL。 这种方法比使用 NOT IN 更加简单和直观。

语法
SELECT [列名]
FROM [表名]
LEFT OUTER JOIN [连接表名] ON [表名].[列名] = [连接表名].[列名]
WHERE [连接表名].[列名] IS NULL;
示例
SELECT *
FROM customers 
LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id
WHERE orders.customer_id IS NULL;

这将返回所有不存在订单的客户信息。

总结

无论使用 NOT IN 还是 LEFT OUTER JOINNULL。都可以从 IN 子查询中删除特定的值。但是特定的情况下,应该选择使用哪一种方法要根据实际情况而定。