Soms moet u gegevens uit meerdere tabellen weergeven. Om dat uit te voeren, moet je de ene tabel aan een andere tabel koppelen. Er zijn verschillende manieren waarop we gegevens uit meerdere tabellen kunnen verkrijgen. Hier zou ik me concentreren op Oracle Joins met voorbeelden. Dit geldt in het algemeen ook voor alle Sql-joins . Ik zou inner join, outer join, cross join, natural join, cartesiaans join uitleggen met voorbeelden
Oracle sluit zich aan
Een orakel sluit zich aan is een query die rijen uit twee of meer Oracle-tabellen combineert.
Oracle voert een join uit wanneer meerdere tabellen in de FROM-clausule verschijnen. Om twee tabellen samen te voegen, moet u de gemeenschappelijke kolommen identificeren die de twee tabellen met elkaar in verband brengen. In de WHERE-component definieert u de relatie tussen de tabellen in de FROM-component.
Enkele richtlijnen voor Oracle-joins (Sql-joins)
1) bij het schrijven van de select-instructie die tabellen samenvoegt, is het voor de duidelijkheid een goede gewoonte om de kolomnaam vooraf te laten gaan door de tabelnaam.
2) Om m tabellen samen te voegen, hebben we minimaal m-1 voorwaarden nodig
3) We kunnen een tabelalias gebruiken voor de tabelnaam als de tabelnaam lang is. Tabel ziet er de code korter uit en dus minder geheugen
4) Als u geen tabelnaam of tabellenalias gebruikt bij het selecteren van de kolom en als meerdere tabellen dezelfde kolomnaam hebben, moeten we de tabelnaam voor de kolom specificeren die in alle tabellen voorkomt
Innerlijke deelname
De meest gebruikte operator om twee tabellen te relateren is de gelijkheidsoperator (=). Dit wordt een gelijkheidsjoin of equijoin . genoemd . Deze eenvoudige join staat ook bekend als inner join
Oracle Inner Join Voorbeeld
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;
Om een join van drie of meer tabellen uit te voeren, voegt Oracle twee tabellen samen op basis van de join-voorwaarde en voegt het resultaat vervolgens samen met een andere tabel, op basis van de join-voorwaarden en wordt herhaald totdat alle tabellen zijn samengevoegd.
Complexe joins
Voeg een of meer voorwaarden toe aan de WHERE-clausule. Als u bijvoorbeeld geïnteresseerd bent in alle afdelingen en hun locaties buiten het VK, gebruik dan
SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';
Niet –equijoin
Een non-equijoin is de join-voorwaarde anders dan de gelijkheidsoperator.
Het is een inner join-instructie die een ongelijke bewerking gebruikt (d.w.z.:<>,>, <, =, BETWEEN, etc.) om rijen uit verschillende tabellen te matchen
SELECT e.ename, e.sal, s.grade
FROM emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;
Cartesiaanse producten of cartesiaanse join of cross join
-Een Cartesiaanse join (of Cartesiaans product) (of Cross Join) vindt plaats wanneer gegevens worden geselecteerd uit twee of meer tabellen en de join-voorwaarde is gedefinieerd of er geen gemeenschappelijke relatie is gedefinieerd in de WHERE-component
-Als een join wordt uitgevoerd en er geen join-voorwaarde is opgegeven, resulteert dit in een cartesiaans product. Een Cartesiaans product is een resultaatset die het product is van de totale rijen van de twee tabellen. Als tabel "P" 100 rijen heeft en tabel "Q" 100 rijen en een Cartesiaans product wordt ontwikkeld, zal de resulterende resultaatset 10000 rijen hebben. Als een zoekopdracht drie of meer tabellen samenvoegt, kan het optimalisatieprogramma een manier vinden om een samenvoegingsvolgorde te kiezen die een Cartesiaans product uitsluit, maar reken er niet op.
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP cross join DEPT ;
Outer Joins
De inner joins die we hebben gezien, retourneren de overeenkomende rijen van twee of meer tabellen volgens de join-voorwaarde. Het Outer Join-mechanisme retourneert de gegevens van één tabel, zelfs als er geen corresponderende rij in de join-tabel is.
Er zijn drie buitenste joins
a) Linker buitenste join of linker join
b) Rechter buitenste join of rechter join
c) Volledige outer join of volledige join
Linker buitenste join
retourneert de rijen die overeenkomen met beide tabellen, evenals de niet-overeenkomende rijen van de tabel aan de linkerkant van de join-clausule.
De LEFT OUTER JOIN zou alle records uit de linkertabel retourneren en alleen die records uit de rechtertabel die de rechtertabel kruisen
Hier is het voorbeeld van Oracle Left outer Join
Example:
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;
oracle join-syntaxis (+) :In de Oracle-database kunnen we ook de syntaxis van het plusteken gebruiken voor left outer join. In dit geval staat plus join aan de rechterkant van de vergelijking.
Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;
Rechts buitenste join
retourneert de rijen die overeenkomen met beide tabellen, evenals de niet-overeenkomende rijen van de tabel aan de rechterkant van de join-clausule.
Hier is het voorbeeld voor Oracle Right outer join
Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
oracle join-syntaxis (+) :In de Oracle-database kunnen we ook de syntaxis van het plusteken gebruiken voor RIGHT OUTER JOIN. In dit geval wordt de rechter join aangegeven wanneer het plusteken zich aan de linkerkant van de vergelijking bevindt.
Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;
Volledige uiterlijke deelname
Dit type join retourneert alle rijen van de tabel LINKS en tabel RECHTS met nulls op de plaats waar niet aan de join-voorwaarde wordt voldaan
Hier is het voorbeeld voor Oracle Full Outer Join
select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;
Deze query retourneert alle rijen van beide tabellen. Het gebruik van Oracle-syntaxis met E.DEPT_ID (+) =D.DEPT_ID (+) is onmogelijk omdat het (+)-teken naar slechts één tabel kan verwijzen. We moeten Union gebruiken om hetzelfde te bereiken met het +-teken
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;
Sommige RDBMS ondersteunen de Full outer join-clausule niet, dan kunnen we hieronder gebruiken om dat te dekken
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;
NATUURLIJKE DEELNAME
De natuurlijke join geeft aan dat de join alle kolommen met dezelfde naam in de twee tabellen relateert.
In feite vergelijkt het de gemeenschappelijke kolommen van beide tabellen met elkaar. Men moet controleren of er gemeenschappelijke kolommen in beide tabellen voorkomen voordat een natuurlijke samenvoeging wordt uitgevoerd.
Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME FROM EMP NATURAL JOIN DEPT;
Hier is dept_id dezelfde kolom tussen de tabellen emp en dept
Natuurlijke samenvoeging kan aan meer dan twee tafels deelnemen
Ik hoop dat je deze post op Oracle joins met voorbeelden leuk vindt.
Verwante artikelen
Oracle sql-zelfstudie
Oracle SQL-subquery's
Oracle Set-operators
Oracle-weergave
hoe SQL-query's te schrijven
Kolom automatisch verhogen – Volgorde
Cross-Join in Oracle
doe zelf mee aan orakel met voorbeelden
Oracle join-syntaxisvoorbeelden
Hash Join in Oracle