Nogle gange har du brug for at vise data fra flere tabeller. For at udføre det skal du linke en tabel til en anden tabel. Der er forskellige måder, hvorpå vi kan få data fra flere tabeller. Her vil jeg fokusere på Oracle Joins med eksempler. Dette gælder generelt for alle Sql Joins også . Jeg vil forklare indre sammenføjning, ydre sammenføjning, krydssammenføjning, naturlig sammenføjning, kartesisk sammenføjning med eksempler
Oracle Joins
Et Oracle tilslutter sig er en forespørgsel, der kombinerer rækker fra to eller flere orakeltabeller.
Oracle udfører en join, når der vises flere tabeller i FROM-sætningen. For at forbinde to tabeller skal du identificere de fælles kolonner, der relaterer de to tabeller. I WHERE-sætningen definerer du forholdet mellem tabellerne, der er anført i FROM-sætningen.
Nogle retningslinjer for Oracle Joins (Sql Joins)
1) når du skriver den select-udsagn, der forbinder tabeller, er det god praksis at sætte tabelnavnet foran kolonnenavnet af hensyn til klarheden.
2) For at slutte m tabeller, har vi brug for mindst m-1 betingelser
3) Vi kan bruge tabelalias for tabellernes navn, hvis tabelnavnet er langt. Tabel ser koden kortere ud og dermed mindre hukommelse
4) Hvis du ikke bruger tabelnavn eller tabelalias, mens du vælger kolonnen, og hvis flere tabeller har samme kolonnenavn, skal vi angive tabelnavnet for kolonnen, som er fælles på tværs af tabellerne
Indre deltagelse
Den mest almindelige operator, der bruges til at forbinde to tabeller, er lighedsoperatoren (=). Dette kaldes en ligestillings-join eller equijoin . Denne simple joinforbindelse også kendt som indre join
Oracle Inner Join-eksempel
Syntax
Select tab1.col,tab2.col
from tab1 ,tab2
where tab1.col=tab2.col
SELECT EMP.EMPNO,EMP.ENAME, DEPT.DEPTNO,DEPT.DNAME
FROM EMP , DEPT
where EMP. DEPTNO= DEPT. DEPTNO;
For at udføre en joinforbindelse med tre eller flere tabeller, forbinder Oracle to tabeller baseret på join-betingelsen, og derefter forbinder resultatet til en anden tabel, baseret på join-betingelser og gentager, indtil alle tabeller er forbundet.
Komplekse sammenføjninger
Få tilføjet en eller flere betingelser i WHERE-klausulen. For eksempel, hvis du er interesseret i alle afdelinger og deres placeringer uden for Storbritannien brug
SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';
Ikke -equijoin
En ikke-equijoin er den sammenføjningsbetingelse, der ikke er lighedsoperatør.
Det er en indre join-sætning , der bruger en ulige operation (dvs.:<>,>, <, =, BETWEEN osv.) til at matche rækker fra forskellige tabeller
SELECT e.ename, e.sal, s.grade
FROM emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;
Cartesian Products eller Cartesian Join eller Cross Join
- En kartesisk joinforbindelse (eller kartesisk produkt) (eller Cross Join) opstår, når data vælges fra to eller flere tabeller, og joinbetingelsen er defineret, eller der ikke er defineret en fælles relation i WHERE-udtrykket
-Hvis en sammenføjning udføres, og der ikke er angivet nogen sammenføjningsbetingelse, resulterer et kartesisk produkt. Et kartesisk produkt er et resultatsæt, der er produktet af de to tabellers samlede rækker. Hvis tabel "P" har 100 rækker og tabel "Q" har 100 rækker, og der udvikles et kartesisk produkt, vil det resulterende resultatsæt have 10.000 rækker. Hvis en forespørgsel forbinder tre eller flere tabeller, kan optimeringsværktøjet finde en måde at vælge en joinordre, der udelukker et kartesisk produkt, men regn ikke med det.
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP cross join DEPT ;
Ydre sammenføjninger
De indre joinforbindelser, vi har set, returnerer de matchende rækker fra to eller flere tabeller i henhold til sammenføjningsbetingelsen. Outer Join-mekanismen returnerer data fra én tabel, selvom der ikke er nogen tilsvarende række i sammenføjningstabellen.
Der er tre ydre sammenføjninger
a) Venstre ydre sammenføjning eller venstre sammenføjning
b) Højre ydre sammenføjning eller højre sammenføjning
c) Fuld ydre sammenføjning eller fuld sammenføjning
Venstre ydre forbindelse
returnerer de rækker, der matcher fra begge tabeller, såvel som de umatchede rækker fra tabellen til venstre for join-klausulen.
LEFT OUTER JOIN ville returnere alle poster fra venstre tabel og kun de poster fra højre tabel, der krydser højre tabel
Her er eksemplet med Oracle Left outer Join
Example:
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;
oracle join-syntaks (+) :I Oracle-databasen kan vi også bruge plustegnet-syntaksen for venstre ydre joinforbindelse. I dette tilfælde er plus join på højre side af ligningen.
Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;
Højre ydre samling
returnerer de rækker, der matcher fra begge tabeller, såvel som de umatchede rækker fra tabellen til højre for join-klausulen.
Her er eksemplet for Oracle Right outer join
Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
oracle join-syntaks (+) :I Oracle-databasen kan vi også bruge plustegnet-syntaksen for RIGHT OUTER JOIN. I dette tilfælde angives højre joinforbindelse, når plustegnet er til venstre for ligningen.
Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;
Fuld ydre forbindelse
Denne type join returnerer alle rækker fra VENSTRE-tabellen og HØJRE-tabellen med nuller på plads, hvor join-betingelsen ikke er opfyldt
Her er eksemplet for Oracle Full Outer Join
select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;
Denne forespørgsel returnerer alle rækker fra begge tabeller. Brug af Oracle-syntaks ved hjælp af E.DEPT_ID (+) =D.DEPT_ID (+) er umuligt, fordi (+)-tegnet kun refererer til én tabel. Vi er nødt til at bruge Union for at opnå det samme ved at bruge +-tegn
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+)
union
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno;
Nogle RDBMS understøtter ikke Full outer join-klausulen, så kan vi bruge nedenfor til at dække det
select empno,ename,dept.deptno,dname
from emp
left OUTER JOIN dept
on emp.deptno=dept.deptno
union
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
NATURLIG JOIN
Den naturlige sammenkædning angiver, at sammenkædningen relaterer alle kolonner med de samme navne på de to tabeller.
Grundlæggende sammenlignes de fælles kolonner i begge tabeller med hinanden. Man bør tjekke, om der findes fælles kolonner i begge tabeller, før man laver en naturlig join.
Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME FROM EMP NATURAL JOIN DEPT;
Her er dept_id den samme kolonne mellem tabellerne emp og dept
Naturlig join kan forbinde mere end to tabeller
Håber du kan lide dette indlæg på Oracle joins med eksempler.
Relaterede artikler
Oracle sql tutorial
Oracle SQL-underforespørgsler
Oracle Set Operators
Oracle-visning
hvordan man skriver sql-forespørgsler
Automatisk stigningskolonne – sekvens
Cross Join i Oracle
selv deltage i orakel med eksempler
eksempler på oracle join-syntaks
Hash Deltag i Oracle