区别是明摆着的啊,一个查询有条件,一个没有 name 和 address有索引下的情况下,速度一般来说会优于全表扫描,但是也未必一定走索引
where后面语句可能会用到索引
如果name,address 上面都有索引的话,select name,address from where name='%%' and address='%%' 将会走索引而不是全表扫描,速度会快很多
区别就是第一个会有结果集,有数据! 第二个没有结果集,因为你有条件,且条件是where name='%%' and address='%%' 而不是用like匹配!
楼主这两个SQL用sqlserver,oracle10G查询出来两个查询结果集不一样,其他产品还没试,但如果说区别的话,猜测楼主是为了想明白为什么这样子写吧?select name ,address from student 这个SQL毫无疑问是需要全表扫描的,select name,address from where name='%%' and address='%%'这个SQL因为有where语句,会先根据条件去找,如果name,address列有索引的话,这样子有条件的选择会避免全表扫描,会大大提高SQL执行效率。
如果是like的笔误的话.两者的区别在于对null的处理上. 第一句可以选出两个字段其中之一为null或都为null的数据,第二句只会选出两字段都不为null的数据. 原因如下. SQL> select 1 from dual where null like '%%';
name 和 address有索引下的情况下,速度一般来说会优于全表扫描,但是也未必一定走索引
第二个没有结果集,因为你有条件,且条件是where name='%%' and address='%%'
而不是用like匹配!
第一句可以选出两个字段其中之一为null或都为null的数据,第二句只会选出两字段都不为null的数据.
原因如下.
SQL> select 1 from dual where null like '%%';
1
----------
SQL>
_(下划线) 表示一个任意字符
%(百分号) 表示0个或多个任意字符要和like连用匹配再者两个%连着写有意义么?