Afwezigheid van opgevraagde gegevens alleen stelt momenteel niet aanwezig is. Een ontbrekende record, is echter gegevens die zouden kunnen of moeten presenteren maar is niet. Bijvoorbeeld klantgegevens en bestellingen bevinden zich in de tabellen klanten en Orders. Een klantenlijst wordt aangevraagd, en u, de programmeur, veronderstellen dat elke klant een order heeft. Verstrekken van klanten uit Orders dienen de juiste klantenlijst, maar doet het? Lijst van klanten uit klanten kan opleveren meer, suggereren sommige klanten hebben ontbrekende bestellingen. U moet nagaan welke klanten ontbreken bestellingen en dan begrijpen als deze omstandigheid door ontwerp of een bug is.
Verschillende klanten in de klantentabel weergeven Bijvoorbeeld:
SELECTEER VERSCHILLENDE C.CUSTOMERID
VAN KLANTEN CVerschillende klanten in de tabel ORDERS weergeven Bijvoorbeeld:
SELECTEER VERSCHILLENDE O.CUSTOMERID
VAN ORDERS OBepalen klanten met ontbrekende bestellingen door stap 1 en 2 samenvoegen in een gecorreleerde subquery.
SELECTEER VERSCHILLENDE C.CUSTOMERID
VAN KLANTEN C
WAAR NIET BESTAAT
(SELECTEER *FROM ORDERS O
WAARBIJ O.CUSTOMERID = C.CUSTOMERID)
EXISTS is een Oracle-functie die controleert of het bestaan van geretourneerde subquery records. Als inleiding op met "Niet" tests voor de afwezigheid van records. Hier, de subquery komt overeen met klanten in beide tabellen. Wedstrijden resultaten, die die gematched CUSTOMERID van de belangrijkste resultaatset uitsluiten zou geretourneerd. Enige CUSTOMERID met geen O.CUSTOMERID match zou worden weergegeven.
U kunt ook bepalen ontbrekende records uit een samengestelde weergave van tabellen CUSOTMER en orde.
SELECTEER VERSCHILLENDE C.CUSTOMERID
BESTELLINGEN VAN KLANTEN DE C, O
WAARBIJ C.CUSTOMERID = O.CUSTOMERID(+)and O.CUSTOMERID is null
Als u vermoedt dat de tabel kan records ontbreken dat, probeer dan deze query als C.CUSTOMERID en O.CUSTOMERID naast elkaar wilt weergeven. Het (+) roept een left outer join, die vertelt van Oracle om te laten zien, alle overeenkomende gegevens van de WHERE-instructie plus een C.CUSTOMERID uit de linker tabel waarvoor geen overeenkomende O.CUSTOMERID in de tabel van de rechterkant.
Als er C.CUSTOMERID's met geen overeenkomende O.CUSTOMERID zijn, zullen zij tonen met null-waarden voor de niet-bestaande O. CUSTOMERID De rijen moeten dergelijke Null-waarden vertegenwoordigen de ontbrekende orderrecords.
Als de lijst te lang voor visuele inspectie is, is de tweede waar instructie zorgt ervoor dat de resultaten beperkt tot C.CUSTOMERID met ontbrekende bestellingen.
- De query wordt beschouwd als gecorreleerd omdat de subquery wordt verwezen naar C.CUSTOMER, die in een tabel niet waarnaar wordt verwezen in de subquery bestaat. Oracle verwerkt de subquery één record tegelijk probeert te overeenkomen met elk O.CUSTOMER naar een C.CUSTOMER achtereenvolgens een null of not null record afhankelijk van de uitslag van de wedstrijd terug te keren.
- Een ongecorreleerde subquery heeft geen verwijzing naar een veld buiten haar verwijzingen-tabellen. Dit dwingt Oracle te lopen van de subquery en overeenkomen met de gehele resultaatset naar de hoofdquery, op zoek naar wedstrijden de WHERE-component voorwaarden.
- Niet te vangen ontbrekende records kunnen effect hebben op uw eindverslag presenteren niet het volledige bereik van de gegevens.