A Table JOIN allows you to place a number of tables' data side by side in the same answer table. This convenience allows comparisons between corresponding rows in related tables, and the connection of parts of a related fact.
There are many types of join - the CROSS join (or un-constrained join) being the most primitive.
Students are encouraged to differentiate between Join Conditions and Filter Clauses.
A Join Condition ensures that the rows from joined tables relate to each other (eg. 'where Albums.SerNum = Tracks.SerNum'). The effect of a join condition is often to remove the junk from the answer table
This differs from a filter clause (eg. where PDate=1990) which removes meaningful or valid rows that are not wanted.
EquiJoins (Natural Inner Joins)
When joining tables that share a common column, an equijoin is one alternative.
The diagram above, and the corresponding SQL demonstrate the connecting of related columns with an equality constraint. The join condition for this query is "where Albums.SerNum = Tracks.Sernum" - this ensures that tracks are attached to their containing album. The condition "and Artist = 'Manilow, Barry'" is a filter clause, and ensures we only see a subset of correctly joined rows.
In microSQL, there are a number of syntactic variations on this theme, all of which do much the same job:
is functionally identical to the query beside the diagram and requires less typing. If you are really keen, you can replace the microSQL keyword join with natural inner join, but there appears to be little incentive to do this, save a little typing practice.
The natural inner join operator becomes syntactically 'tricky' when the columns being joined do not have matching names, or share many column names that are the same. This complication can be solved using the ON and USING modifiers, where the actual columns you want to be the basis of the join are listed. In such situations, I generally revert back to the explicit join, with table qualifiers on column names. I think students find this approach less confusing. Joins are generally not confusing when diagrammed however as the join conditions are explicitly indicated.
Left Outer Joins
Conventional inner joins connect rows from one table only if there are corresponding or related rows in the paired table. A left outer join allows you to pair rows from one table (the left one) with either nulls (where there are no related rows) or related data. The table on the left of the operator has ALL it's population represented in the answer table.
We use a similar notation when constructing a right outer join, although I see little benefit in using this operator when, by re-writing the from clause in a different order, a right outer join can become a left outer join.
Unless otherwise instructed, students are encouraged to solve queries using whatever tool they understand - subquery or join. Relational Database Management Systems are either optimised to perform one or the other (rarely both). MS Access, for example, is optimised to perform joins, performing subqueries noticably slower. MicroSQL on the other hand is optimised to perform subqueries.
It is generally correct that intersection queries can be re-written as join queries by replacing the sub-query arrow with an equijoin. This is not the case with a difference query however.