Microsoft SQL Server Outer Join


Esempio

Left Outer Join

LEFT JOIN restituisce tutte le righe dalla tabella sinistra, abbinate alle righe della tabella di destra in cui sono soddisfatte le condizioni della clausola ON . Le righe in cui non viene soddisfatta la clausola ON hanno NULL in tutte le colonne della tabella destra. La sintassi di un LEFT JOIN è:

SELECT * FROM table_1 AS t1
LEFT JOIN table_2 AS t2 ON t1.ID_Column = t2.ID_Column 

Giusto outer join

RIGHT JOIN restituisce tutte le righe dalla tabella di destra, abbinate alle righe della tabella sinistra in cui sono soddisfatte le condizioni della clausola ON . Le righe in cui non viene soddisfatta la clausola ON hanno NULL in tutte le colonne della tabella sinistra. La sintassi di RIGHT JOIN è:

SELECT * FROM table_1 AS t1
RIGHT JOIN table_2 AS t2 ON t1.ID_Column = t2.ID_Column 

Full Outer Join

FULL JOIN combina LEFT JOIN e RIGHT JOIN . Tutte le righe vengono restituite da entrambe le tabelle, indipendentemente dal fatto che siano soddisfatte le condizioni nella clausola ON . Le righe che non soddisfano la clausola ON vengono restituite con NULL in tutte le colonne della tabella opposta (ovvero, per una riga nella tabella sinistra, tutte le colonne nella tabella destra conterranno NULL e viceversa). La sintassi di un FULL JOIN è:

SELECT * FROM table_1 AS t1
FULL JOIN table_2 AS t2 ON t1.ID_Column = t2.ID_Column  

Esempi

/* Sample test data. */
DECLARE @Animal table (
    AnimalId Int IDENTITY,
    Animal Varchar(20)
);

DECLARE @AnimalSound table (
    AnimalSoundId Int IDENTITY,
    AnimalId Int,
    Sound Varchar(20)
);

INSERT INTO @Animal (Animal) VALUES ('Dog');
INSERT INTO @Animal (Animal) VALUES ('Cat');
INSERT INTO @Animal (Animal) VALUES ('Elephant');
INSERT INTO @Animal (Animal) VALUES ('Frog');

INSERT INTO @AnimalSound (AnimalId, Sound) VALUES (1, 'Barks');
INSERT INTO @AnimalSound (AnimalId, Sound) VALUES (2, 'Meows');
INSERT INTO @AnimalSound (AnimalId, Sound) VALUES (3, 'Trumpet');
INSERT INTO @AnimalSound (AnimalId, Sound) VALUES (5, 'Roars');
/* Sample data prepared. */

SINISTRA ESTERNO

SELECT * 
FROM @Animal As t1 
LEFT JOIN @AnimalSound As t2 ON t1.AnimalId = t2.AnimalId;

Risultati per LEFT JOIN

AnimalId    Animal               AnimalSoundId AnimalId    Sound
----------- -------------------- ------------- ----------- --------------------
1           Dog                  1             1           Barks
2           Cat                  2             2           Meows
3           Elephant             3             3           Trumpet
4           Frog                 NULL          NULL        NULL

GIUSTO ESTERNO

SELECT * 
FROM @Animal As t1 
RIGHT JOIN @AnimalSound As t2 ON t1.AnimalId = t2.AnimalId;

Risultati per RIGHT JOIN

AnimalId    Animal               AnimalSoundId AnimalId    Sound
----------- -------------------- ------------- ----------- --------------------
1           Dog                  1             1           Barks
2           Cat                  2             2           Meows
3           Elephant             3             3           Trumpet
NULL        NULL                 4             5           Roars

FULL OUTER JOIN

SELECT * 
FROM @Animal As t1 
FULL JOIN @AnimalSound As t2 ON t1.AnimalId = t2.AnimalId;

Risultati per FULL JOIN

AnimalId    Animal               AnimalSoundId AnimalId    Sound
----------- -------------------- ------------- ----------- --------------------
1           Dog                  1             1           Barks
2           Cat                  2             2           Meows
3           Elephant             3             3           Trumpet
4           Frog                 NULL          NULL        NULL
NULL        NULL                 4             5           Roars