SQL Academy · Lezione

Self-join e alias

Esegua una join di una tabella con sé stessa usando gli alias per confrontare righe della stessa tabella, come dipendenti e responsabili o date e date precedenti

Lezione 4 di 413 passaggi

Self-join e alias è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Self-join: collegare una tabella con se stessa

A volte la relazione si trova all'interno di un'unica tabella:

  • Dipendenti ↔ Responsabili, dove il responsabile è a sua volta un dipendente
  • Commenti in thread, dove ogni commento ha un parent_id
  • Grafo delle amicizie, utente ↔ utente

La configurazione

Una tabella employees con una FK che fa riferimento alla stessa tabella:

CREATE TABLE employees (
  id BIGSERIAL PRIMARY KEY,
  full_name TEXT NOT NULL,
  manager_id BIGINT REFERENCES employees(id)
);

Collegare i dipendenti ai loro responsabili

Assegni un alias diverso a ogni istanza:

SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id;

Senza alias il codice non verrebbe compilato

Senza alias non è possibile sapere a quale full_name ci si riferisce. Ogni riferimento è ambiguo:

-- ERROR: column reference "full_name" is ambiguous
SELECT full_name FROM employees JOIN employees ON ...

LEFT JOIN per i dipendenti di livello superiore

Un join INNER esclude i dipendenti che non hanno un responsabile, ad esempio il CEO. Utilizzi LEFT JOIN per conservarli:

SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;

Commenti in thread

Mostri ogni commento insieme al testo del relativo genitore:

SELECT c.id, c.body, p.body AS parent_body
FROM comments c
LEFT JOIN comments p ON p.id = c.parent_id;

Coppie e combinazioni

Trovi le coppie di prodotti apparse nello stesso ordine, senza duplicare le coppie (A,B) e (B,A):

SELECT a.id AS product_a, b.id AS product_b
FROM order_items a
JOIN order_items b
  ON a.order_id = b.order_id
 AND a.product_id < b.product_id;

Confrontare righe adiacenti

Esegua il self-join sulla versione "precedente" di una riga:

SELECT a.id, a.created_at, b.created_at AS prev_at
FROM events a
LEFT JOIN events b ON b.id = a.previous_id;

Self-join e funzione finestra

Per molte attività che richiedono di "confrontare ogni riga con quella precedente", una funzione finestra (LAG) è più semplice e veloce di un self-join. L'argomento è trattato in Window Functions Deep Dive.

Self-join ricorsivi

Deve percorrere N livelli di profondità, ad esempio un organigramma o un albero di thread? Utilizzi una CTE ricorsiva: l'argomento è trattato in Subqueries and CTEs.

Indicizzare la colonna FK

Aggiunga sempre un indice sulla colonna FK che fa riferimento alla stessa tabella. Senza di esso, il join analizza l'intera tabella per ogni ricerca del genitore.

CREATE INDEX employees_manager_idx ON employees(manager_id);

Riepilogo

Le self-join gestiscono le relazioni all'interno di una singola tabella.

  • Due alias per due copie virtuali
  • LEFT JOIN per mantenere le righe radice / di livello superiore
  • Indicizzare la colonna FK
  • Le funzioni finestra possono semplificare gli schemi con la «riga precedente»

Verifica rapida

Si esegue una join della tabella employees con se stessa per trovare il manager di ciascun dipendente. Perché sono necessari gli alias?

Gratis per iniziare

Impara SQL con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
46
Lezioni
183

Domande Frequenti

La lezione «Self-join e alias» è gratuita?

Sì — il testo completo di «Self-join e alias» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Self-join e alias»?

Esegua una join di una tabella con sé stessa usando gli alias per confrontare righe della stessa tabella, come dipendenti e responsabili o date e date precedenti Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Self-join e alias»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché usare le join (ripasso del modello relazionale)
  2. Meccanismi di INNER JOIN
  3. LEFT/RIGHT JOIN e join OUTER
  4. Self-join e alias
← Torna a SQL Academy