小白的问题: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种速度更快