Vise data fra flere tabeller
De relaterte tabeller i en stor database er knyttet gjennom bruk av utenlandske og primærnøkler eller hva er ofte referert til som vanlige kolonner. Muligheten til å bli med tabeller vil gjøre deg i stand til å legge mer mening til resultattabellen som produseres. For 'n' antall tabeller for å være sammen i en spørring, minimum (n-1) bli med forholdene er nødvendig. Basert på delta forholdene, kombinerer Oracle matchende par av rader og viser en som tilfredsstiller delta tilstand.
tiltrer klassifiseres som under
Naturlig join (også kjent som en equijoin eller en enkel delta.) - Oppretter et delta ved hjelp av en vanlig navngitt og definert kolonne
ikke likestilling delta -. tiltrer tabeller når det ikke er noen tilsvarende rader i tabellene for å settes sammen, for eksempel for å matche verdier i en kolonne i en tabell med en rekke verdier i en annen tabell < .no>
Selv delta - tiltrer et bord for seg selv
Ytre delta -. Inkluderer poster i en tabell i produksjonen når det er ingen samsvarende post i andre tabellen
kartesisk delta (også kjent som et kartesisk produkt eller kryss delta) -. gjentak hver rad fra den første tabellen med hver p fra den andre table.Creates en join mellom bordene etter viser alle mulige posten kombinasjon.
Natural Bli
NATURAL søkeord kan forenkle syntaksen til en equijoin.A NATURLIG BLI er mulig når to (eller flere) tabeller har kolonner med samme navn, og kolonnene er å bli kompatible, dvs. kolonnene har et felles domene values.The operasjon blir rader fra tabeller som har like kolonneverdier for de samme navngitte kolonner.
Tenk på en-til-mange forholdet mellom avdelinger og aNSATTE tables.Each tabellen har en kolonne som heter DEPARTMENT_ID.This kolonnen er primærnøkkelen av avdelingene bordet og en fremmednøkkel av de ansatte tabellen.
SELECT E.first_name NAVN, D.department_name DNAMEFROM ansatte E NATURLIG bLI avdelinger D; FIRST_NAMEs DNAME ---------- ------ MILLER DEPT 1Joh DEPT 1MARTIN DEPT 2EDWIN DEPT 2
under SELECT spørring blir de to tabellene ved å spesifisere delta tilstand med . ON søkeord
SELECT E.first_name NAVN, D.department_name DNAMEFROM ansatte E BLI avdelinger DON (E.department_id = D.department_id);
det er noen begrensninger når det gjelder NATURAL JOIN.You kan ikke angi en LOB-kolonne med en naturlig JOIN.Also kan kolonner som er involvert i å delta ikke være kvalifisert ved et bord navn eller alias.
BRUKE klausul
ved hjelp av Natural tiltrer, Oracle implisitt identifisere kolonner for å danne grunnlag for å delta . Mange situasjoner krever eksplisitt erklæring delta forhold. I slike tilfeller bruker vi BRUKE klausul for å angi bli med kriterier. Siden BRUKE klausul tiltrer tabeller basert på likeverd kolonner, er det også kjent som Equijoin. De er også kjent som Indre blir med eller enkle sammenføyninger Tenk nedenfor SELECT spørring, ANSATTE bord og AVDELINGER bord . er satt sammen med den vanlige kolonnen DEPARTMENT_ID en egenkombinering drift gir en resultattabell når foreligger forholdet interesse blant rader som er lagret i en enkelt tabell. Med andre ord, når en tabell er sluttet til seg selv, bli med er kjent som selv Delta. Tenk ANSATTE tabellen, som inneholder ansatt og rapportering managers.To finne lederens navn for en ansatt vil kreve en bli med på EMP tabellen selv. Dette er en typisk kandidat for Self Delta. En ikke-likestilling delta brukes når de relaterte kolonner ikke kan settes sammen med et likhetstegn-som betyr at det ikke er noen tilsvarende rader i tabellene for å være joined.A ikke likestilling bli med kan du lagre en rekke minimumsverdi i en kolonne av en post og maksimal verdi i en annen kolonne. Så i stedet for å finne en kolonne-tocolumn kamp, kan du bruke en ikke-likestilling bli med å avgjøre om varen blir sendt faller mellom minimum og maksimum områder i columns.If sammenføyningen gjør finne en matchende utvalg for varen, tilsvarende frakt gebyr kan returneres i resultatene. Som med den tradisjonelle metoden for likestilling tiltrer, bli en ikke-likestilling kan utføres i et WHERE-leddet. I tillegg kan BLI nøkkelordet brukes med ON-leddet til specifyrelevant kolonner for å delta. Vi kan ta i bruk alle sammenligning parameter diskutert tidligere som likhet og ulikhet operatører, MELLOM, IS NULL, ER IKKE NULL, og relasjonelle. en ytre delta brukes til . identifisere situasjoner der radene i en tabell ikke samsvarer rader i en annen tabell, selv om de to tabellene er relatert det er tre typer av ytre sammenføyninger: VENSTRE, HØYRE, og FULL yTRE BLI. De begynner med en INNER JOIN, og deretter legge de tilbake noen av radene som har blitt droppet. En LEFT Ytre BLI legger tilbake alle radene som er falt fra første (venstre) tabell i sammenføyningen tilstand, og utgangs kolonner fra den andre (høyre) bordet er satt til NULL. En HØYRE YTRE BLI legger tilbake alle radene som falt fra den andre (høyre) tabell i sammenføyningen tilstand, og utgangs kolonner fra den første (venstre) bordet er satt til NULL. FULL YTRE BLI legger tilbake alle radene som er falt fra begge tabellene. En HØYRE YTRE BLI legger tilbake alle radene som falt fra den andre (høyre) tabell i sammenføyningen tilstand, og utgangs kolonner fra den første (venstre) tabellen satt til NULL. Legg merke til under spørring viser ansatte og deres tilsvarende avdelinger. Også ingen ansatte har blitt tildelt avdeling 30. En VENSTRE YTRE bLI legger tilbake alle radene som er falt fra første (venstre) tabell i sammenføyningen tilstand, og utgangs kolonner fra den andre (høyre) bordet er satt til NULL. Spørringen demonstrert ovenfor kan brukes til å demonstrere venstre ytre delta, ved å bytte stilling (+) tegnet. FULL YTRE BLI legger tilbake alle radene som er falt fra begge tabellene. Under søket viser lister de ansatte og deres avdelinger. Merk at ansattes MAN "har ikke fått tildelt noen avdeling til nå (dens NULL) og avdeling 30 er ikke tildelt noen employee.SELECT NVL (e.first_name, '-') first_name, NVL (to_char (d.department_id), '-') department_idFROM ansatt e FULL YTRE BLI avdeling Don e. depARTMENT_ID = d. depARTMENT_ID; FIRST_NAME DEPARTMENT_ID ---------- -------------------- MAN -John 10EDWIN 20MILLER 10MARTIN 20- 306 rader valgt For to enhetene A og B, A * B kjent som kartesisk produkt. Et kartesisk produkt består av alle mulige kombinasjoner av de rekker fra hver av tabellene. Derfor, når en tabell med 10 rader er sammen med en tabell med 20 rader, er det kartesisk produkt 200 rader (10 * 20 = 200) .For eksempel, bli den ansatte tabellen med åtte rader og avdelingen tabellen med tre rader vil produsere et kartesisk produkt tabell over 24 rader (8 * 3 = 24). Cross delta refererer til kartesisk produkt av to tabeller. Den produserer kryssproduktet av to tabeller. Ovennevnte søket kan skrives med CROSS BLI klausul. Et kartesisk produkt resultattabell er normalt ikke veldig nyttig. Faktisk kan et slikt resultat bord være veldig misvisende. Hvis du utfører under spørring for de ansatte og avdelinger bord, innebærer resultattabellen at alle ansatte har et forhold til hver avdeling, og vi vet at dette er slett ikke tilfelle!
Syntax.
SELECT
SELECT E.first_name NAVN, D.department_name DNAMEFROM ansatte E BLI avdelinger Dusing (department_id);
Selv Bli
SELECT e1.FirstName Manager e2.FirstName EmployeeFROM ansatte e1 BLI ansatte e2ON (e1.employee_id = e2.manager_id) ORDER BY e2.manager_id DESC;
Ikke Equijoins
SELECT E.first_name, J.job_hisal, J.job_losal, E.salary Fra ansatte E BLI job_sal J ON (E.salary MELLOM J.job_losal OG J.job_losal);
Ytre tiltrer
Høyre Ytre Bli
Velg E.first_name, E.salary, D.department_id Fra ansatte E, avdelinger DWHERE E.DEPARTMENT_ID (+) = D.DEPARTMENT_ID; FIRST_NAMEs LØNN DEPARTMENT_ID ----- ----- ---------- ---------- JOHN 6000 10EDWIN 2000 20MILLER 2500 10MARTIN 4000 20 30
Venstre Ytre Bli
SELECT E.first_name, E.salary, D.department_idFROM ansatte E, avdelinger DWHERE D.DEPARTMENT_ID = E.DEPARTMENT_ID (+), FIRST_NAMEs LØNN DEPARTMENT_ID ---------- ---------- ---------- JOHN 6000 10EDWIN 2000 20MILLER 2500 10MARTIN 4000 20 30
Full Ytre Bli
kartesiske. produkt eller Cross bli
Velg E.first_name, D.DNAMEFROM ansatte E, avdelinger D; kan Kors delta skrives som velger E.first_name, D.DNAMEFROM ansatte E CROSS bLI avdelinger D;