209/224
\begin{frame}
  \frametitle{Specifying the Join Predicate}

  \begin{goal}{}
  The \emph{join predicate} may be specified as follows:
  \begin{itemize}
  \smallskip
    \item 
      \emph{\sql{natural}} prepended to join operator name.\\
      \begin{code}{0.8\textwidth}{}
        \sql{Results natural join Exercises}
      \end{code}\\
      Yields comparison of columns with the same name.
  \smallskip
    \item 
      \emph{\sql{using (A1, ..., An)}} after the second table.\\
      \begin{code}{0.8\textwidth}{}
        \sql{Results join Exercises using (category,number)}
      \end{code}\\
      The $A_i$ must be columns appearing in both tables. 
      The join predicate then is  \sql{R.A1 = S.A1 and} \ldots \sql{and R.An = S.An}.
  \smallskip
    \item 
      \emph{\sql{on (condition)}} after the second table.\\
      \begin{code}{0.8\textwidth}{}
        \sql{Students S join Results R on (S.sid = R.sid)}
      \end{code}\\
      The matching condition works similar to the where clause,
      but is important in combination with left/right joins.
  \smallskip
  \end{itemize}
  The \sql{cross join} operator (next slide) has no join predicate.
  \end{goal}
\end{frame}