 |
SUBHEADER |
 |
| As you view pages on the Web,
you’ll find information that you'd like to save
for future reference or share with other people. You
can save the entire Web page or any part of it: text,
graphics, or links. You can print Web pages for people
who don’t have access to the Web or a computer. |
Con le Oracle query è possibile recuperare i dati in base ad una relazione esistente tra le righe di una tabella. In un database Oracle i dati non vengono memorizzati in modo gerarchico,tuttavia, se esiste una relazione gerarchica tra le righe di una singola tabella, è possibile creare una gerarchia tramite un processo di esame della struttura ad albero. Per query gerarchica si intende un metodo per restituire in un determinato ordine le diramazioni di una struttura ad albero. Si pensi ad un albero genealogico in cui i componenti più anziani sono indicati in corrispondenza della base e quelli più giovani rappresentano le diramazioni che a loro volta possono presentare altre diramazioni e così via.
Le strutture gerarchiche vengono applicate in vari campi quali alberi genealogici, allevamento del bestiame, gestione aziendale (gerarchie), produzione (assemblaggio prodotti), ricerca nel settore evolutivo (sviluppo della specie) e ricerca scientifica.
La sintassi è:
SELECT [LEVEL] , colonna, espr
FROM tabella
[WHERE condizione(i)] --> sarebbe espr operatore_di_confronto espr
[START WITH condizione(i)]
[CONNECT BY PRIOR condizione(i)]
LEVEL: perciascuna riga restituita, questa pseudo-colonna restituisce 1 per una riga radice, 2 per un figlio di una radice e così via
FROM tabella: tabella, vista o snapshot contenente le colonne (solo una tabella)
WHERE: consente di limitare il numero di righe restituite dalla query senza influire su altre righe della gerarchia
espressione: è un confronto senza espressioni
START WITH: specifica le righe radice della gerarchia, ossia il punto di partenza
CONNECT BY PRIOR: specifica le colonne in cui esiste la relazione tra righe padre e righe figlio
La SELECT non può contenere un'operazione di JOIN o una query presente in una vista che contiene un'operazione di JOIN.
La riga o le righe da utilizzare come radice dell'albero sono determinate dalla START WITH, utilizzabile unitamente a qualsiasi condizione valida:
START WITH manager_id IS NULL
START WITH last_name = 'Pluto'
START WITH employee_id = (SELECT employee_id FROM employees WHERE last_name = 'Pluto')
La direzione della query (da padre a figlio o da figlio a padre) è determinata dalla posizione della colonna CONNECT BY PRIOR; PRIOR è riferito alla colonna padre; per trovare il figlio di una colonna padre, Oracle valuta la PRIOR per la riga padre e le altre espressioni per ciascuna riga della tabella. Le righe per le quali la condizione risulta vera rappresentano i figli della riga padre. Oracle seleziona i figli valutando la condizione CONNECT BY rispetto ad una riga padre corrente.
Direzione: top-down ==> colonna1 = chiave padre, colonna2 = chiave figlio
bottom-up ==> colonna1 = chiave figlio, colonna2 = chiave padre
CONNECT BY PRIOR employee_id = manager_id
CONNECT BY PRIOR manager_id = employee_id
Il PRIOR si può mettere anche staccato dal CONNECT BY:
CONNECT BY employee_id = PRIOR manager_id
La CONNECT BY non può contenere una subquery.
|