本文简单讲述一下在使用IN,NOT IN,ANY,ALL等对从子查询中返回的数据做比较的时候一不小心就会犯的错误.
测试的的数据如下:TEST表中有3条数据,其中id为3的行name的值为null.
1,IN在子查询不返回数据的时候得到结果是false,这个比较容易理解.如下面的SQL不会查询到数据.
select * from test where name in (select name from test where id=4)
select * from test where name =any (select name from test where id=4)
2,IN在子查询返回的数据中有null值的时候,null不会用于比较,下面的语句只会返回id为2的行,id为3的行不会返回(null只能用is来比较)
select * from test where name in (select name from test where id=3 or id=2)
select * from test where name =any (select name from test where id=3 or id=2)
3,NOT IN在子查询不返回数据的时候得到结果是true,下面的语句会返回3条数据.
select * from test where name not in (select name from test where id=4)
测试的的数据如下:TEST表中有3条数据,其中id为3的行name的值为null.
ID | Name |
1 | name1 |
2 | name2 |
3 |
select * from test where name in (select name from test where id=4)
select * from test where name =any (select name from test where id=4)
2,IN在子查询返回的数据中有null值的时候,null不会用于比较,下面的语句只会返回id为2的行,id为3的行不会返回(null只能用is来比较)
select * from test where name in (select name from test where id=3 or id=2)
select * from test where name =any (select name from test where id=3 or id=2)
3,NOT IN在子查询不返回数据的时候得到结果是true,下面的语句会返回3条数据.
select * from test where name not in (select name from test where id=4)