Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Join_(SQL)
Join_(SQL)
Join (SQL) - Teknopedia
Vai al contenuto
Menu principale
Navigazione
  • Pagina principale
  • Ultime modifiche
  • Una voce a caso
  • Nelle vicinanze
  • Vetrina
  • Aiuto
  • Sportello informazioni
  • Pagine speciali
Comunità
  • Portale Comunità
  • Bar
  • Il Teknopediano
  • Contatti
Teknopedia L'enciclopedia libera
Ricerca
  • Fai una donazione
  • registrati
  • entra
  • Fai una donazione
  • registrati
  • entra

Indice

  • Inizio
  • 1 Tabelle di esempio
  • 2 Inner join
    • 2.1 Equi-join
    • 2.2 Natural join
    • 2.3 Cross join
  • 3 Outer join
    • 3.1 Nota sulle clausole WHERE e ON
    • 3.2 Left outer join
    • 3.3 Right outer join
    • 3.4 Full outer join
  • 4 Self-join
  • 5 Voci correlate
  • 6 Altri progetti
  • 7 Collegamenti esterni

Join (SQL)

  • Azərbaycanca
  • Català
  • Čeština
  • Dansk
  • Deutsch
  • English
  • Español
  • Français
  • עברית
  • Հայերեն
  • 한국어
  • Nederlands
  • Norsk bokmål
  • Polski
  • Português
  • Русский
  • Simple English
  • Српски / srpski
  • Українська
  • Tiếng Việt
  • 中文
Modifica collegamenti
  • Voce
  • Discussione
  • Leggi
  • Modifica
  • Modifica wikitesto
  • Cronologia
Strumenti
Azioni
  • Leggi
  • Modifica
  • Modifica wikitesto
  • Cronologia
Generale
  • Puntano qui
  • Modifiche correlate
  • Link permanente
  • Informazioni pagina
  • Cita questa voce
  • Ottieni URL breve
  • Scarica codice QR
  • Passa al parser legacy
Stampa/esporta
  • Crea un libro
  • Scarica come PDF
  • Versione stampabile
In altri progetti
  • Wikimedia Commons
  • Elemento Wikidata
Aspetto
Da Teknopedia, l'enciclopedia libera.
Niente fonti!
Questa voce o sezione sull'argomento programmazione non cita le fonti necessarie o quelle presenti sono insufficienti.

Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti.

La JOIN è una clausola del linguaggio SQL che serve a combinare le tuple di due o più relazioni di una base di dati. Lo standard ANSI definisce alcune specifiche per il linguaggio SQL sul tipo di JOIN da effettuare: INNER JOIN, FULL JOIN, LEFT JOIN e RIGHT JOIN, alle quali diversi DBMS aggiungono CROSS JOIN. In alcuni casi è possibile che una tabella possa essere combinata con se stessa, in questo caso si parlerà di self-join.

Tabelle di esempio

[modifica | modifica wikitesto]

Tutti gli esempi che verranno riportati di seguito faranno uso delle seguenti due tabelle:

Tabella Impiegati
CognomeID_dipartimento
Rossi31
Bianchi33
Mancini33
Santoro34
Monti34
GrassiNULL
Tabella Dipartimenti
ID_dipartimentoNome_dipartimento
31Vendite
33Tecnico
34Risorse umane
35Promozione

Dipartimenti.ID_dipartimento è la chiave primaria che ha una cardinalità 0:n nei confronti del campo Impiegati.ID_dipartimento.

Nota: Il dipartimento Promozione della tabella Dipartimenti non ha alcuna corrispondenza nella tabella Impiegati. Mentre l'impiegato Grassi non è stato assegnato ad alcun dipartimento (NULL).

Inner join

[modifica | modifica wikitesto]
Diagramma di Venn che rappresenta la INNER JOIN di due tabelle

Una INNER JOIN crea una nuova tabella combinando i valori delle due tabelle di partenza ( A {\displaystyle A} {\displaystyle A} e B {\displaystyle B} {\displaystyle B}) basandosi su una certa regola di confronto. La query compara ogni riga della tabella A {\displaystyle A} {\displaystyle A} con ciascuna riga della tabella B {\displaystyle B} {\displaystyle B} cercando di soddisfare la regola di confronto definita. Quando la regola di join viene soddisfatta, i valori di tutte le colonne delle tabelle A {\displaystyle A} {\displaystyle A} e B {\displaystyle B} {\displaystyle B} vengono combinate in un'unica riga nella costruzione della tabella risultante. La INNER JOIN è la forma di join usata più di frequente nelle applicazioni e rappresenta la modalità predefinita.

Per esempio, la seguente query unirà le due tabelle Impiegati e Dipartimenti usando la chiave primaria ID_dipartimento che è la colonna presente in entrambe le tabelle. Quando ID_dipartimento corrisponde in entrambe le tabelle (ovvero la regola è soddisfatta), la query combinerà le colonne Cognome, ID_dipartimento e Nome_dipartimento in un'unica riga per la tabella risultante.

Esempio di INNER JOIN in forma esplicita:

SELECT *
FROM   Impiegati 
       INNER JOIN Dipartimenti 
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento

che equivale a:

SELECT *  
FROM   Impiegati, Dipartimenti 
WHERE  Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento

Risultato della query di INNER JOIN:

Impiegati.CognomeImpiegati.ID_dipartimentoDipartimenti.Nome_dipartimentoDipartimenti.ID_dipartimento
Santoro34Risorse umane34
Bianchi33Tecnico33
Monti34Risorse umane34
Mancini33Tecnico33
Rossi31Vendite31

Nota: l'impiegato Grassi e il dipartimento Promozione non sono presenti in quanto l'impiegato Grassi ha un NULL mentre Promozione non compare in nessun impiegato. A volte come risultato finale si desidera avere anche i record che non hanno corrispondenza: in tal caso è possibile usare la query di tipo OUTER JOIN.

Equi-join

[modifica | modifica wikitesto]

La equi-join, noto come "l'unica operazione ammissibile", ha un particolare tipo di comparatore, detto theta join, che utilizza come metodo di verifica, solamente l'uguaglianza matematica come regola di confronto. Usare altri operatori di confronto (come ad esempio <) squalifica la join come equi-join. La query riportata di seguito utilizza una equi-join:

SELECT *
FROM   Impiegati 
       INNER JOIN Dipartimenti 
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento

SQL fornisce una scorciatoia per definire le equi-joins, attraverso la parola riservata USING

SELECT *
FROM   Impiegati 
       INNER JOIN Dipartimenti 
          USING (ID_dipartimento)

La keyword USING è supportata da Microsoft SQL Server Management Studio, MySQL, Oracle, PostgreSQL, SQLite, e DB2/400.

Natural join

[modifica | modifica wikitesto]

Una NATURAL JOIN offre ulteriori specializzazioni di equi-join. Solitamente la JOIN confronta colonne di tabelle diverse che hanno lo stesso nome. La NATURAL JOIN fa proprio questo.

Nell'esempio che segue viene riportata la notazione NATURAL JOIN equivalente alla prima INNER JOIN definita:

SELECT *
FROM   Impiegati 
       NATURAL JOIN Dipartimenti
ID_dipartimentoImpiegati.CognomeDipartimenti.Nome_dipartimento
34MontiRisorse umane
33BianchiTecnico
34SantoroRisorse umane
33ManciniTecnico
31RossiVendite

Cross join

[modifica | modifica wikitesto]
Immagine che rappresenta la CROSS JOIN di due tabelle

Una CROSS JOIN, cartesian join o product fornisce le basi (le infrastrutture informatiche) attraverso cui tutti i tipi di INNER JOIN operano. Il risultato di una CROSS JOIN è il prodotto cartesiano di tutte le righe delle tabelle che concorrono alla query di join. È come dire che stiamo facendo una INNER JOIN senza impostare la regola di confronto o in cui la regola di confronto ritorna sempre vero.

Date le due tabelle di partenza A {\displaystyle A} {\displaystyle A} e B {\displaystyle B} {\displaystyle B}, la cross join si scrive A {\displaystyle A} {\displaystyle A} × B {\displaystyle B} {\displaystyle B}.

Esempio di CROSS JOIN esplicito:

SELECT *
FROM   Impiegati CROSS JOIN Dipartimenti

Altro esempio implicito di CROSS JOIN:

SELECT *
FROM   Impiegati, Dipartimenti;
Impiegati.CognomeImpiegati.ID_dipartimentoDipartimenti.Nome_dipartimentoDipartimenti.ID_dipartimento
Rossi31Vendite31
Bianchi33Vendite31
Mancini33Vendite31
Monti34Vendite31
Santoro34Vendite31
GrassiNULLVendite31
Rossi31Tecnico33
Bianchi33Tecnico33
Mancini33Tecnico33
Monti34Tecnico33
Santoro34Tecnico33
GrassiNULLTecnico33
Rossi31Risorse umane34
Bianchi33Risorse umane34
Mancini33Risorse umane34
Monti34Risorse umane34
Santoro34Risorse umane34
GrassiNULLRisorse umane34
Rossi31Promozione35
Bianchi33Promozione35
Mancini33Promozione35
Monti34Promozione35
Santoro34Promozione35
GrassiNULLPromozione35

Outer join

[modifica | modifica wikitesto]

Una OUTER JOIN non richiede che ci sia corrispondenza esatta tra le righe di due tabelle. La tabella risultante da una outer join trattiene tutti quei record che non hanno alcuna corrispondenza tra le tabelle. Le OUTER JOIN si suddividono in LEFT OUTER JOIN, RIGHT OUTER JOIN, e FULL OUTER JOIN, in base a quale sia la tabella di cui intendiamo trattenere i valori in caso di mancata corrispondenza della regola di confronto da (sinistra, destra, o entrambi). In questo caso left (sinistra) e right (destra) si riferiscono ai due lati della keyword JOIN.

Nota sulle clausole WHERE e ON

[modifica | modifica wikitesto]

Si sottolinea come esista un ordine di esecuzione tra le condizioni specificate nella WHERE e quelle presenti nella ON.

Specificatamente le clausole presenti nella ON sono valutate anteriormente all'esecuzione della JOIN mentre le clausole nella where sono valutate successivamente all'esecuzione della JOIN.

Left outer join

[modifica | modifica wikitesto]
Diagramma di Venn che rappresenta la LEFT OUTER JOIN di due tabelle

Il risultato di una query LEFT OUTER JOIN (o semplicemente LEFT JOIN) per le tabelle A {\displaystyle A} {\displaystyle A} e B {\displaystyle B} {\displaystyle B} contiene sempre tutti i record della tabella di sinistra (left) A {\displaystyle A} {\displaystyle A}, mentre vengono estratti dalla tabella di destra (right) B {\displaystyle B} {\displaystyle B} solamente le righe che trovano corrispondenza nella regola di confronto della join. Questo significa che se la clausola ON trova zero righe in B {\displaystyle B} {\displaystyle B}, la JOIN mostrerà una riga risultante con valore NULL in tutte le colonne corrispondenti al risultato per le colonne di B {\displaystyle B} {\displaystyle B}.

Esempio di una left outer join:

SELECT *  
FROM   Impiegati  LEFT OUTER JOIN Dipartimenti  
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento
Impiegati.CognomeImpiegati.ID_dipartimentoDipartimenti.Nome_dipartimentoDipartimenti.ID_dipartimento
Bianchi33Tecnico33
Rossi31Vendite31
Santoro34Risorse umane34
Monti34Risorse umane34
GrassiNULLNULLNULL
Mancini33Tecnico33

Right outer join

[modifica | modifica wikitesto]
Diagramma di Venn che rappresenta la RIGHT OUTER JOIN di due tabelle

Una RIGHT OUTER JOIN (o RIGHT JOIN) semplicemente ricalca il funzionamento della LEFT OUTER JOIN, ma invertendo l'ordine delle tabelle interessate.

Il risultato di una query RIGHT OUTER JOIN per le tabelle A {\displaystyle A} {\displaystyle A} e B {\displaystyle B} {\displaystyle B} contiene sempre tutti i record della tabella di destra (right) B {\displaystyle B} {\displaystyle B}, mentre vengono estratti dalla tabella di sinistra (left) A {\displaystyle A} {\displaystyle A} solamente le righe che trovano corrispondenza nella regola di confronto della JOIN. Questo significa che se la clausola ON trova zero righe in A {\displaystyle A} {\displaystyle A}, la JOIN mostrerà una riga risultante con valore NULL in tutte le colonne corrispondenti al risultato per le colonne di A {\displaystyle A} {\displaystyle A}.

Esempio di una RIGHT OUTER JOIN:

SELECT * 
FROM   Impiegati RIGHT OUTER JOIN Dipartimenti 
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento
Impiegati.CognomeImpiegati.ID_dipartimentoDipartimenti.Nome_dipartimentoDipartimenti.ID_dipartimento
Monti34Risorse umane34
Bianchi33Tecnico33
Santoro34Risorse umane34
Mancini33Tecnico33
Rossi31Vendite31
NULLNULLPromozione35

In pratica sono utilizzate maggiormente le query di LEFT OUTER JOIN rispetto a quelle di RIGHT OUTER JOIN, ma possono verificarsi rari casi in cui in query molto complesse ci sia la necessità di utilizzare contemporaneamente il criterio di LEFT OUTER JOIN e di RIGHT OUTER JOIN.

Lo stesso risultato della precedente RIGHT OUTER JOIN si può ripetere usando il tipo LEFT OUTER JOIN:

SELECT * 
FROM   Dipartimenti LEFT OUTER JOIN Impiegati
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento

Full outer join

[modifica | modifica wikitesto]
Diagramma di Venn che rappresenta la FULL OUTER JOIN di due tabelle

Una FULL OUTER JOIN combina i risultati delle due tabelle A {\displaystyle A} {\displaystyle A} e B {\displaystyle B} {\displaystyle B} tenendo conto di tutte le righe delle tabelle, anche di quelle che non hanno corrispondenza tra di loro.

Il risultato di una query FULL OUTER JOIN per le tabelle A {\displaystyle A} {\displaystyle A} e B {\displaystyle B} {\displaystyle B} contiene sempre tutti i record della tabella di sinistra (left) A {\displaystyle A} {\displaystyle A}, estraendo dalla tabella di destra (right) B {\displaystyle B} {\displaystyle B} solamente le righe che trovano corrispondenza nella regola di confronto della join; inoltre verranno estratti tutti i record della tabella di sinistra (left) A {\displaystyle A} {\displaystyle A} che non trovano corrispondenza nella tabella di destra (right) B {\displaystyle B} {\displaystyle B} impostando a NULL i valori di tutte le colonne della tabella B {\displaystyle B} {\displaystyle B} e tutti i record della tabella di destra (right) B {\displaystyle B} {\displaystyle B} che non trovano corrispondenza nella tabella di sinistra (left) A {\displaystyle A} {\displaystyle A} impostando a NULL i valori di tutte le colonne della tabella A {\displaystyle A} {\displaystyle A}.

Esempio di una FULL OUTER JOIN:

SELECT *  
FROM   Impiegati 
       FULL OUTER JOIN Dipartimenti 
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento
Impiegati.CognomeImpiegati.ID_dipartimentoDipartimenti.Nome_dipartimentoDipartimenti.ID_dipartimento
Monti34Risorse umane34
Bianchi33Tecnico33
Santoro34Risorse umane34
GrassiNULLNULLNULL
Mancini33Tecnico33
Rossi31Vendite31
NULLNULLPromozione35

Alcuni database (come per esempio MySQL) non supportano direttamente questa funzionalità, ma la si può emulare attraverso la combinazione di LEFT OUTER JOIN e RIGHT OUTER JOIN per mezzo della parola riservata UNION.

La creazione di una query di FULL OUTER JOIN si realizzerà come segue:

SELECT *
FROM   Impiegati 
       LEFT JOIN Dipartimenti 
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento
UNION
SELECT *
FROM   Impiegati
       RIGHT JOIN Dipartimenti
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento
WHERE  Impiegati.ID_dipartimento IS NULL

Allo stesso modo senza utilizzare nemmeno la query di RIGHT OUTER JOIN:

SELECT Impiegati.*, Dipartimenti.*
FROM   Impiegati 
       LEFT JOIN Dipartimenti 
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento
UNION
SELECT Impiegati.*, Dipartimenti.*
FROM   Dipartimenti
       LEFT JOIN Impiegati
          ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento
WHERE  Impiegati.ID_dipartimento IS NULL

Self-join

[modifica | modifica wikitesto]

La self-join serve a unire una tabella con se stessa.

Voci correlate

[modifica | modifica wikitesto]
  • Sort merge join
  • SQL

Altri progetti

[modifica | modifica wikitesto]

Altri progetti

  • Wikimedia Commons
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file sulla join

Collegamenti esterni

[modifica | modifica wikitesto]
  • (EN) Denis Howe, join, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
  • Introduzione alle JOIN (nella knowledgebase di AskMonty), su kb.askmonty.org. URL consultato il 18 ottobre 2022 (archiviato dall'url originale il 20 dicembre 2012).
V · D · M
Principali linguaggi di programmazione (tutti)
ABAP · Ada · ALGOL · APL · Assembly · Awk · BASIC · C · C++ · C# · COBOL · Delphi · Eiffel · Fortran · F# · Haskell · IDL · Java · JavaScript · J# · Lisp · LOGO · Lua · ML · Objective-C · OCaml · Pascal · Perl · PHP · PL/I · PLaSM · Prolog · Python · Ruby · Rust · SAS · Scheme · sh · Simula · Smalltalk · SQL · Swift · Visual Basic
  Portale Informatica: accedi alle voci di Teknopedia che trattano di informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Join_(SQL)&oldid=143542491"
Categoria:
  • SQL
Categorie nascoste:
  • Senza fonti - programmazione
  • Senza fonti - giugno 2018
  • Questa pagina è stata modificata per l'ultima volta l'11 feb 2025 alle 17:08.
  • La pagina è stata renderizzata con Parsoid.
  • Il testo è disponibile secondo la licenza Creative Commons Attribuzione-Condividi allo stesso modo; possono applicarsi condizioni ulteriori. Vedi le condizioni d'uso per i dettagli.
  • Informativa sulla privacy
  • Informazioni su Teknopedia
  • Avvertenze
  • Contatti legali e di sicurezza
  • Codice di condotta
  • Sviluppatori
  • Statistiche
  • Dichiarazione sui cookie
  • Versione mobile
  • Wikimedia Foundation
  • Powered by MediaWiki
Join (SQL)
Aggiungi argomento

  • Indonesia
  • English
  • Français
  • 日本語
  • Deutsch
  • Italiano
  • Español
  • Русский
  • فارسی
  • Polski
  • 中文
  • Nederlands
  • Português
  • العربية
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022