Assenza di dati della query non suggerisce solo al momento presente. Un record manca, tuttavia , è un dato che potrebbe o dovrebbe essere presente, ma non lo è. Ad esempio , i dati del cliente e gli ordini risiedono in tabelle Customers e Orders . Un elenco dei clienti è richiesto , e voi , il programmatore , assumere ogni cliente ha un ordine . Fornendo ai clienti di ordini dovrebbe fornire l' elenco dei clienti corretta , ma lo fa? Elenco clienti dai clienti possono produrre di più , suggerendo alcuni clienti hanno dispersi ordini. È necessario verificare che i clienti mancano ordini e quindi capire se questa circostanza è di progettazione o di un bug . Istruzioni
1
Mostra clienti distinti nella tabella Clienti. Per esempio :
selezionare i clienti C.CUSTOMERIDFROM DISTINTI C
2
Mostra clienti distinti in tabella ORDINI . Per esempio :
SELEZIONA GLI ORDINI O.CUSTOMERIDFROM DISTINTI O
3
Determinare i clienti con ordini mancanti combinando i punti 1 e 2 in una subquery correlata
< p . > SELECT DISTINCT C.CUSTOMERIDFROM CLIENTI CWHERE NOT EXISTS ( SELECT * FROM ORDINI OWHERE O.CUSTOMERID = C.CUSTOMERID ) per
esiste è una funzione di Oracle che i test per l'esistenza di record restituiti sottoquery . Prefazione di test ", non" per l'assenza di registrazioni . Qui , la sottoquery soddisfa i clienti in entrambe le tabelle . Partite risultati restituiti , il che escluderebbe quelli abbinati CustomerId di dalla principale set di risultati . Solo CustomerId di senza partita O.CUSTOMERID verrebbe visualizzato .
4
alternativa, determinare i record mancanti da una visione composita di cusotmer e tavoli ordine.
SELECT DISTINCT C.CUSTOMERIDFROM CLIENTI C , ORDINI OWHERE C.CUSTOMERID = O.CUSTOMERID ( +) e O.CUSTOMERID è nullo
Se si sospetta la tabella ordine poteva mancare record , quindi provare questa query per visualizzare lato C.CUSTOMERID e O.CUSTOMERID a fianco. La ( + ) invoca un join esterno sinistro , che indica a Oracle di mostrare tutti i dati corrispondenti dalla WHERE plus ' s dalla tabella di sinistra che non hanno alcuna corrispondenza O.CUSTOMERID ' qualsiasi C.CUSTOMERID s nella tabella a destra .
< p > Se ci sono ' s senza O.CUSTOMERID matching' C.CUSTOMERID s , essi mostrano con valori nulli per s l' inesistente O.CUSTOMERID ' . Le righe che dispongono di tali valori nulli rappresentano i record di ordini mancanti.
Se la lista è troppo lunga per l'ispezione visiva , la seconda istruzione WHERE garantisce i risultati sono limitati a s C.CUSTOMERID ' con gli ordini mancanti.