关于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推荐



转载于:https://www.cnblogs.com/fervour/archive/2009/12/18/1627864.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值