Més de dues taules

Índex

 

Consulta sobre tres taules

Una relació n:n' exigeix tres taules, una de les quals fa de pont entre les altres dues. Suposem les tres taules següents:

#

Volem relacionar "Autors" amb "Llibres" i "Lloc"; això exigeix l'ús reiterat de la clàusula JOIN:

SELECT "Autors"."Autor", "Llibres"."Titol", "Llibres"."Lloc"
FROM "Autors"
JOIN "Vincles AL" ON "Autors"."IdA" = "Vincles AL"."IdA"
JOIN "Llibres" ON "Llibres"."IdL" = "Vincles AL"."IdL"
ORDER BY "Autors"."Autor", "Llibres"."Titol"

I aquest és el resultat:

#

Una alternativa és fer servir el JOIN implícit i AND:

...
WHERE "Vincles AL"."IdA" = "Autors"."IdA"
AND "Vincles AL"."IdL" = "Llibres"."IdL"
...

El resultat és exactament el mateix.

 

Tres taules de contingut + dues d'enllaç

Continuant amb l'exemple de la biblioteca, podem afegir-hi una referència a les matèries de què tracten els llibres, amb dues taules més:

#

En conjunt tenim doncs cinc taules, segons l'esquema següent:

#

Si fem la consulta sobre les 5 taules, el codi SQL segueix el mateix esquema que en els exemples anteriors:

SELECT "Materia", "Titol", "Lloc", "Autor"
FROM "Materies"
JOIN "Vincles LM" ON "Materies"."IdM" = "Vincles LM"."IdM"
JOIN "Llibres" ON "Vincles LM"."IdL" = "Llibres"."IdL"
JOIN "Vincles AL" ON "Llibres"."IdL" = "Vincles AL"."IdL"
JOIN "Autors" ON "Vincles AL"."IdA" = "Autors"."IdA"
ORDER BY "Materia", "Titol"

Notem l'addició sistemàtica de les taules amb JOIN i els requisits ON de cada una amb l'anterior.

I el resultat és

#

 

Plantejaments més complexos

Les necessitats ens poden portar a plantejaments més complexos, amb més taules i més camps per taula. En una escola superior, on els alumnes estudien assignatures més que no pas segueixen cursos, podríem establir taules com les següents:

I la taula de vincles entre 'Assignatures' i 'Aules' portaria afegit el camps 'Horari'.

En aquests casos és aconsellable no excedir-se en les consultes globalitzades, ja que poden crear confusió en lloc d'aclariments. És molt millor fer consultes parcials, per exemple,