Query processing in databases can be divided into two steps:selecting an 'optimal' evaluation strategy, and executing it. We first presentelementary nested loop and relational algebra algorithms for query execution andpoint out some opportunities for improving their performance. A survey ofoptimization strategies, structured in query transformation techniques andaccess planning methods, follows. Finally, extensions for special-purpose querysystems are briefly addressed