Få data fra flere Tables


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

Syntax.
SELECT FROM Tabell1 BLI TABLE2 BRUKE (kolonnenavn)

Tenk nedenfor SELECT spørring, ANSATTE bord og AVDELINGER bord . er satt sammen med den vanlige kolonnen DEPARTMENT_ID
SELECT E.first_name NAVN, D.department_name DNAMEFROM ansatte E BLI avdelinger Dusing (department_id);
Selv Bli

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.
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

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.
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);

Vi kan ta i bruk alle sammenligning parameter diskutert tidligere som likhet og ulikhet operatører, MELLOM, IS NULL, ER IKKE NULL, og relasjonelle.

Ytre tiltrer

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.

Høyre Ytre Bli

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.
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

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.
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

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
kartesiske. produkt eller Cross bli

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!
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;



Previous:
Next Page: