select *  from stock where gid in (select gid from base) 和
select *  from stock,base where stock.gid=base.gid 
有什么区别了?

解决方案 »

  1.   

    =的只能有一个值,in可以多个值,但是只能是一列,如果要多列,要改换exists
      

  2.   

    base表只有一条数据或者它的gid 重复。
      

  3.   

    比如一个集合  A{a,b,c,d,e,f}   一个字符 d
    如果说:
    一个字符d = A中的 d   --  这是一个元素对应一个元素
    一个字符d in A            --  这是一个元素对应一个集合
      

  4.   

    in 一对多
    = 一对一即:
    = :符合条件的
    in:在一定的范围内
      

  5.   

    in 是一对多的关系 相当于 or
     = 是一对一的关系
      

  6.   

    一般 = 或 exists 要快于 in
      

  7.   

    exists 和not exists 查询结果是完全相反的,即便exists 和not exists查出来的是整合表的数据
    in和not in查询结果有可能是表的一部分,因为in和not in都排除不了null列
    可以研究下大数据量下,执行计划和IO
      

  8.   


    select *  from stock,base where stock.gid=base.gid 
    --这是2000以前的语法,相当于后来的
    select * from stock inner join base on stock.gid=base.gid
    select *  from stock where gid in (select gid from base)
    --这个是嵌套子查询等于
    select distinct * from stock join base on stock.gid=base.gid
    --如果没有查询出来没有重复值的话就跟第二条语句一样的。
      

  9.   

    where a=1
    where a in(1,2,3,4,5)
      

  10.   

    select *  from stock where gid in (select gid from base) 和
    select *  from stock,base where stock.gid=base.gid 
    有什么区别了? 第2种速度更快