Join (SQL)

De la Viquipèdia, l'enciclopèdia lliure

Una clàusula join SQL, que es correspon amb una operació de join en àlgebra relacional, combina columnes d'una o més taules d'una base de dades relacional. Crea un conjunt que pot ser guardat com una taula o ser utilitzat directament. Una JOIN és un mitjà per combinar columnes d'una (self-join) o més taules utilitzant els valors comuns de cadascuna. L'estàndard ANSI-SQL especifica cinc tipus de JOIN: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER i CROSS. Com a cas especial, una taula pot fer JOIN amb ella mateixa amb un self-join.

Un programador declara una setència JOIN per a identificar files que poden ser unides. Per a cada fila s'avalua el predicat. Si és cert, es genera la fila combinada.

Taules de mostra[modifica]

Les bases de dades relacionals solen estar normalitzades per eliminar la duplicació de la informació com quan una entitat té una relacio "una-a-moltes" amb una altra. Per exemple, una taula de rutes aèries contindrà els codis d'aeroport d'origen i destinació, i una taula d'aeroports contindrà la informació detallada de cada aeroport (nom complet, ciutat, coordinades, nombre de pistes, etc). La combinació de la taula de rutes amb la taula d'aeroports permetrà obtenir una altra taula amb els detalls desitjats dels aeroports de cada ruta..

Les explicacions sobre joins utilitzaran les següents dues taules. Les files contingudes en les taules serveixen per a il·lustrar l'efecte dels diferents tipus de join. Les files en aquestes taules serveixen per il·lustrar l'efecte de diferents tipus de joins

Taula de Rutes

Identificador_ruta Codi_aerolinia Numero_vol Codi_aeroport_origen Codi_aeroport_destinacio
31 AF AF 428 AMS BCN
73 HV HV 534 BCN CPH
162 EI EI 183 CDG CPH
193 VY VY 106 CPH DUB
212 VY VY 306 DUB BCN
214 EI EI 303 DUB CPH

Taula d'aeroports

Codi_aeroport Nom_Aeroport Ciutat
AMS Amsterdam Airport Schiphol Amsterdam
ARN Stockholm Arlanda Airport Stockholm
BCN Barcelona El Prat Airport Barcelona
CDG Paris Charles de Gaulle Airport Paris
CPH Copenhagen Airport Copenhagen
LHR London Heathrow Airport London

Taula d'aerolinies

Codi_aerolinia Nom_Aerolinia
AF Air France
DY Norwegian Air Shuttle
EI Aer Lingus
HV Transavia

A les taules anteriors es pot veure que l'aerport de Dublin (DUB) te rutes pero no esta inclos a la taula d'aeroports. En canvi l'aeroport d'Arlanda (ARN) no té rutes definides a la taula de rutes. Tambe l'aerolinia "Norwegian" no té rutes i hi ha rutes cobertes per l'aerolinia "VY" que no esta inclosa a la taula d'aerolinies. Aquests detalls seran importants al descriure les diferents joins.

cross join[modifica]

Diagrama d'una Cross Join
Diagrama representant una Cross Join entre dues taules A i B

Una CROSS JOIN retorna el producte cartesia de les files de les taules en la join. Dit d'una altra forma, generara files que combinen cada fila en la primera taula amb cada fila en la segona taula. Aquest tipus de join ha de ser utilitzat amb cura perque pot generar grans quantitats de files si les taules tenen moltes files. Example d'una cross join:

SELECT *
 FROM Aeroport
 CROSS JOIN Aerolinia;

Com que les taules origen tenen 4 i 6 files respectivament, es generaran 24 files. Tantes com combinacions de les files origen existeixen.

Codi_aeroport Nom_Aeroport Ciutat Codi_Aerolinia Nom_aerolinia
AMS Amsterdam Airport Schiphol Amsterdam AF Air France
AMS Amsterdam Airport Schiphol Amsterdam DY Norwegian Air Shuttle
AMS Amsterdam Airport Schiphol Amsterdam EI Aer Lingus
AMS Amsterdam Airport Schiphol Amsterdam HV Transavia
ARN Stockholm Arlanda Airport Stockholm AF Air France
ARN Stockholm Arlanda Airport Stockholm DY Norwegian Air Shuttle
ARN Stockholm Arlanda Airport Stockholm EI Aer Lingus
ARN Stockholm Arlanda Airport Stockholm HV Transavia
BCN Barcelona El Prat Airport Barcelona AF Air France
BCN Barcelona El Prat Airport Barcelona DY Norwegian Air Shuttle
BCN Barcelona El Prat Airport Barcelona EI Aer Lingus
BCN Barcelona El Prat Airport Barcelona HV Transavia
CDG Paris Charles de Gaulle Airport Paris AF Air France
CDG Paris Charles de Gaulle Airport Paris DY Norwegian Air Shuttle
CDG Paris Charles de Gaulle Airport Paris EI Aer Lingus
CDG Paris Charles de Gaulle Airport Paris HV Transavia
CPH Copenhagen Airport Copenhagen AF Air France
CPH Copenhagen Airport Copenhagen DY Norwegian Air Shuttle
CPH Copenhagen Airport Copenhagen EI Aer Lingus
CPH Copenhagen Airport Copenhagen HV Transavia
LHR London Heathrow Airport London AF Air France
LHR London Heathrow Airport London DY Norwegian Air Shuttle
LHR London Heathrow Airport London EI Aer Lingus
LHR London Heathrow Airport London HV Transavia