193/224
\begin{frame}
  \frametitle{Sorting Output}
  
  If query output is to be read by humans, enforcing a certain
  \emph{tuple order} helps in interpreting the result.
  \begin{goal}{}
    ``Order by'' allows to specify a \emph{list of sorting criteria}.
  \end{goal}
  \pause
  \smallskip

  \begin{alertblock}{}
  Without such an ordering, the order is \emph{unpredictable}:
  \begin{itemize}
    \item Depends on the internal algorithms of the query optimiser.
    \item Order may change even query to query.
  \end{itemize}
  \end{alertblock}
  \pause
  \smallskip

  \begin{code}{\textwidth}{}
    \small
    \sql{order by attribute1 [asc|desc], attribute2 [asc|desc], \ldots}
  \end{code}

  \begin{goal}{}
  An \sql{order by} clause may specify multiple attribute names:
  \begin{itemize}
    \item 
    The second attribute is used for tuple ordering if they agree on
    the first attribute, and so on (\emph{lexicographic ordering}).
    \pause
    \item Sort in \emph{ascending} order (default): \sql{asc},
    \item Sort in \emph{descending} order: \sql{desc}.
  \end{itemize}
  \end{goal}
\end{frame}