Dues taules: JOIN implícit

Índex

 

Concepte de JOIN

Les consultes també poden fer-se sobre un conjunt de dues o més taules, en les quals només es tenen en compte els registres en què hi ha coincidència en els valors d'uns camps determinats. Aquesta operació s'anomena genèricament JOIN, que significa 'ajuntar'. En el cas més típic es tracta de dues taules amb la relació 1:n, i s'hi exigeix que un camp de la taula n coincideixi amb la clau principal de la taula 1. Abans de fer una consulta d'aquest tipus, cal saber, doncs, quina mena de relació s'hi ha establert i quins són els camps relacionats.

En tot el que segueix suposarem una base de dades sobre el personal d'una empresa, amb una taula, "Departaments", i una altra, "Personal", amb una relació 1:n. Presentem la taula "Departaments" i tornem a reproduir la taula "Personal":

#

#

El camp "IdD" de la taula "Departaments" i el camp "IdD" de la taula "Personal" estan relacionats amb una relació 1:n; la coincidència d'un mateix valor en tots dos camps ens indica la vinculació d'un treballador a un departament; per exemple, que la treballadora 'Catalina López Blanco', amb IdD=2, està adscrita al departament de 'Màrqueting'.

Nota: És costum donar el mateix nom als camps relacionats, però no és pas obligatori.

 

JOIN implícit

L'operació JOIN es pot fer de dues maneres, anomenades JOIN explícit i JOIN implícit.

El JOIN implícit fa servir els recursos vistos fins ara, però donant-los un abast diferent. La clàusula WHERE es fa servir per a especificar la igualtat entre dos camps de dues taules diferents, no pas per a detectar la igualtat entre el valor d'un camp i un valor desitjat:

...
FROM "taula_1", "taula.2"
WHERE "taula_A"."camp_M" = "taula_B"."camp_N"
...

Per exemple,

SELECT "Departaments"."Departament", "Personal"."Nom", "Personal"."Cognoms"
FROM "Personal", "Departaments"
WHERE "Personal"."IdD" = "Departaments"."IdD"
ORDER BY "Departaments"."Departament", "Personal"."Cognoms"

I aquest és el resultat d'aplicació de la consulta:

captura

 

JOIN implícit + Condició sobre un camp

Suposem que només ens interessa llistar els treballadors del departament de 'Màrqueting'. Això obliga a posar dues condicions WHERE:

Això s'aconsegueix unint les dues condions amb un AND:

SELECT "Departaments"."Departament", "Personal"."Nom", "Personal"."Cognoms"
FROM "Personal", "Departaments"
WHERE "Personal"."IdD" = "Departaments"."IdD" AND "Departaments"."Departament" = 'Màrqueting'
ORDER BY "Personal"."Cognoms"

I aquest és el resultat d'aplicació de la consulta:

captura