SQL查询 —— 存在一个表而不在另一个表中的数据

A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引。

方法一

使用 not in ,容易理解,效率低~执行时间为:1.395秒~

select distinct A.ID from A where A.ID not in (select ID from B)

方法二

使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID字段为 null的记录~执行时间:0.739秒~

select A.ID from A left join B on A.ID=B.ID where B.ID is null

方法三

逻辑相对复杂,但是速度最快~执行时间: 0.570秒~

select * from B where (select count(1) as num from A where A.ID = B.ID) = 0

原文地址:https://www.cnblogs.com/yifanSJ/p/9170617.html

时间: 2024-11-01 21:25:54

SQL查询 —— 存在一个表而不在另一个表中的数据的相关文章

SQL语句技巧:查询存在一个表而不在另一个表中的数据记录

原文:SQL语句技巧:查询存在一个表而不在另一个表中的数据记录 方法一(仅适用单个字段)使用 not in ,容易理解,效率低 select A.ID from A where A.ID not in (select ID from B) 方法二(适用多个字段匹配)使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录 select A.ID from A left join B on A.ID=B.ID where

SQL 存在一个表而不在另一个表中的数据

原文链接:http://blog.csdn.net/windren06/article/details/8188136 (转)A.B两表,找出ID字段中,存在A表,但是不存在B表的数据.A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引. 方法一 使用 not in ,容易理解,效率低  ~执行时间为:1.395秒~ 1 select distinct A.ID from A where A.ID not in (select ID from B) 方法二 使用

MYSQL查询~ 存在一个表而不在另一个表中的数据

A.B两表,找出ID字段中,存在A表,但是不存在B表的数据.A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引. 方法一 使用 not in ,容易理解,效率低  ~执行时间为:1.395秒~ 1 select distinct A.ID from A where A.ID not in (select ID from B) 方法二 使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录

【sql查询与优化】3.操作多个表

注:以下所有sql案例均取自"oracle查询优化改写技巧与案例"丛书. EMP表的详细: 查询所有信息, SQL> select * from emp; EMPNO ENAME                JOB                       MGR HIREDATE       SAL        COMM       DEPTNO ---------- -------------------- ------------------ ---------- -

SQL存在一个表而不在另一个表中的数据

select a.id,a.oacode,a.custid,a.custname,a.xsz,a.salename,a.communicationtheme,a.communicationproperty,a.communicationtime,a.productmanager,'' creator,a.creator oaCreator,a.createdate,case when a.oastate='正常结束' then 3 else 0 end status from reception

SQL查询几种的区别。

最近看了几篇SQL查询的文章做一下总结哦,大概简记如下: SQL查询的实质是,是指从数据库中取得数据的子集,可以先取列子集,然后再取符合条件的行子集. 1.单表查询: SELECT [Name] ,[GroupName]  FROM [AdventureWorks].[HumanResources].[Department]WHERE DepartmentID>1 and DepartmentID<3 or DepartmentID>5 and DepartmentID<7 2.多

sql 查询 – left join on

p{line-height: 200%} 1. 问题引入 主要是为了查询在一个表中出现,而不在另一个表中出现的数据,具体来说: 如下图所示, 有A.B两个表,其中B表的Aid字段参照A表的主键id,为了查询在A表中出现,却没有被B表引用的数据: 限定条件:A和B中is_deleted字段为'n'  并且B中type为'common'. 2. 解决方法 2.1 left join on 使用not in可以方便实现,具体为: select p.id, p.is_deleted, q.id from

SQL查询效率:100w数据查询只需要1秒钟

内存: 4 G os: windows 2003 数据库: ms sql server 2008 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1. -- 建表 create table t_userinfo ( userid int identity(1,1) primary key nonclustered, nick varchar(50) not null default '', classid int not null defaul

SQL查询语句优化方法

以下是网上流传比较广泛的30种SQL查询语句优化方法: 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查