关于SQL等价测试问题

目前做一个小项目,学生答题sql测试的,就是老师出题,学生回答sql语句那种,以前的项目都是用sql语句查询数据库
现在要用程序自动测试两个sql语句是否完全等价,简单的好办了但是越做越发现一个问题,就是sql等价不好判断
具体在现实中遇到这么一个问题
比如 有关系 R (A,B) 目前数据库里的数据有
A    B
--------------------------
2     3
3     5
6     7
4     5

如果老师的题目是取出 该关系中所有a > 2的 记录 标准的答案应该是
: select * from r where a>2
大家看到了吧,但是由于数据库里记录的都是a>2的
所以,学生回答可能是
select * from r ;
如果简单的从数据库执行情况检查的话,这两条句子结果是一样的,可是如果记录
A    B
--------------------------
1     3
2    5
6     7
4     5
这时,两个句子查询结果就不等价了
当然我这只是举个例子来说明这种sql情况存在,实际中可能还有很多情况存在并不是所有列都是数字类型的
标准sql的列类型可能都有,where后面的条件也是千差万别
现在被卡在这里了,请je上的筒靴们给个思路,这种测试怎么做,目前我只是用antlr分析出sql的where条件出来


作者: kjj 
声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

已有 0 人发表回复,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-12-18 18:26  Fervour  阅读(390)  评论(0编辑  收藏  举报