MySQL案例 1.5.7~1.5.8 用外连接求差集

作者: SQL开发者

准备数据:

create table class_a2(
    id int not null,
    name varchar(100) not null 
);
insert into class_a2(id, name)
            values(1, '田中'),
                (2, '铃木'),
                (3, '尹集院');
/*
 id |  name
----+--------
  1 | 田中
  2 | 铃木
  3 | 尹集院
(3 rows)
*/
create table class_b2(
    id int not null,
    name varchar(100) not null
);
insert into class_b2(id, name)
            values(1, '田中'),
                (2, '铃木'),
                (4, '西园寺');
/*
 id |  name
----+--------
  1 | 田中
  2 | 铃木
  4 | 西园寺
(3 rows)
*/

思路:

思路一(使用了关联子查询, 性能会不太好):

select * from class_a2
    where not exists (select *
                        from class_b2
                    where class_b2.id = class_a2.id);
/*
 id |  name
----+--------
  3 | 尹集院
(1 row)
*/

思路二(使用左或右外连接取补集):

select a.id, a.name
    from class_a2 a
        left outer join class_b2 b
            on a.id = b.id
where b.name is null;
/*
 id |  name
----+--------
  3 | 尹集院
(1 row)
*/

🤓虽然使用外连接来求补集/差集不符合外连接设计的目的, 但是对于支持差集运算的数据库, 这种方式比not in和not exists写法在性能佘昂更加高效

更多推荐

更多
这里什么都没有

近期文章

更多
文章目录

    推荐作者

    更多