Joins (uniones) entre clases

Hasta ahora, nuestras consultas s�lo acced�an a una clase a la vez. Las consultas pueden acceder a m�ltiples clases a la vez, o acceder a la misma clase de tal modo que m�ltiples instancias de la clase sean procesadas al mismo tiempo . Una consulta que acceda a m�ltiples instancias de las mismas o diferentes clases a la vez se conoce como una consulta join. Como ejemplo, digamos que queremos encontrar todos los registros que est�n en el rango de temperaturas de otros registros. En efecto, necesitamos comparar los atributos temp_lo y temp_hi de cada instancia EMP con los atributos temp_lo y temp_hi de todas las dem�s instancias EMP.

Nota

Esto es s�lo un modelo conceptual. El verdadero join puede hacerse de una manera m�s eficaz, pero esto es invisible para el usuario.

Podemos hacer esto con la siguiente consulta:
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,
    W2.city, W2.temp_lo AS low, W2.temp_hi AS high
    FROM weather W1, weather W2
    WHERE W1.temp_lo < W2.temp_lo
    AND W1.temp_hi > W2.temp_hi;

+--------------+-----+------+---------------+-----+------+
|city          | low | high | city          | low | high |
+--------------+-----+------+---------------+-----+------+
|San Francisco | 43  | 57   | San Francisco | 46  | 50   |
+--------------+-----+------+---------------+-----+------+
|San Francisco | 37  | 54   | San Francisco | 46  | 50   |
+--------------+-----+------+---------------+-----+------+
    

Nota

: Los matices de este join est�n en que la cualificaci�n es una expresi�n verdadera definida por el producto cartesiano de las clases indicadas en la consulta. Para estas instancias en el producto cartesiano cuya cualificaci�n sea verdadera, Postgres calcula y devuelve los valores especificados en la lista de destino. Postgres SQL no da ning�n significado a los valores duplicados en este tipo de expresiones. Esto significa que Postgres en ocasiones recalcula la misma lista de destino varias veces. Esto ocurre frecuentemente cuando las expresiones booleanas se conectan con un "or". Para eliminar estos duplicados, debe usar la declaraci�n select distinct .

En este caso, tanto W1 como W2 son sustituidos por una instancia de la clase weather y se extienden por todas las instancias de la clase. (En la terminolog�a de la mayor�a de los sistemas de bases de datos W1 y W2 se conocen como range variables (variables de rango).) Una consulta puede contener un n�mero arbitrario de nombres de clases y sustituciones.