Bruke Set Operators

Sett operatører er vant til å bli resultatet av to (eller flere) SELECT statements.The SET operatører tilgjengelig i Oracle 11g er UNION, UNION ALL, INTERSECT, og MINUS.

UNION sett operatøren returnerer de samlede resultatene fra de to SELECT statements.Essentially, det fjerner duplikater fra resultatene dvs. bare én rad vil bli notert for hver dupliseres result.To teller dette problemet, kan du bruke UNION ALL sett operatør som beholder duplikater i slutt result.INTERSECT listene bare registrerer som er felles for både SELECT spørringer; den MINUS sett operatøren fjerner andre spørre resultater fra produksjonen hvis de finnes også i resultatene den første spørre tallet. Skjæring og MINUS sett operasjoner produsere ikke-dupliserte resultater.

Alle SET operatørene har samme grad av forrang blant them.Instead, under spørringen kjøres, starter Oracle evaluering fra venstre til høyre eller fra topp til bottom.If eksplisitt parenteser blir brukt, så ordren kan avvike som parentes ville bli prioritert fremfor dingler operatører

Punkter å huske -.

Samme antall kolonner må velges av alle deltakende SELECT-setninger. kolonnenavn som brukes i displayet er hentet fra den første spørringen.

Datatyper kolonnelisten av må være kompatible /implisitt cabriolet av orakel. Oracle vil ikke utføre implisitt typekonvertering dersom tilsvarende kolonner i komponent spørsmål tilhører ulike datatype groups.For eksempel, hvis en kolonne i den første komponenten søket er av datatypen DATE, og den tilsvarende kolonnen i den andre komponenten søket er av data skriver røye, vil Oracle ikke utføre implisitt konvertering, men heve ORA-01790 feil.

Posisjons bestilling må brukes til å sortere resultatsettet. Individuell resultatsett bestilling er ikke tillatt med Set operatører. ORDER BY kan vises en gang på slutten av spørringen. For eksempel

UNION og kryss operatører er kommutativ, dvs. rekkefølgen av spørsmål er ikke viktig; det endrer ikke det endelige resultatet.

Ytelse klok, UNION ALL viser bedre ytelse i forhold til UNION fordi ressursene ikke er bortkastet i filtrerings duplikater og sortering resultatsettet.

Sett operatørene kan være en del av sub-spørringer.

Sett operatørene kan ikke brukes i SELECT-setninger som inneholder TABLE samling uttrykk.

LONG, BLOB, CLOB, BFILE, VARRAY, eller nestet tabell er ikke tillatt for bruk i Set operators.For oppdatering leddet er ikke tillatt med faste operatører.

UNION
< p> Når flere SELECT spørringer er satt sammen med UNION operatør, viser Oracle det samlede resultatet fra alle de sammensatte SELECT spørringer, etter å ha fjernet alle duplikater og i sortert rekkefølge (stigende som standard), uten å ignorere de NULL verdier.

Tenk på under fem spørsmål sluttet å bruke UNION operator.The endelige kombinert resultatsettet inneholder verdier fra alle SQLs. Legg merke til duplisering fjerning og sortering av data
Velg en NUM Fra DUALUNIONSELECT 5 Fra DUAL UNIONSELECT 3 Fra DUALUNIONSELECT 6 Fra DUALUNIONSELECT 3 Fra DUAL;. NUM ------- 1356

For å bli lagt merke til, kolonnene valgt I Velg spørringer må være kompatible datatype. Oracle kaster en feilmelding når regelen blir brutt
VELG TO_DATE ('12 okt-03 ') Fra DUALUNIONSELECT '13 okt-03' FROM DUAL;. SELECT TO_DATE ('12 okt-03 ') FROM DUAL * FEIL på linje 1: ORA-01790: uttrykket må ha samme datatype som tilsvarende uttrykk
UNION ALL

UNION og UNION ALL er like i sin funksjon med en liten forskjell. Men UNION ALL gir resultatsettet uten å fjerne dobbeltarbeid og sortering av data. For eksempel, i over spørre UNION erstattes av UNION ALL for å se effekten.

Tenk spørringen demonstrert i UNION delen. Merk forskjellen i produksjonen som er generert uten sortering og deduplisering
Velg en NUM Fra DUALUNION ALLSELECT 5 Fra DUAL UNION ALLSELECT 3 Fra DUALUNION ALLSELECT 6 Fra DUALUNION ALLSELECT 3 Fra DUAL;. NUM ------- 15363 < h2> INTERSECT

Ved hjelp INTERSECT operatør, viser Oracle felles rader fra både SELECT-setninger, uten dubletter og data arrangert i sortert rekkefølge (stigende som standard).

For eksempel under SELECT spørring henter lønnen som er vanlig i avdeling 10 og 20.As per ISO SQL Standards, INTERSECT er over andre i forrang for evaluering av faste operatører, men dette er ikke fortsatt innlemmet ved Oracle.
SELECT SALARYFROM employeesWHERE DEPARTMENT_ID = 10INTRESECTSELECT lønn fra employeesWHERE DEPARTMENT_ID = 20SALARY --------- 150012002000
MINUS

Minus operatør viser radene som er til stede i den første spørringen, men fraværende i det andre spørsmålet, uten duplikater og data arrangert i stigende rekkefølge som standard.
SELECT JOB_IDFROM employeesWHERE DEPARTMENT_ID = 10MINUSSELECT JOB_IDFROM employeesWHERE DEPARTMENT_ID = 20; JOB_ID ------------- HRFINADMIN

matchende SELECT-setningen

Det kan være scenarier der sammensatte SELECT-setninger kan ha ulik count og datatypen valgte kolonner. Derfor kolonnelisten for å matche eksplisitt, er NULL kolonner satt inn på de manglende stillingene slik matche tellingen og datatypen valgte kolonnene i hvert SELECT-setning. For tallkolonner, kan null også erstattes for å matche den type kolonnene valgte i søket.

I under spørring, datatypen ansattes navn (varchar2) og plassering id (antall) stemmer ikke overens . Derfor ville gjennomføring av under spørre heve feil på grunn av kompatibilitetsproblem
VELG DEPARTMENT_ID "Dept", FIRST_NAME "Employee" FRA employeesUNIONSELECT DEPARTMENT_ID, LOCATION_IDFROM avdelinger; FEIL på linje 1:. ORA-01790: uttrykket må ha samme datatype som tilsvarende uttrykk

Eksplisitt, kolonner kan matches ved å erstatte NULL for plassering id og Employee navn.
VELG DEPARTMENT_ID "Dept", FIRST_NAME "ansatt", NULL "Location" FRA employeesUNIONSELECT DEPARTMENT_ID, NULL "ansatt", LOCATION_IDFROM avdelinger;
Bruke ORDER BY-leddet i SET operasjoner

ORDER BY-ledd kan bare vises en gang på slutten av søket holdig forbindelse SELECT statements.It innebærer at enkelte SELECT-setninger kan ikke ha ORDER BY-ledd. I tillegg kan sorteringen være basert på kolonnene som vises i den første SELECT spørringen bare. Av denne grunn anbefales det å sortere forbindelsen søket ved hjelp kolonneposisjoner.

compund spørring under samordner resultatene fra to avdelinger og sorterer etter lønnen kolonne
Velg ansatt_nr, FIRST_NAME, salaryFROM employeesWHERE department_id = 10UNIONSELECT ansatt_nr, FIRST_NAME, salaryFROM employeesWHERE department_id = 20ORDER BY tre.;



Previous:
Next Page: