I think having real life data is a great idea. I think this is especially helpful to people who are doing web site work directed to a large audience as they can see how someone else solved a simliar problem. I'm not sure the data is helpful to people learning to write internal business applications which tend to be much more complex and alot messier in terms of data inputs.
SQL comes in flavors though. And the best performing SQL is often specfic to the vendor. It's true that this comes up mainly at the more advanced stages of learning SQL, but if this is to be a tool that will help in anything other than learning the basics of joining and selecting, how are we going to account for this?
Just brainstorming the problem here. Are we going to create a translation tool? So the learner can write queries in his or her flavor of SQL and they get translated to the SQL the data store uses? This, by the way, would also be extremely helpful for people moving from one platform to another. Think how much easier it would be to learn PL/SQL if you could translate the T-SQL you already know.
Or could we set up small downloadable data stores in different database backends that are populated by an ETL process. Then people could learn against the database they really need to be able to write queries against. We could even provide links to where people could download the free versions of the various vendor implementations (I think MYSQL, SQL Server and Oracle would be the ones I'd start with.)
As far as the question about people learning the SQl to change data, when we are looking to make a change to fix some bad data, we put it in a transaction, write a select to select the records we are going to change, write the delete, insert or update, put the same select after the SQL to change the data and rollback the change. This way you can see the before and after but not actually change the data. Could the button that runs the query be changesd so that it adds these elements (or that the query will fail without them)? That way people can see how their change would affect the data without actually affecting it. It also teaches them good habits in terms of learning to check results before commiting to the path.
One thing I would like to see is a structured series of tutorials using the data. People don't tend to learn SQL in any structured way and even experienced SQL writers tend to have knowledge gaps. When I was teaching databases, I found that all the avaiable textbooks were poorly designed for learning SQL. They concentrated first on database design which made no sense as you can't design a database until you first have experience querying it. Then they taught SQL in terms of this is how you do an inner join, this is how you do a left join, etc. They teach how to write a cursor, but not when should write one and, more importantly in this case, when you shouldn't. But really people need to be taught SQL (and other languages as well) in terms of this is problem you will encounter, this how you solve it. I'm currently working on a series of Wiki articles at http://lessthandot.com/ on how to solve various common SQL problems (or design patterns if you will), these could easily be a start for me to create such a curriculum - something I've long wanted to do and now have the time available to do.
Another idea would be to pose different query problems and have a few experts in each database write queries to solve it. We could try to get several solutions per database for complex problems and then have a discussion as to which to chose under which circumstances. If we did this in a private forum where people had to be invited to join, we could work out some top notch solutions and publish them on the training site. Kind of a we pose the problem to the student, then after he submits a solution, he can see what the experts did for the same problem and more importantly what their thought process about their solutions was.
As usual I've babbled on to a ridiculous extent. Stopping now.