1. An apparatus for joining two or more tables, comprising: a processor; and a memory, at least one of the processor or the memory being adapted for: receiving a query including a join query, the join query requesting that a new result set be generated from data obtained from two or more tables, the two or more tables being stored at two or more different data sources, wherein each of the two or more tables is stored at a single one of the two or more different data sources; automatically generating a different set of one or more queries to each of the two or more different data sources based upon the query that has been received; retrieving data from the tables corresponding to the query by executing the set of one or more queries corresponding to each of the two or more different data sources; and creating the new result set from the retrieved data obtained from the tables; parsing the query; generating an operator tree from the parsed query identifying operations corresponding to operators in the operator tree that are supported by at least one of the two or more different data sources; obtaining an operator mapping for each of the two or more different data sources.