sql >> Database >  >> RDS >> Oracle

Wat zijn Oracle-joins (Sql-joins)?

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


  1. Zijn kringverwijzingen acceptabel in de database?

  2. Begrijpen wat sp_updatestats echt wordt bijgewerkt

  3. Hoe om te gaan met fouten voor dubbele vermeldingen?

  4. PDO:MySQL-server is verdwenen