SQL EXISTS


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

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

SQL EXISTS操作符介绍

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

下面是EXISTS操作符的语法:

1
WHERE EXISTS (subquery)

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

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

1
WHERE NOT EXISTS (subquery);

SQL EXISTS操作符示例

我们先修改一下库存

1
2
3
4
5
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

1
2
3
4
5
6
7
8
9
10
11
SELECT
itemid,attr1
FROM
item
WHERE
EXISTS(
SELECT itemid
FROM inventory
WHERE inventory.itemid = item.itemid
AND qty > 0
)

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

1
2
3
4
5
6
7
8
9
10
11
SELECT
itemid,attr1
FROM
item
WHERE
NOT EXISTS(
SELECT itemid
FROM inventory
WHERE inventory.itemid = item.itemid
AND qty > 0
);

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

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

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

1
2
3
4
5
6
7
8
SELECT
itemid,attr1
FROM
item
WHERE
EXISTS(
SELECT NULL
);


原文链接:https://codingdict.com/