Ever since Codd proposed relational calculus (first-order predicate logic) as a basic relational query language, it has been common for database query languages to have limited expressiveness. If a language cannot express everything computable, then it is natural to ask:
- 1.
What queries cannot be expressed in a language ℒ
- 2.
Which methods are available for proving such results?
Furthermore, if there are two query languages ℒ 1 and ℒ 2, one may want to compare their expressiveness: for example, ℒ 1 ⊈ ℒ 2 means that all queries expressible in ℒ 1 are also expressible in ℒ 2, but there are queries expressible in ℒ 2 that are not expressible in ℒ 1.
In 1975, Fagin [4] showed that queries such as the transitive closure of a graph and connectivity...