An apparatus for evaluating a join on a hierarchically clustered data stream, the apparatus comprising: a memory configured to store a query condition that determines whether a Structured Query Language query is suitable for performing a non-buffering read operation on a hierarchical data storage (106, 108, 110, 112) forming part of a relational database, wherein the data of the relational database may be organized as a hierarchy; and a processor in communication with the memory, the processor being configured to: receive a Structured Query Language ("SQL") query invoking a join operation; evaluate the SQL query for the query condition; transform the SQL query into a read operation query for the hierarchical data storage (106, 108, 110, 112); and, when the SQL query satisfies the query condition: perform a non-buffering read operation on the hierarchical data storage (106, 108, 110, 112) based on the read operation query, wherein in the non-buffering read operation buffering may be limited to a single record from each table involved in the join operation, wherein the non-buffering read operation results in a hierarchically clustered data stream, the hierarchically clustered data stream being a data stream containing a sequence of records from the hierarchical data storage (106, 108, 110, 112), where the data stream is ordered in such a way that each record is ordered after its parent record, and before any other record of its parent table, evaluate the hierarchically clustered data stream according to at least one predicate of the join operation to obtain a plurality of record results; and transmit the plurality of record results to a client device (114, 116, 118). a memory configured to store a query condition that determines whether a Structured Query Language query is suitable for performing a non-buffering read operation on a hierarchical data storage (106, 108, 110, 112) forming part of a relational database, wherein the data of the relational database may be organized as a hierarchy; and a processor in communication with the memory, the processor being configured to: receive a Structured Query Language ("SQL") query invoking a join operation; evaluate the SQL query for the query condition; transform the SQL query into a read operation query for the hierarchical data storage (106, 108, 110, 112); and, when the SQL query satisfies the query condition: perform a non-buffering read operation on the hierarchical data storage (106, 108, 110, 112) based on the read operation query, wherein in the non-buffering read operation buffering may be limited to a single record from each table involved in the join operation, wherein the non-buffering read operation results in a hierarchically clustered data stream, the hierarchically clustered data stream being a data stream containing a sequence of records from the hierarchical data storage (106, 108, 110, 112), where the data stream is ordered in such a way that each record is ordered after its parent record, and before any other record of its parent table, evaluate the hierarchically clustered data stream according to at least one predicate of the join operation to obtain a plurality of record results; and transmit the plurality of record results to a client device (114, 116, 118). receive a Structured Query Language ("SQL") query invoking a join operation; evaluate the SQL query for the query condition; transform the SQL query into a read operation query for the hierarchical data storage (106, 108, 110, 112); and, when the SQL query satisfies the query condition: perform a non-buffering read operation on the hierarchical data storage (106, 108, 110, 112) based on the read operation query, wherein in the non-buffering read operation buffering may be limited to a single record from each table involved in the join operation, wherein the non-buffering read operation results in a hierarchically clustered data stream, the hierarchically clustered data stream being a data stream containing a sequence of records from the hierarchical data storage (106, 108, 110, 112), where the data stream is ordered in such a way that each record is ordered after its parent record, and before any other record of its parent table, evaluate the hierarchically clustered data stream according to at least one predicate of the join operation to obtain a plurality of record results; and transmit the plurality of record results to a client device (114, 116, 118). perform a non-buffering read operation on the hierarchical data storage (106, 108, 110, 112) based on the read operation query, wherein in the non-buffering read operation buffering may be limited to a single record from each table involved in the join operation, wherein the non-buffering read operation results in a hierarchically clustered data stream, the hierarchically clustered data stream being a data stream containing a sequence of records from the hierarchical data storage (106, 108, 110, 112), where the data stream is ordered in such a way that each record is ordered after its parent record, and before any other record of its parent table, evaluate the hierarchically clustered data stream according to at least one predicate of the join operation to obtain a plurality of record results; and transmit the plurality of record results to a client device (114, 116, 118).