title: Nested loop join
text: # Nested loop join
  
  Il nested loop join (NLJ), o simple nested loop join, è un algoritmo di join che unisce due set usando due cicli nidificati. Una delle due relazioni viene designata come esterna e l'altra interna.
  
  Questo algoritmo legge righe dalla prima tabella una per volta in un ciclo, passando ogni riga al ciclo nidificato che elabora la tabella successiva nel join. Questo processo viene ripetuto per ogni tabella coinvolta nel join. Supponendo R esterna e S interna l'algoritmo per ogni tupla di R, che verifica le eventuali altre condizioni su R, accede a S ricercando tutte le tuple di S che soddisfano tutte le eventuali altre condizioni su S e che possono concatenarsi con le tuple di R. Possiamo schematizzare questo comportamento con
  
  ## Valutazione dei costi
  
  Dato che l'algoritmo NLJ passa le righe dal ciclo esterno a quello interno una alla volta, tipicamente le tabelle elaborate nel ciclo più interno vengono lette molte volte. Il costo di esecuzione è espresso come:
  
      C(R) + TR x C(S)
  
  dove:
  
      C(R) è il costo di accesso a R
      TR è il numero atteso di tuple residue di R
      C(S) è il costo di accesso a S
  
  ## Varianti
  
  Esiste un algoritmo di join, chiamato block nested loop join, che si differenzia da quello di nested-loop poiché i dati vengono salvati in memoria per ridurre il numero di volte che S viene scansionata.
  
  