1. A method implemented on a computer system, the method comprising, the computer system: for each table of a plurality of database tables and for each column of a plurality of columns within the each table, creating a profile for the each column; establishing a join graph of nodes, wherein each node represents one of the plurality of database tables; for each pair of a plurality of pairs of a first table and a second table from the plurality of database tables, wherein the first table is different than the second table, and for each pair of a plurality of pairs of a first column from the first table and a second column from the second table, calculating a score representative of a predicted level of success in performing a join from the first table on the first column to the second table on the second column, wherein the score is determined based upon the profile for the first column and the profile for the second column, and adding a directed weighted edge to the join graph from a node representing the first table to a node representing the second table, wherein the weight of the added edge is based on the score; receiving a selection of a subset of the plurality of database tables; creating a join tree comprising a subset of edges in the join graph that spans a subset of nodes in the join graph corresponding to the selected subset of the plurality of database tables; extracting a set of joins represented by the subset of edges; and providing the extracted set of joins as a result.