日期:2014-05-17  浏览次数:20398 次

小白的问题:in和=的区别
select *  from stock where gid in (select gid from base) 和
select *  from stock,base where stock.gid=base.gid 
有什么区别了?
------最佳解决方案--------------------

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
--如果没有查询出来没有重复值的话就跟第二条语句一样的。

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

即:


= :符合条件的
in:在一定的范围内
------其他解决方案--------------------
in 是多个。=是一个
------其他解决方案--------------------
=的只能有一个值,in可以多个值,但是只能是一列,如果要多列,要改换exists
------其他解决方案--------------------
可是这两条执行出来是一样的
------其他解决方案--------------------
base表只有一条数据或者它的gid 重复。
------其他解决方案--------------------
都说完了,我说 好吧
------其他解决方案--------------------
in 是一对多的关系 相当于 or
 = 是一对一的关系

------其他解决方案--------------------
一般 = 或 exists 要快于 in

------其他解决方案--------------------
in 后面跟的子查询可能是多个值

用=是一一对应的关系
------其他解决方案--------------------
exists 和not exists 查询结果是完全相反的,即便exists 和not exists查出来的是整合表的数据
in和not in查询结果有可能是表的一部分,因为in和not in都排除不了null列
可以研究下大数据量下,执行计划和IO
------其他解决方案--------------------
where a=1
where a in(1,2,3,4,5)
------其他解决方案--------------------
select *  from stock where gid in (select gid from base) 和
select *  from stock,base where stock.gid=base.gid 
有什么区别了? 

第2种速度更快