19/224
\begin{frame}
  \frametitle{Joins}
  
  \structureStudentsResults
  Consider a query with two tuple variables:
  \begin{center}
    \begin{code}{0.5\textwidth}{}
      \small\centering
      $
      \begin{array}{ll}
        \sql{select} & A_1\sql, \dots\sql, A_n \\
        \sql{from}   & \sql{Students S, Results R} \\
        \sql{where}  & C
      \end{array}
      $
    \end{code}
  \end{center}
  \pause
  \begin{itemize}
    \item \sql{S} ranges over 5 rows in \sql{Students}, 
    \item \sql{R} ranges over 8 rows in \sql{Results}.
  \end{itemize}
  \medskip\pause
  
  \emph{Conceptually}, all $5 \cdot 8 = 40$ combinations will be considered:
    \begin{tcenter}
    \begin{code}{0.5\textwidth}{}
      \small\centering
      \begin{algorithmic}
        \FORALL{\textbf{rows} $\sql{S} \in \sql{Students}$}
        \FORALL{\textbf{rows} $\sql{R} \in \sql{Results}$}
        \IF{$C$}
        \STATE \textbf{print} $A_1, \dots, A_n$
        \ENDIF
        \ENDFOR
        \ENDFOR
      \end{algorithmic}
    \end{code}
    \end{tcenter}
  \bigskip
\end{frame}