  We describe a system called Qr-Hint that, given a (correct) target query Q*
and a (wrong) working query Q, both expressed in SQL, provides actionable hints
for the user to fix the working query so that it becomes semantically
equivalent to the target. It is particularly useful in an educational setting,
where novices can receive help from Qr-Hint without requiring extensive
personal tutoring. Since there are many different ways to write a correct
query, we do not want to base our hints completely on how Q* is written;
instead, starting with the user's own working query, Qr-Hint purposefully
guides the user through a sequence of steps that provably lead to a correct
query, which will be equivalent to Q* but may still "look" quite different from
it. Ideally, we would like Qr-Hint's hints to lead to the "smallest" possible
corrections to Q. However, optimality is not always achievable in this case due
to some foundational hurdles such as the undecidability of SQL query
equivalence and the complexity of logic minimization. Nonetheless, by carefully
decomposing and formulating the problems and developing principled solutions,
we are able to provide provably correct and locally optimal hints through
Qr-Hint. We show the effectiveness of Qr-Hint through quality and performance
experiments as well as a user study in an educational setting.
