Condividi tramite


Tipi di join

Aggiornamento: novembre 2007

Quando si uniscono più tabelle, il tipo di join creato influisce sulle righe inserite nel gruppo di risultati. È possibile creare i seguenti tipi di join:

  • Inner join   Join che visualizza soltanto le righe che hanno una corrispondenza in entrambe le tabelle unite. È il tipo di join predefinito in Progettazione query e Progettazione viste. Ad esempio, è possibile eseguire il join delle tabelle titles e publishers per creare un gruppo di risultati che indica il nome dell'editore per ogni titolo di un libro. In un inner join i titoli per i quali non si dispone di informazioni relative all'editore non vengono inclusi nel gruppo di risultati, come pure gli editori per i quali non esistono titoli. Il codice SQL risultante per un join di questo tipo potrebbe essere simile al seguente:

    SELECT     title, pub_name
    FROM         titles INNER JOIN
    publishers ON titles.pub_id = publishers.pub_id
    
    Nota:

    Le colonne che contengono NULL non hanno valori corrispondenti quando si crea un inner join e sono pertanto escluse dal gruppo di risultati. I valori Null non corrispondono ad altri valori Null.

  • Outer join   Un join che inserisce anche le righe prive di una corrispondenza nella tabella unita. È possibile creare tre varianti di outer join per specificare le righe senza corrispondenza da includere:

    • Left outer join   Vengono incluse tutte le righe della prima tabella, ovvero la tabella all'estrema sinistra ("left") della clausola JOIN. Le righe senza corrispondenza nella tabella di destra non verranno incluse. La seguente istruzione SQL mostra, ad esempio, un left outer join fra le tabelle titles e publishers che include tutti i libri, anche quelli per i quali non si dispone di informazioni sull'editore:

      SELECT titles.title_id, 
             titles.title, 
             publishers.pub_name
      FROM titles LEFT OUTER JOIN publishers 
                  ON titles.pub_id 
                   = publishers.pub_id
      
    • Right outer join   Vengono incluse tutte le righe della seconda tabella, ovvero la tabella all'estrema destra ("right") della clausola JOIN. Le righe senza corrispondenza nella tabella di sinistra non verranno incluse. Un right outer join tra le tabelle titles e publishers includerà, ad esempio, tutti gli editori, anche quelli per i quali non esiste alcun titolo nella tabella titles. Il codice SQL risultante potrebbe essere simile al seguente:

      SELECT titles.title_id, 
             titles.title, 
             publishers.pub_name
      FROM titles RIGHT OUTER JOIN publishers 
                  ON titles.pub_id 
                   = publishers.pub_id
      
    • Full outer join   Vengono incluse tutte le righe di tutte le tabelle unite, indipendentemente dal fatto che esista una corrispondenza. Un full outer join fra le tabelle titles e publishers mostrerà, ad esempio, tutti i titoli e tutti gli editori, anche quelli per i quali non esiste una corrispondenza nell'altra tabella.

      SELECT titles.title_id, 
             titles.title, 
             publishers.pub_name
      FROM titles FULL OUTER JOIN publishers 
                  ON titles.pub_id 
                   = publishers.pub_id
      
      Nota:

      Alcuni database, ad esempio i database Oracle, non supportano i full outer join.

  • Cross join   Un join il cui gruppo di risultati include una riga per ogni possibile coppia di righe delle due tabelle. Ad esempio, "authors CROSS JOIN publishers" genera un gruppo di risultati con una riga per ogni possibile combinazione autore/editore. Il codice SQL risultante potrebbe essere simile al seguente:

    SELECT *
    FROM authors CROSS JOIN publishers 
    

Vedere anche

Concetti

Utilizzo dei dati del riquadro Risultati

Altre risorse

Specifica dei criteri di ricerca