~drizzle-trunk/drizzle/development

1994.4.16 by Marisa Plumb
new function and clause files, some placeholders for right now
1
Join
1994.4.20 by Marisa Plumb
fixed build warnings
2
====
3
4
The JOIN keyword is used in an SQL statement to query data from two or more tables, based on a relationship between certain columns in these tables.
5
6
Queries can access multiple tables at once, or access the same table in such a way that multiple rows of the table are being processed at the same time. For instance, in order to list all the 'interest' records together with the location of the associated city. To do this, it's necessary to compare the city column of each row of the 'Interests" table with the name column of all rows in the cities table, and select the pairs of rows where these values match. As such, a JOIN statement involves combining records from two tables by using values common to each. 
7
8
Take the "Interests" table:
1994.5.22 by Stewart Smith
fix up some joins docs. remove \r to prevent injuries to puppies and add a FIXME about documenting our join implementation.
9
10
+---------+--------------+--------------+-------------+----------+
11
|Id       |DateAdded     |InterestType  |Name         | userID   |
12
+=========+==============+==============+=============+==========+
13
| 1       |2011-01-02    | Sport        |45           |2         |
14
+---------+--------------+--------------+-------------+----------+
15
| 2       |2011-01-02    | Art          |10           |4         |
16
+---------+--------------+--------------+-------------+----------+
17
| 3       |2011-01-02    | Music        |25           |1         |
18
+---------+--------------+--------------+-------------+----------+
19
| 4       |2011-01-02    | Food         |125          |1         |
20
+---------+--------------+--------------+-------------+----------+
21
| 5       |2011-01-03    | Music        |40           |2         |
22
+---------+--------------+--------------+-------------+----------+
23
| 6       |2011-01-03    | Food         |20           |3         |
1994.4.20 by Marisa Plumb
fixed build warnings
24
+---------+--------------+--------------+-------------+----------+
25
26
27
Note that the "Id" column is the primary key in the "Persons" table. This means that no two rows can have the same "Id"; it distinguishes two interests even if they have the same name or userID.
28
29
Next, we have the "Persons" table:
30
31
+---------+------------+----------+----------+--------+
32
|userId	  |LastName    |FirstName |Address   |  City  |
33
+=========+============+==========+==========+========+
34
| 1 	  | Larson     | Sue      |3 Cherry  | Chicago|
35
+---------+------------+----------+----------+--------+
36
| 2 	  | Roberts    | Teri 	  |21 Brown  | Chicago|
37
+---------+------------+----------+----------+--------+
38
| 3 	  | Peterson   | Kari 	  |30 Mell   | Reno   |
39
+---------+------------+----------+----------+--------+
40
| 4	  | Anderson   | Kyle 	  |435 Tyler | Dayton |
41
+---------+------------+----------+----------+--------+
42
43
The "userID" column is the primary key in the "Persons" table; in the "Persons" table, it can be used to identify users without using their names. Therefore, the relationship between the two tables above is the "userId" column.
44
2194.5.3 by Andrew Hutchings
Markup fixes
45
Different kinds of SQL JOINs
46
----------------------------
1994.4.20 by Marisa Plumb
fixed build warnings
47
1994.4.93 by Marisa Plumb
additions, edits
48
Here are the types of JOIN you can use, and the differences between them:
49
50
	**JOIN:** Return rows when there is at least one match in both tables
51
52
	**LEFT JOIN:** Return all rows from the left table, even if there are no matches in the right table
53
54
	**RIGHT JOIN:** Return all rows from the right table, even if there are no matches in the left table
55
56
	**CROSS JOIN:** Return rows when there is a match in one of the tables
57
58
2194.5.3 by Andrew Hutchings
Markup fixes
59
.. note::
60
   Implicit cartesian products of the form ``SELECT * FROM t1, t2`` without a ``WHERE`` or ``ON`` condition will error. If such behavior is intended please use ``SELECT * FROM t1 CROSS JOIN t2``.
61
62
63
How joins are executed
64
----------------------
1994.4.93 by Marisa Plumb
additions, edits
65
66
In its simplest form, a nested loop join works like this: It compares each row from one table (which can be considered the outer table) to each row from the other table (which can be considered the inner table), looking for rows that satisfy the join predicate. ('Inner table' and 'outer table' simply correlate to the inputs of the join, while 'inner join' and 'outer join' refer to the logical operations.)
67
68
The total number of rows compared is proportional to the size of the outer table multiplied by the size of the inner table. To minimize the cost of the operation, reduce or minimize the number of inner rows that we must compared to each outer row.
69
70
Nested loops support:
71
72
    * Inner join
73
    * Left outer join
74
    * Cross join
75
    * Cross apply and outer apply
76
    * Left semi-join and left anti-semi-join