MySQL基础系列:LEFT JOIN查询差集

目的:查询表A与表B的差集,其中A表数据多与B表数据。

1 表

构造表数据:user表与sys_user,取两表的差集,即查询出user表id为4和9两条数据。

1.1 user

在这里插入图片描述

1.2 sys_user

在这里插入图片描述

2 查询

2.1 LEFT JOIN

通过左连接合并数据,A LEFT JOIN B,A表中存在的数据,B表中不存在的数据使用NULL填充,查询语句如下:

SELECT 
    t1.id,t2.id
FROM
    db_monkey_run.tb_user t1
        LEFT JOIN
    (SELECT 
        id
    FROM
        db_monkey_run.tb_sys_user) t2 ON t1.id = t2.id

查询结果如2.1所示。
在这里插入图片描述

2.2 差集

A表和B表取差集,即B表为NULL的对应的A表数据,通过LEFT JOIN后,使用条件为NULL判断,过滤出差集的数据,查询语句如下:

SELECT 
    t1.id
FROM
    db_monkey_run.tb_user t1
        LEFT JOIN
    (SELECT 
        id
    FROM
        db_monkey_run.tb_sys_user) t2 ON t1.id = t2.id
WHERE
    t2.id IS NULL;

查询结果如图2.2所示。
在这里插入图片描述

3 查询计划

3.1 LEFT JOIN

EXPLAIN SELECT 
    t1.id
FROM
    db_monkey_run.tb_sys_user t1
        LEFT JOIN
    (SELECT 
        id
    FROM
        db_monkey_run.tb_user) t2 ON t1.id = t2.id
WHERE
    t2.id IS NULL;

3.2 子查询

EXPLAIN SELECT 
    t1.*
FROM
    (SELECT 
        id
    FROM
        db_monkey_run.tb_sys_user) t1
WHERE
    t1.id NOT IN (SELECT 
            id
        FROM
            db_monkey_run.tb_user);

4 小结

LEFT JOIN拼接数据,通过NULL为过滤条件,查询两个表的差集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值