1. A method of optimizing outerjoin queries performed on a database, said method comprising: rewriting an outerjoin query in a canonical abstraction representation; and optimizing the rewritten outerjoin query representation with a join optimizer.