We mentioned at the start of this chapter that one of the main concerns when the relational
model was first launched commercially was the performance of queries. In particular, the
operation that gave most concern was the Join operation which, apart from Cartesian product,
is the most time-consuming operation to process, and one we have to ensure is performed
as efficiently as possible. Recall from Section 4.1.3 that the Theta join operation
defines a relation containing tuples that satisfy a specified predicate F from the Cartesian
product of two relations R and S, say. The predicate F is of the form R.a θ S.b, where θ may
be one of the logical comparison operators. If the predicate contains only equality (=), the
join is an Equijoin. If the join involves all common attributes of R and S, the join is called
a Natural join. In this section, we look at the main strategies for implementing the Join
operation: