在实际开发中,我们往往需要比较两个或多个表数据的差别,比较那些数据相同那些数据不相同,这时我们有一下三种方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用连接查询(inner join,left join 或者 right join)。

看下面的数据,我们准备选择出在depart_info中的pid在user_info中不存在的depart_信息。

有表1:depart_info

表2:user_info

方法一:采用NOT IN

IN和NOT IN后面接的是一个集合,in 是把外表和内表作hash 连接。

   SELECT d.* FROM depart_info d WHERE NOT EXISTS (SELECT * FROM user_info u WHERE d.pid = u.pid);

经测试耗时在0.002s左右。

方法二:采用NOT EXISTS

EXISTS 和 NOT EXISTS是对外表作loop循环,每次loop循环再对内表进行查询,

  SELECT d.* FROM depart_info d WHERE NOT EXISTS (SELECT * FROM user_info u WHERE d.pid = u.pid);

经测试耗时在0.002s左右。

方法三:采用连接查询

连接查询包括:

1、自连接(join 等同于inner join ):查询结果为两边都存在的数据

2、左连接 left join :返回左边全部数据,右边存在返回,不存在为null

3、 右连接 right join :返回右边全部数据,左边存在返回,不存在为null

4、 全连接 full join :只要某个表中存在就返回,另一个不存在为nul

   SELECT d.* FROM depart_info d LEFT JOIN user_info u ON d.pid = u.pid WHERE u.pid IS NULL ;

经测试耗时在0.001s左右

总结:

1、对于小量数据exists 和in差不多,如果数据较多的话(在百万行)建议使用exists,更好的话使用关联查询。

2、数量较小,如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。

3、如果子查询中返回的任意一条记录含有空值,则IN查询将不返回任何记录,这点需注意。

4、返回数据是两个表的多个字段数据,建议使用关联查询。不仅速度快,而且返回数据可以自定义。

Sql语句优化-查询两表不同行NOT IN、NOT EXISTS、连接查询Left Join相关推荐

  1. SSH注解 关于hibernate一对一双向外键级联关系 查询两表的内容 例子

    由于要查询两张表的内容,所以去了解了下hibernate 的一对一级联 .现在写了个简单的SSH 注解的 一对一双向级联. 关于一对一双向级联详解我推荐这个博客.我感觉写的很好.     hibern ...

  2. sql 一个字段在另外一个表没出现_都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的...

    引言 数据库的性能优化技术一直是个老生常谈的问题,不管是MySQL.SQL Server还是Oracle. 对于我们IT开发人员和运维人员,掌握常用的SQL 优化语句是非常必要的,它可以使你的工作变得 ...

  3. SQL数据库不用SQL语句能显示全表的内容_Sql性能优化看这一篇就够了

    前言 一个优秀开发的必备技能:性能优化,包括:JVM调优.缓存.Sql性能优化等.本文主要讲基于Mysql的sql性能优化. 知识储备 首先我们需要了解执行一条查询SQL时Mysql的处理过程: ​其 ...

  4. sql语句用变量替换表名_使用内存优化表替换SQL临时表和表变量

    sql语句用变量替换表名 TempDB usage can be considered as a performance bottleneck for workloads that use SQL t ...

  5. mysql更新两表所有记录语句怎么写_mysql 一条sql语句update更新两个表

    mysql 一条sql语句update更新两个表 你写过一条sql语句来修改两个表的数据吗? UPDATE test.table1 t1,test.table2 t2 SET t1.aa='a',t1 ...

  6. Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表、修改表,以及增、删、改、查)之详细攻略

    Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表.修改表,以及增.删.改.查)之详细攻略 目录 一.两种方法建立表.修改表,插入多条数据记录 ...

  7. SQL语句优化技术分析

    SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  8. 数据库 sql 语句优化

    目录 1.查询 SQL 尽量不要使用 select *,而是 select 具体字段 2.如果知道查询结果只有一条或者只要最大/最小一条记录,建议用 limit 1 3.应尽量避免在 where 子句 ...

  9. 【腾讯面试题】SQL语句优化方法有哪些?

    SQL语句优化 性能不理想的系统中,除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化. 为了获得稳定的执行性能,SQL语句越简单越好.对复杂 ...

  10. mysql常用sql语句优化

    转载自:http://www.cnblogs.com/gomysql/p/3632209.html 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要因素.当然还有其他方 ...

最新文章

  1. Linux正则表达式grep与egrep
  2. 信息科学部鼓励科学家更多瞄准“原创”研究
  3. python【蓝桥杯vip练习题库】ADV-297快速排序
  4. android闹钟的需求分析,手机小闹钟需求分析
  5. .php on line 0,启动禅道项目管理软件时,报PHP Warning: PHP Startup: in Unknown on line 0解决方法...
  6. 15.4. syslog, klogctl - read and/or clear kernel message ring buffer; set console_loglevel
  7. Cobub无码埋点关键技术的实现
  8. poj 2503 Trie树
  9. 线性表:链栈算法实现
  10. 分层结构、协议、接口、服务
  11. 【进阶】PyTorch自定义CUDA算子教程与运行时间分析
  12. 【对数几率回归】matlab实现
  13. 计算机自动关机启机唤醒设置,电脑设置自动关机和自动开机
  14. linux静态路由表无故消失,探究几种静态路由的行为及自动删除行为
  15. 手机突然提示无服务,无法使用蜂窝移动 解决流程
  16. 思科计算机网络第五章考试,思科第一学期第五章试题和答案
  17. 入职一年,升职一次,涨薪两次
  18. Alink漫谈(十) :线性回归实现 之 数据预处理
  19. C/C++中的atan和atan2函数
  20. fect:基于面板数据的因果推断(上)

热门文章

  1. 【易实战】Spring Cloud Greenwich Hystrix:服务容错保护
  2. android.mk 依赖关系,Android NDK学习(二):编译脚本语法Android.mk和Application.mk
  3. aes加密c语言实现,基于C语言实现的aes256加密算法示例
  4. 通过函数指针实现四则运算
  5. 多元线性回归--machine learning
  6. 最大似然估计和最大后验估计
  7. faceframe kinect2.0 api 注意点
  8. 离散数学复习--第一章:命题逻辑
  9. 【AtCoder Grand Contest 036 B】Do Not Duplicate【循环节】
  10. 面试必掌握之计算机网络