sql查询不在数据表的数据(sql语句如何查询有些表中没有的数据)

本文目录
- sql语句如何查询有些表中没有的数据
- 关于sql查询b表中存在,a表中不存在的数据
- sql查询一个表不包含另一个表的数据,两种方法
- SQL中,如何查询存在一个表的字段而不在另一个表的字段中的数据记录
- SQL中,如何查询存在一个表而不在另一个表中的数据记录
- oracle select 查询出了不在表里的数据
- sql 查询不存在一张表的数据
- SQL语句:怎样显示表里不存在的数据
- mysql查询数值不在表中的sql语句
- SQL 如何查询表中没有某数据
sql语句如何查询有些表中没有的数据
select 借书证号,姓名,单位
from 读者
where 借书证号 not in
(select 借书证号 from 借阅 where 借书日期》=cast(’2005-10-01’ as datetime))
这样试试
可是你第一个,为什么要用10月10号啊,不是10月1号吗?
关于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查询一个表不包含另一个表的数据,两种方法
1、用minus函数的方式:
select
*
from
CMN_FUND
where
FUND_CODE_ in
(select FUND_CODE_ from CMN_FUND minus select FUND_CODE_ from CMN_PROMOTION_FUND where FUND_CODE_ in
(select FUND_CODE_ from CMN_PROMOTION_FUND where SELLPROMOTE_CODE_ = #{promotionCode}))
and
FUNDCOMP_CODE_ = #{fundCompCode}
order by
FUND_CODE_
2、用not in来处理:
select
f.FUND_CODE_, f.SHORT_NAME
from
CMN_FUND f, CMN_PROMOTION_FUND p
where
f.FUND_CODE_ = p.FUND_CODE_
and
f.FUND_CODE_ not in (SELECT FUND_CODE_ from CMN_PROMOTION_FUND where PROMOTION_CODE = #{promotionCode})
and
f.FUNDCOMPCODE = #{fundCompCode}
SQL中,如何查询存在一个表的字段而不在另一个表的字段中的数据记录
select *from card where username not in(select username from user)
SQL中,如何查询存在一个表而不在另一个表中的数据记录
问题是怎么才算在两个表里都有?我以ID相同举例吧,其他的自己悟。 select * from a where id not in (select id from b) 这样就能列出a表里有而b表里没有的记录(以ID相同为标准)。 明白了嘛? 晕……你又没说是MYSQL……
oracle select 查询出了不在表里的数据
把存储过程F_GET做成函数。
过程的执行结果不返回值,F_GET(t.BM)=某个值,这样做不行。
sql 查询不存在一张表的数据
明白不在一个表中,干嘛还要关联它呢?
只是为了出这2个数据的话,可以如下:
-------------------------
SELECT ’2016-12-08’ AS BizTime
UNION
SELECT ’2016-12-09’
SQL语句:怎样显示表里不存在的数据
那变量表总可以建吧
declare @taba TABLE( NOT NULL)
insert @taba values(’1111111111111’)
insert @taba values(’333333333333’)
....
select * from @taba where tabid not in (select id from AAA)
没有个存储的地方是输出不了身份证号的,所以必须有临时表或者变量表
要不也可以这样
select id from AAA where id in (’1111111111111’,’333333333333’,’43434343434’,.....)
选出已经在AAA表中存在而且在这对号码中已存在的号码,再到EXCEL中利用公式删除相应的就行了
mysql查询数值不在表中的sql语句
select id from table where id in(1,2,3,4);这段先查询到你数据库存在的id,
然后在程序里面过滤掉这些id,剩下的就是数据不存在的id
SQL 如何查询表中没有某数据
SELECT T1.NAME1 FROM (select ’A’ AS NAME1 UNION ALL select ’B’ UNION ALL select ’C’ UNION ALL select ’D’ ) T1
LEFT JOIN (SELECT NAME FROM A表 GROUP BY NAME) T2 ON T1.NAME1 =T2.NAME WHERE T2.NAME IS NULL

更多文章:
在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)
2026年10月11日 05:20
countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)
2026年10月11日 03:30
正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)
2026年10月11日 03:00
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10





