zoukankan      html  css  js  c++  java
  • EXISTS 和 IN 的区别

    exists子句的用法

    select * from 表1 where exists (select * from 表2 where 表1.列名=表2.列名);

    exists子句返回的结果并不是从数据库中检索出的结果集,而是一个布尔值。如果exists子句中的select子句查询到结果,exists子句就返回true,反之返回false。

    因此exists子句中的select子句选择的列并不重要,重要的是exists子句中的select子句中的where子句的筛选条件。

    exists子句会对外表(即表1)用loop逐条记录查询,每次查询都会查看exists中的select语句,如果select子句返回记录行(无论返回记录行是多少,只要能返回),exists就会返回true,则外表中的当前记录就会被检索出来;如果select子句没有返回记录行,exists就会返回false,则外表中的当前记录就会被丢弃。

    not exists 与 exists相反,即当exists子句中有结果集返回时,loop到的当前记录会被丢弃;反之会被检索出来。

    in 子句的用法

    select * from 表1 where 列名 in (select 列名 from 表2 where 筛选条件);

    in查询相当于多个or条件的叠加。

    in子句需要先将子查询的记录全部查出来。注意in子句中的子查询返回的结果集必须只有一个字段。假设子查询返回的结果集有m条记录,在进行m次查询。

    exists 和 in 的效率

    当两个表的大小相当时,用exists和in的效率差别不大

    如果两个表一个大一个小,则子查询表大的用exists,子查询表小的用in。

  • 相关阅读:
    Android 解析内存泄漏
    Maven--几个需要补充的问题(三)
    android编程——百度地图初探
    poj 2752 Seek the Name, Seek the Fame(KMP需转换下思想)
    android面试题之二
    (3)选择元素——(2)文档对象模型(The Document Object Model)
    Tiny4412汇编流水灯代码,Tiny4412裸机LED操作[1]
    A9裸机
    2.1 linux中uboot移植
    芯片结构
  • 原文地址:https://www.cnblogs.com/0820LL/p/9781256.html
Copyright © 2011-2022 走看看