Joining with from

A two table join :

The select clause can return anything that is in the scope, for example it
could return both joined objects with a Tuple2 : select((s, ple))

The join keyword

produces :

A join can also be an agreate query, for example :

The type of this query is Query[GroupWithMeasures[(Long,String),Long], it produces the following SQL :

Of course, like in SQL, a join can have a where clause :

If a join has N arguments, the ‘on’ function must take N-1 arguments,
the i’th ‘on’ condition corresponds to the i’th table expression :

Outer Joins

A Left Outer Join is done by calling leftOuterJoin within the select clause,
where the fist parameter is the row object variable, and the second a boolean clause.

This query returns the joined objects in a tuple, leftOuterJoin causes the second tuple
member to be an Option[Rating]

The signatures of (left, right and full) outer joins ensure that the null part of the
outer join returns an Option[]

leftOuterJoin[A](a: A, b: =>LogicalBoolean): Option[A]

rightOuterJoin[A,B](a: A, b: B, c: =>LogicalBoolean): (Option[A], B)

fullOuterJoin[A,B](a: A, b:B, c: =>LogicalBoolean): (Option[A], Option[B])

The SQL of the previous query is :