sql查询 exists(not exists)与in(not in)

查询:
1.在SQL中使用EXISTS
从TEST_TB01中查询出在TEST_TB02中存在的记录,关联条件是两个表的id相等。

SELECT
aa.sensor_id,aa.part_id,aa.flag
FROM
TEST_TB01 aa
WHERE EXISTS
(SELECT 1 FROM
TEST_TB02 bb
WHERE aa.sensor_id = bb.sensor_id);

2.在SQL中使用NOT EXISTS
SELECT
aa.sensor_id,aa.part_id,aa.flag
FROM
TEST_TB01 aa
WHERE NOT EXISTS
(SELECT 1 FROM
TEST_TB02 bb
WHERE aa.sensor_id = bb.sensor_id);

3.在SQL中使用多个NOT EXISTS
SELECT
aa.sensor_id,aa.part_id,aa.flag
FROM
TEST_TB01 aa
WHERE NOT EXISTS
(SELECT 1 FROM
TEST_TB02 bb
WHERE aa.sensor_id = bb.sensor_id)
AND NOT EXISTS
(SELECT 1 FROM
TEST_TB03 cc
WHERE aa.sensor_id = cc.sensor_id);

4.在SQL中使用多个EXISTS
SELECT
aa.sensor_id,aa.part_id,aa.flag
FROM
TEST_TB01 aa
WHERE EXISTS
(SELECT 1 FROM
TEST_TB02 bb
WHERE aa.sensor_id = bb.sensor_id)
AND EXISTS
(SELECT 1 FROM
TEST_TB03 cc
WHERE aa.sensor_id = cc.sensor_id);
5.在SQL中使用NOT EXISTS和EXISTS
SELECT
aa.sensor_id,aa.part_id,aa.flag
FROM
TEST_TB01 aa
WHERE EXISTS
(SELECT 1 FROM
TEST_TB02 bb
WHERE aa.sensor_id = bb.sensor_id)
AND NOT EXISTS
(SELECT 1 FROM
TEST_TB03 cc
WHERE aa.sensor_id = cc.sensor_id);

6、在DELETE语句中使用EXISTS
DELETE FROM
TEST_TB01 aa
WHERE EXISTS
(SELECT 1 FROM
TEST_TB02 bb
WHERE aa.sensor_id = bb.sensor_id);

7、在UPDATE语句中使用EXISTS

UPDATE TEST_TB01 aa
SET (aa.part_id, aa.flag) =
(SELECT bb.part_id, bb.flag
FROM TEST_TB02 bb
WHERE aa.sensor_id = bb.sensor_id)
WHERE EXISTS
(SELECT 1 FROM TEST_TB02 cc
WHERE aa.sensor_id = cc.sensor_id);
In 语法
8、使用列值列表进行匹配:
SELECT 字段名
FROM 数据表
WHERE 字段名 IN(数据值_1,数据值_2,…)
9、使用子查询返回多个结果进行匹配:
SELECT *
FROM 表名
WHERE 列名 IN (SELECT 列名 FROM 表名 WHERE 条件)

10、使用子查询返回单个结果进行匹配:

SELECT *
FROM 表名
WHERE 列名 IN (SELECT 列名 FROM 表名 WHERE 条件 LIMIT 1)

11、使用多个列进行匹配:

SELECT *
FROM 表名
WHERE (列名1, 列名2) IN (SELECT 列名1, 列名2 FROM 表名 WHERE 条件)

12、IN与EXISTS的区别:

IN 运算符用于比较单个值或列与一组值,而 EXISTS 运算符用于检查子查询是否返回结果。
IN 运算符将整个列表与主查询比较,而 EXISTS 运算符只需找到符合条件的一行即可。
IN 运算符适用于静态数据列表,而 EXISTS 运算符适用于动态或复杂的子查询。

要选择使用 IN 还是 EXISTS,取决于查询的需求和性能。通常来说,EXISTS 运算符在处理大量数据时效率更高,因为它可以提前停止搜索一旦找到匹配的结果。

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值