当前位置:首页 » 编程语言 » sql查询a表不在b表
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql查询a表不在b表

发布时间: 2022-12-18 16:23:19

‘壹’ 查询a表中的 a1字段数据不在(b表b1字段数据和c表中c1字段数据)中的sql语句怎么写

1.
select *
from a
where a1 not in (select b1 from b)
and a1 not in (select c1 from c)

2.
select *
from a
where a1 not in (select b1 from b union all select c1 from c)

3.
select *
from a
left outer join b on b.b1=a.a1
left outer join c on c.c1=a.a1
where
b1 is null
and
c1 is null

‘贰’ SQL中,如何查询存在一个表而不在另一个表中的数据记录

问题是怎么才算在两个表里都有?我以ID相同举例吧,其他的自己悟。 select * from a where id not in (select id from b) 这样就能列出a表里有而b表里没有的记录(以ID相同为标准)。 明白了嘛? 晕……你又没说是MYSQL……

‘叁’ oracle 查找A表存在B表不存在的记录

1、创建测试表,

create table test_find_a(a varchar2(20), b varchar2(20));

create table test_find_b(a varchar2(20), b varchar2(20));

‘肆’ 如何用SQL写出在A表内,但不在B表内的所有字段,一个字段简单,但所有在A表内不在B表内的该如何写

select * from A left join B on A.id = B.id
自己参考一下

‘伍’ 用SQl语句查询在一张表却不在另外一张表的内容

大致是:
select
from
where
not exist
(select ** from **where**)

‘陆’ 关于sql查询b表中存在,a表中不存在的数据

这实际上是求非交集(差集)问题,sql语句求差集相对于求交集的办法要少得多。

求差集方法中,使用not in关键字进行筛选在逻辑上最容易理解,很多人都会想到利用到它,数据量不大时还行,但是它有个重大缺陷,那就是在碰到大数据表的情况下其运行效率极低,有没有可被利用的索引效率都一样极差。我曾在利用大数据表的测试中,发现not in 语句常常要花费数小时才能返回结果,最夸张的例子耗时竟然超过一天!在返回结果前数据查询会处在"假死"状态,让人感觉是返回了空集似的,其实不是那样的,只是数据库引擎尚未完成运算而已。

在有可被利用的索引情况下,我们可以利用非存在not exists子句来筛选出两表之间的差集,其运行效率是非常高的。以题主的语句为例可改写如下:

原来使用not in筛选差集,大数据表效率极差:
SELECT ipdz FROM ipdz_b WHERE ipdz not in(select ipdz_d from zj_b);

而使用not exists筛选差集,大数据表有索引可利用时返回结果酒快多了:
select b.ipdz from ipdz_b b where not exists(
select 1 from zj_b a where a.ipdz_d=b.ipdz);

请留意不要踩not exists的坑!尽管它在有可被利用的索引时运行效率极高,但是如果没可利用的索引它会跟not in一样在遇到大数据表时, 运行运行效率也很糟!

在没有索引可被利用的情况下,建议利用左(右)联接出现的null值来求出差集,但是需要留意并小心处理因两表连接所导致的记录行变多问题。

下面是以题主的表结构为例的sql语句写法,其返回结果集的速度还是很不错的:

left join 筛选差集:
select b.ipdz from ipdz_b b left join zj_b a on
a.ipdz_d=b.ipdz where a.ipdz_d is null;

这里假设a表的ipdz_d是唯一的,如果非唯一需调整如下

select b.ipdz from ipdz_b b left join (
select distinct ipzd_d from zj_b) a on
a.ipdz_d=b.ipdz where a.ipdz_d is null;

总结:

小数据量not in随便用,此方法逻辑简单,语句易于编写;
大数据量在有可利用的索引情况下,建议首选 not exists(因为效率最高);
大数据量时,有没有可被利用的索引not in都要避免使用。而not exists 在没索引可利用时也应避免使用,此时建议使用左left join或右连接返回差集会有比较好的表现。

后两种方法在逻辑上不太好理解,还要处理因连接导致的记录行变多问题,语句编写相对麻烦。

‘柒’ 怎么用sql语句查询存在于表a而不存在于表b的数据

第一个问题:select name1 from 表a minus select name1 from 表b
第二个问题:select a.*,b.* from 表a a,表b b where a.name1=b.name1