使用SQL EXISTS测试子查询中的行是否存在

在本教程中,将学习如何使用SQL EXISTS操作符来测试子查询是否有返回任意行。
如果你还不了解关于子查询的内容,可以先学习SQL子查询的内容。

SQL EXISTS

SQL EXISTS操作符介绍

EXISTS操作符用于检查子查询是否返回行。

下面是EXISTS操作符的语法:

WHERE EXISTS (subquery)

如果子查询返回至少一行,则表达式EXISTS (subquery)返回TRUE,否则返回FALSE。
注意,需要将子查询放在EXISTS操作符后面的括号中。

可以将NOT操作符与EXISTS操作符一起使用。

WHERE NOT EXISTS (subquery);

在SQL EXISTS操作符中子查询返回NULL的情况

如果子查询返回NULL,则EXIST NULL表达式将返回TRUE。

让我们看一下下面的例子:

SELECT 
    itemid,attr1
FROM
    item
WHERE
		EXISTS(
			SELECT NULL
		);

SQL EXISTS操作符示例

我们先修改一下库存

UPDATE inventory SET qty = 0 WHERE itemid = 'EST-1';
UPDATE inventory SET qty = 0 WHERE itemid = 'EST-2';
UPDATE inventory SET qty = 0 WHERE itemid = 'EST-5';
UPDATE inventory SET qty = 0 WHERE itemid = 'EST-6';
DELETE FROM inventory WHERE itemid = 'EST-7' LIMIT 1;

然后使用EXISTS操作符查找还有库存的产品型号。对于item表中的每个item,检查inventory表中qty是否大于0

SELECT 
    itemid,attr1
FROM
    item
WHERE
		EXISTS(
				SELECT itemid
				FROM inventory
				WHERE inventory.itemid = item.itemid
				AND qty > 0
		)

和NOT搭配使用,我们就可以找出已经没有库存的产品型号:

SELECT 
    itemid,attr1
FROM
    item
WHERE
	NOT	EXISTS(
        SELECT itemid
        FROM inventory
        WHERE inventory.itemid = item.itemid
        AND qty > 0
    );

日期:2018-11-15 17:16:06 来源:oir作者:oir