Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

I legami o relazioni

Legami tra campi di diverse colonne e tipologie di relazioni: uno a uno, uno a molti e molti a molti
Legami tra campi di diverse colonne e tipologie di relazioni: uno a uno, uno a molti e molti a molti
Link copiato negli appunti

I legami tra le tabelle, sono un argomento parallelo alle tabelle, legato alle viste e ai vincoli, visto che anche di vincoli si tratta.

Per comprendere meglio come sono strutturati i legami tra le tabelle, che possiamo chiamare anche relazioni, prendiamo un esempio classico. Una tabella Anagrafica ed una Ordini.

Immagine 1. Legame tra tabelle.

Legame tra tabelle.

Senza andare ad analizzare quale sia il tipo di legame, in questo esempio abbiamo una tabella Anagrafica. Nella tabella ordini avremo tanti ordini per ogni persona presente nella tabella anagrafica. Il loro legame è dato dal campo ANA_ID e del campo ORD_ANA_ID.

Tipologie di relazioni

I legami come quello della figura 1, possono essere suddivisi in 3 tipologie:

  • Uno a uno: un legame che restituisce solamente 1 riga della tabella di destra ed 1 di quella di sinistra.
  • Uno a molti: in questo caso, quello più comune, per un dato della tabella di destra, corrispondo molte righe della tabella di sinistra.
  • Molti a molti: i record di entrambe le tabelle hanno record corrispondenti nell'altra tabella.

I Join

I Join sono particolari istruzioni SQL che riescono a legare tra loro i dati di diverse tabelle, per estrapolare le informazioni legate tra di loro.

L'unico aspetto ostico, a volte, può essere quello di saper legare sapientemente queste informazioni per ottenere un risultato veritiero e rapido.

Inner Join

Se, nell'esempio di figura 1, vogliamo individuare solamente le righe di Anagrafica, per le quali esistono record nella tabella Ordini, usiamo un Inner Join. Questo tipo di legame fornisce esclusivamente le righe corrispondenti alla tabella di sinistra.

Listato 1. Selezione di INNER JOIN

SELECT
    [ANAGRAFICA].*, [ORDINI].*
FROM
    [dbo].[ANAGRAFICA]
INNER JOIN
    [dbo].[ORDINI]
ON
    [ANAGRAFICA].[ANA_ID] = [ORDINI].[ORD_ID_ANA]

La sintassi di inner join è abbastanza semplice. In primo luogo dobbiamo indicare quali campi vogliamo visualizzare. Poi bisogna elencare la prima tabella seguita da inner join e la seconda tabella, che partecipano al legame. Infine va indicato nell'ordine uno a molti, il meccanismo di paragone per formare il legame.

Outer Join

Il legame outer join può essere anche visto come la completa estrapolazione dei dati. In questo caso le clausole di join sono 3.

La prima, LEFT OUTER JOIN, nel caso in cui volessimo visualizzare tutti gli utenti, compresi quelli che non hanno mai effettuato ordini.

Listato 2. Selezione di LEFT OUTER JOIN

SELECT
    [ANAGRAFICA].*, [ORDINI].*
FROM
    [dbo].[ANAGRAFICA] 
LEFT OUTER JOIN
    [dbo].[ORDINI]
ON
    [ANAGRAFICA].[ANA_ID] = [ORDINI].[ORD_ID_ANA]

Bisogna tener conto che in questo caso, se un utente non ha effettuato ordini, troveremo una sola riga come risultato, ma i campi relativi l'ordine torneranno un valore di tipo dbNull.

Listato 3. Selezione di RIGHT OUTER JOIN.

SELECT
    [ANAGRAFICA].*, [ORDINI].*
FROM
    [dbo].[ANAGRAFICA] 
RIGHT OUTER JOIN
    [dbo].[ORDINI]
ON
    [ANAGRAFICA].[ANA_ID] = [ORDINI].[ORD_ID_ANA]

In questo caso, invece, vogliamo vedere tutti gli ordini. Qui, se non sono stati modificati i dati o la loro integrità, vedremo solamente righe senza valori dbNull.

Nell'ultimo esempio vediamo tutti i record della tabella Anagrafica e tutti quelli della tabella Ordini, con e senza legami.

Listato 4. Selezione di FULL OUTER JOIN.

SELECT 
    [ANAGRAFICA].*, [ORDINI].*
FROM
    [dbo].[ANAGRAFICA] 
FULL OUTER JOIN
    [dbo].[ORDINI]
ON
    [ANAGRAFICA].[ANA_ID] = [ORDINI].[ORD_ID_ANA]

Ti consigliamo anche