zoukankan      html  css  js  c++  java
  • MySQL中EXISTS和IN的比较

    EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
    EXISTS 指定一个子查询,检测 行 的存在。


    select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
    select * from TableIn where ANAME in(select BNAME from TableEx)

    这两个查询返回相同结果,也就是TableIn表的name 需要在 TableEx表的name存在。如果exists子查询是有结果集,就返回true,否则返回false;
    exists的运行方式:先运行主查询一次 再去子查询里查询是否有对应记录,如果有,返回ture,反之返回false,再根据主查询中的每一行去子查询里去查询.

    IN的运行方式:in的子查询要返回结果集。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.

    EXISTS与IN的使用效率比较,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

    NOT IN 和 NOT EXISTS的道理是一样的,NOT EXISTS的效率依然高于NOT IN

    文章借鉴于:https://www.cnblogs.com/qlqwjy/p/8598091.html

  • 相关阅读:
    html中script标签的使用方法
    css关于浮动的高度塌陷
    canvas用数组方式做出下雨效果
    canvas简易画板。
    html5新标签
    闭包的意义及用法
    字符串的添加方法
    js几种数组遍历方法.
    简易网页打卡页面.
    回忆继承多态
  • 原文地址:https://www.cnblogs.com/CatcherLJ/p/11636274.html
Copyright © 2011-2022 走看看