Join (SQL)

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

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_rutaCodi_aeroliniaNumero_volCodi_aeroport_origenCodi_aeroport_destinacio
31AFAF 428AMSBCN
73HVHV 534BCNCPH
162EIEI 183CDGCPH
193VYVY 106CPHDUB
212VYVY 306DUBBCN
214EIEI 303DUBCPH

Taula d'aeroports

Codi_aeroportNom_AeroportCiutat
AMSAmsterdam Airport SchipholAmsterdam
ARNStockholm Arlanda AirportStockholm
BCNBarcelona El Prat AirportBarcelona
CDGParis Charles de Gaulle AirportParis
CPHCopenhagen AirportCopenhagen
LHRLondon Heathrow AirportLondon

Taula d'aerolinies

Codi_aeroliniaNom_Aerolinia
AFAir France
DYNorwegian Air Shuttle
EIAer Lingus
HVTransavia

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

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_aeroportNom_AeroportCiutatCodi_AeroliniaNom_aerolinia
AMSAmsterdam Airport SchipholAmsterdamAFAir France
AMSAmsterdam Airport SchipholAmsterdamDYNorwegian Air Shuttle
AMSAmsterdam Airport SchipholAmsterdamEIAer Lingus
AMSAmsterdam Airport SchipholAmsterdamHVTransavia
ARNStockholm Arlanda AirportStockholmAFAir France
ARNStockholm Arlanda AirportStockholmDYNorwegian Air Shuttle
ARNStockholm Arlanda AirportStockholmEIAer Lingus
ARNStockholm Arlanda AirportStockholmHVTransavia
BCNBarcelona El Prat AirportBarcelonaAFAir France
BCNBarcelona El Prat AirportBarcelonaDYNorwegian Air Shuttle
BCNBarcelona El Prat AirportBarcelonaEIAer Lingus
BCNBarcelona El Prat AirportBarcelonaHVTransavia
CDGParis Charles de Gaulle AirportParisAFAir France
CDGParis Charles de Gaulle AirportParisDYNorwegian Air Shuttle
CDGParis Charles de Gaulle AirportParisEIAer Lingus
CDGParis Charles de Gaulle AirportParisHVTransavia
CPHCopenhagen AirportCopenhagenAFAir France
CPHCopenhagen AirportCopenhagenDYNorwegian Air Shuttle
CPHCopenhagen AirportCopenhagenEIAer Lingus
CPHCopenhagen AirportCopenhagenHVTransavia
LHRLondon Heathrow AirportLondonAFAir France
LHRLondon Heathrow AirportLondonDYNorwegian Air Shuttle
LHRLondon Heathrow AirportLondonEIAer Lingus
LHRLondon Heathrow AirportLondonHVTransavia