sql >> Database teknologi >  >> RDS >> Oracle

Hvad er Oracle Joins (Sql Joins)?

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


  1. System.Data.OracleClient kræver Oracle-klientsoftware version 8.1.7 eller nyere

  2. DevOps-overvejelser for produktionsklare databaseimplementeringer

  3. Befolkning af træelement med rekordgruppe i Oracle-formularer

  4. Sådan oprettes og manipuleres SQL-databaser med Python