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