
\begin{document}

\title{Implementierung von Subqueries im SECONDO Optimierer}
\author{Burkart Poneleit}
\maketitle
\section{Einleitung}
**Beschreibung SECONDO**
\section{Problembeschreibung}
Der SECONDO Optimierer soll um die Fähigkeit zur Übersetzung von geschachtelten Abfragen erweitert werden. Grundlagen zur Übersetzung liefert \cite{319745} und \cite{38723} Soweit möglich werden Queries mit Subqueries in äquivalente nicht geschachtelte Abfragen überführt werden. Grundsätzlich lassen sich geschachtelte Abfragen mit der 'nested-iteration' Methode ausführen, d.h. die Subquery wird für jedes Tupel der äußeren Abfrage ausgeführt. 

\begin{flushleft}
\subsection{Typ-A Queries}
\begin{math}
\text{select } A_{1},\dotsc,A_n \linebreak
\text{from } R_1,\dotsc,R_m \linebreak
\text{where } P_1,\dotsc,P_l \linebreak
A_i \theta (\text{select } \text{AGGR}(T_i.B) \linebreak
\text{from } T_1,\dotsc,T_s \linebreak
\text{where } Q_1,\dotsc,Q_r) \linebreak
\end{math}

\begin{math}
\text{select} A_{1},\dotsc,A_n \linebreak
\text{from } R_1,\dotsc,R_m \linebreak
\text{where } P_1,\dotsc,P_l \linebreak
A_i \theta C \linebreak
\end{math}

\begin{math}
C\text{ ist die durch Auswertung von } 
\text{select } \text{AGGR}(T_i.B) 
\text{ from } T_1,\dotsc,T_s
\text{where } Q_1,\dotsc,Q_r \linebreak
\text{gewonnene Konstante.}
\end{math}

\subsection{Algorithm NEST-N-J}
select $A_1 ,\ldots,A_n$ \linebreak 
from $R_1 ,\ldots,R_m$ \linebreak 
where $P_1,\ldots,P_l,$ \linebreak 
$X \theta ($select $T_i.B$ \linebreak 
from $T_1 ,\ldots,T_s$ \linebreak 
where $Q_1 ,\ldots,Q_r)$ \linebreak

select $A_1,\ldots,A_n$ \linebreak
from $R_1,\ldots,R_m,T_1,\ldots,T_s$ \linebreak
where $P_1,\ldots,P_l,Q_1,\ldots,Q_r$ \linebreak
X $\theta^{'} B$ \linebreak

X $\subset\{A_1,\ldots,A_n\}$ \linebreak
$\theta \in $\{IN,NOT IN,$=,\not=,>,\geq,<,\leq$\} \linebreak
$\theta^{'} = \begin{cases}
=& \text{falls }\theta = \text{IN} \\
\not=& \text{falls }\theta = \text{NOT IN} \\
\theta& \text{sonst}
\end{cases}$\linebreak

\subsection{Algorithm NEST-JA2}
select $A_1 ,\ldots,A_n$ \linebreak 
from $R_1 ,\ldots,R_m$ \linebreak 
where $P_1 (R_1 ),\ldots,P_k (R_1 ),P_1 ,\ldots,P_l,$ \linebreak 
$R_i.X \theta ($select AGGR($T_j.A$) \linebreak 
from $T_1 ,\ldots,T_s$ \linebreak 
where pred$[R_1.Y,T_1.Z],Q_1 ,\ldots,Q_r)$ \linebreak

let Temp1 = select $R_1.Y$ \linebreak
from $R_1$ \linebreak
where $P_1(R_1),\ldots,P_k(R_1)$ \linebreak

let Temp2 = select $T_j.A,T_1.Z$ \linebreak
from $T_1,\ldots,T_s$ \linebreak
where $Q_1,\ldots,Q_r$ \linebreak

let Temp3 = Temp1 feed {t1} \linebreak
Temp2 feed \linebreak
outerjoin$[$pred$[R_1.Y,T_1.Z]]$ \linebreak
sortby$[Z$ asc$]$ \linebreak
groupby$[Z$; AggrResult: group AGGR$]$ \linebreak
consume \linebreak

select $A_1,\ldots,A_n$ \linebreak
from $R_1,\ldots,R_m,Temp3$ \linebreak
where $P_1,\ldots,P_l,$ \linebreak
$R_i.X \theta Temp3.AggrResult,$\linebreak 
$R_1.Y=Temp3.Z$ \linebreak

$\theta \in\{=,\not=,>,\geq,<,\leq\}$

\subsection{Algorithm NEST-D}
\begin{math}
\text{select } A_1 \linebreak
\text{from } R \linebreak
\text{where } P_1,\dotsc,P_k \linebreak
(\text{select } B_1,\dotsc,B_n \linebreak
\text{ from } T \linebreak
\text{ where } B_2=A_2,\dotsc,B_n=A_n) \linebreak
op \linebreak
(\text{select } C_1,\dotsc,C_m \linebreak
\text{ from } U \linebreak
\text{ where } C_2=A_2,\dotsc,C_m=A_m) \linebreak
\end{math}

\begin{math}
\text{let }Temp1 = \text{select } C_2,\dotsc,C_m \linebreak
\text{from } U \linebreak
\end{math}

\begin{math}
\text{let }Temp2 = \text{select }  B_2,\dotsc,B_n \linebreak
\text{from } T \linebreak
\end{math}

\begin{math}
\text{let }Temp3 = Temp2 \text{ feed sort } Temp2 \text{ feed sort mergediff consume }\linebreak
\end{math}

\begin{math}
\text{select } A_1 \linebreak
\text{from } R,Temp3 \linebreak
\text{where } P_1,\dotsc,P_k \linebreak
Temp3.C_{m+1}=A_{m+1},\dotsc,Temp3.C_n=A_n \linebreak
\end{math}
\end{flushleft}


\nocite{*}
\bibliographystyle{acm}
\bibliography{Diplomarbeit}
\end{document}