sql >> Databasteknik >  >> RDS >> Oracle

Vad är Oracle Joins (Sql Joins)?

Ibland behöver du visa data från flera tabeller. För att kunna utföra det måste du länka en tabell till en annan tabell. Det finns olika sätt på vilka vi kan få data från flera tabeller. Här skulle jag fokusera på Oracle Joins med exempel. Detta gäller i allmänhet även för alla Sql Joins . Jag skulle förklara inre sammanfogning, yttre sammanfogning, korsfogning, naturlig sammanfogning, kartesisk sammanfogning med exempel

Oracle går med

Ett Oracle går med  är en fråga som kombinerar rader från två eller flera orakeltabeller.

Oracle utför en join när flera tabeller visas i FROM-satsen. För att sammanfoga två tabeller måste du identifiera de gemensamma kolumner som relaterar de två tabellerna. I WHERE-satsen definierar du förhållandet mellan tabellerna som anges i FROM-satsen.

Några riktlinjer för  Oracle Joins (Sql Joins)

1) när du skriver select-satsen som förenar tabeller är det bra att föregå kolumnnamnet med tabellnamnet för tydlighetens skull.

2) För att ansluta m tabeller behöver vi minst m-1 villkor

3) Vi kan använda tabellalias för tabellnamnet om tabellnamnet är långt. Tabellen ser koden kortare ut och därmed mindre minne

4)  Om du inte använder tabellnamn eller tabellalias när du väljer kolumnen och Om flera tabeller har samma kolumnnamn, bör vi ange tabellnamn för kolumnen som är gemensam i tabellerna

Inre Join

Den vanligaste operatorn som används för att koppla två tabeller är likhetsoperatorn (=). Detta kallas en jämställdhetsanslutning eller equijoin . Denna enkla sammanfogning även känd som inre sammanfogning

Oracle Inner Join-exempel

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;

För att exekvera en sammanfogning av tre eller fler tabeller, sammanfogar Oracle två tabeller baserat på sammanfogningsvillkoret och sammanfogar sedan resultatet till en annan tabell, baserat på sammanfogningsvillkor och upprepar tills alla tabeller är sammanfogade.

Komplexa kopplingar

Lägg till ett eller flera villkor i WHERE-satsen. Till exempel, om du är intresserad av alla avdelningar och deras platser utanför Storbritannien använder

SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';

Icke –equijoin

En icke-equijoin är anslutningsvillkoret annat än equality operator.

Det är ett inre koppling påstående som använder en ojämlik operation (t.ex.:<>,>, <, =, BETWEEN, etc.) för att matcha rader från olika 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 sammanfogning (eller kartesisk produkt)  (eller Cross Join) inträffar när data väljs från två eller flera tabeller och sammanfogningsvillkor definieras eller ingen gemensam relation definieras i WHERE-satsen

-Om en sammanfogning utförs och inget sammanfogningsvillkor anges, resulterar en kartesisk produkt. En kartesisk produkt är en resultatuppsättning som är produkten av de två tabellernas totala rader. Om tabellen "P" har 100 rader och tabellen "Q" har 100 rader och en kartesisk produkt utvecklas, kommer den resulterande resultatuppsättningen att ha 10 000 rader. Om en fråga ansluter sig till tre eller fler tabeller kan optimeraren hitta ett sätt att välja en sammanfogningsorder som utesluter en kartesisk produkt, men räkna inte med det.

SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME  FROM EMP   , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME  FROM EMP   cross join DEPT ;

Ytteranslutningar

De inre kopplingarna vi har sett, returnerar de matchande raderna från två eller flera tabeller enligt kopplingsvillkoret. Outer Join-mekanismen returnerar data från en tabell även om det inte finns någon motsvarande rad i sammanfogningstabellen.

Det finns tre yttre sammanfogningar

a) Left outer Join eller Left Join

b) Höger yttre koppling eller höger koppling

c) Full yttre sammanfogning eller full sammanfogning

Left Outer Join

returnerar de rader som matchar från båda tabellerna såväl som de omatchade raderna från tabellen till vänster om join-satsen.

LEFT OUTER JOIN skulle returnera alla poster från vänster tabell och endast de poster från höger tabell som korsar höger tabell

Här är exemplet på Oracle Left outer Join

Example:
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;

oracle join-syntax (+) :I  Oracle-databasen kan vi också använda  plusteckensyntaxen för vänster yttre koppling. I det här fallet är pluskoppling till höger om ekvationen.

Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;

 

Right Outer Join

returnerar de rader som matchar från båda tabellerna såväl som de omatchade raderna från tabellen till höger om join-satsen.

Här är exemplet för Oracle Right outer join

Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;

oracle join-syntax (+) :I Oracle-databasen kan vi även använda plusteckensyntaxen för RIGHT OUTER JOIN. I det här fallet indikeras högerkoppling när plustecknet finns till vänster om ekvationen.

Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;

Fullständig yttre koppling

Den här typen av koppling returnerar alla rader från tabellen VÄNSTER och HÖGER med nollor på plats där kopplingsvillkoret inte är uppfyllt

Här är exemplet för Oracle Full Outer Join

select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;

Denna fråga returnerar alla rader från båda tabellerna. Att använda Oracle-syntax med E.DEPT_ID (+) =D.DEPT_ID (+) är omöjligt eftersom (+)-tecknet endast kan referera till en tabell. Vi måste använda Union för att uppnå samma med +-tecken

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;

Vissa RDBMS stöder inte Full outer join-klausulen, då kan vi använda nedan för att täcka 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 naturliga kopplingen anger att kopplingen relaterar alla kolumner med samma namn på de två tabellerna.

I grund och botten jämförs de gemensamma kolumnerna i båda tabellerna med varandra. Man bör kontrollera om gemensamma kolumner finns i båda tabellerna innan man gör en naturlig join.

Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME  FROM EMP  NATURAL JOIN DEPT;

Här är dept_id samma kolumn mellan tabellerna emp och dept

Naturlig sammanfogning kan sammanfoga fler än två tabeller

Hoppas du gillar det här inlägget på Oracle joins med exempel.

Relaterade artiklar
Oracle sql handledning

Oracle SQL Subqueries

Oracle Set Operators

Oracle view

hur man skriver sql-frågor

Automatisk ökning av kolumn – sekvens

Cross Join i Oracle

själv gå med i orakel med exempel

exempel på oracle join-syntax

Hash Gå med i Oracle


  1. Hur man räknar distinkta värden i SQL

  2. Kan jag kopiera en rad i MySQL för att infoga i samma tabell?

  3. Vad är en anpassad körtidsbild i Java 9?

  4. MySQL raderar dubbletter av poster men behåll de senaste