(转)查询A、B表中,A表中存在B表不存在的数据

(转)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的记录  ~执行时间:0.739秒~

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

  图解

方法三

  逻辑相对复杂,但是速度最快  ~执行时间: 0.570秒~(感觉这种方式挺好)

1  select * from  B

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

时间: 2024-10-04 17:29:05

(转)查询A、B表中,A表中存在B表不存在的数据的相关文章

查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅 (1)查询SQLServer2005中某个数据库中的表结构 SELECT TOP 100 PERCENT --a.id,CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,CASE WHEN a.colorder = 1 THEN isnull(f.v

查询MySQL中某个数据库中有多少张表

SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES   WHERE table_schema = '数据库' GROUP BY table_schema; 这还是头一次接触information_schema这个数据库, information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式.什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.有些时候用于表

Hive数据导入——数据存储在Hadoop分布式文件系统中,往Hive表里面导入数据只是简单的将数据移动到表所在的目录中!

转自:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929 Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中.Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据.所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中! Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

闭关修炼中 *** Java常用算法之 -- 顺序表结构

给我的好姐姐聊聊天代码也打完了,小弟可是一心二用了,不过代码确实是挺长的. 代码打的时间长短不重要,重要的是理解~理解~理解.重要的事说三遍!!! 每天的重复,恨不得一天过成两天马上结束了,能多学点是点了. 山再高,咱能有耐心.同样如此~哈哈. 贴上代码吧: 1 import java.util.Scanner; 2 3 /***************************************** 4 * * 5 * 顺序结构 * 6 * * 7 ********************

SQLSERVER中如何快速比较两张表的不一样

一般来说,如何检测两张表的内容是否一致,体现在复制的时候发布端和订阅端的两端的数据上面 我这里罗列了一些如何从数据库层面来解决此类问题的方法 第一步当然就是检查记录数是否一致,否则不用想其他方法了~这里我们用两张表t1_old,t1_new来演示 方法介绍 方法一:老老实实看表结构和表记录数,弊端是根本看不到两张表的数据是否一致,只是看到表结构和记录数是否一致 --表结构: CREATE TABLE t1_old ( id int NOT NULL, log_time DATETIME DEFA

深入了解STL中set与hash_set,hash表基础

一,set和hash_set简介 在STL中,set是以红黑树(RB-Tree)作为底层数据结构的,hash_set是以哈希表(Hash table)作为底层数据结构的.set可以在时间复杂度为O(logN)的情况下插入,删除和查找数据.hash_set操作的时间度则比较复杂,取决于哈希函数和哈希表的负载情况. 二,SET使用范例(hash_set类似) 1 #include <set> 2 #include <ctime> 3 #include <cstdio> 4

转wensy的个人空间 :关于“ORA-01653: 表 SYS.AUD$ 无法通过 128 (在表空间 SYSTEM 中) 扩展”的错误

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 5月 17 18:31:08 2010 Copyright (c) 1982, 2007, Oracle.  All rights reserved. ERROR: ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01653: 表 SYS.AUD$ 无法通过 128 (在表空间 SYSTEM 中) 扩展 ORA-02002: 写入审计线索时出错 ORA-00604: 递归 SQL 级

Android学习笔记:访问和添加通讯录中的联系人和联系人数据库表简介一

直接看代码,有详细注释. 1.联系人的数据库文件的位置 /data/data/com.android.providers.contacts/databases.contacts2.db 2.数据库中重要的几张表 contacts表:该表保存了所有的手机联系人,每个联系人占一行,该表保存了联系人的ContactID.联系次数.          最后一次联系的时间.是否含有号码.是否被添加到收藏夹等信息.可以与表的字段名相对应      理解. raw_contacts表:该表保存了所有创建过的手

SQL中的笛卡儿积问题和多表连接操作

(scott账户) SELECT * FROM scott.dept;--4SELECT * FROM scott.emp;--14 /**笛卡尔积内连接(等值连接)外连接(非等值连接)自连接*/ --笛卡尔积--当查询数据时没有使用连接条件,会查出所有关联数据--4*14=56SELECT * FROM scott.dept,scott.emp; --注意:多表连接查询一定要带关联条件,否则就会出现笛卡尔积--总结:多表连接第一步就是找关联条件 --emp.deptno = dept.dept