sql >> Databáze >  >> RDS >> Oracle

Co jsou Oracle Joins (Sql Joins)?

Někdy je potřeba zobrazit data z více tabulek. Chcete-li to provést, musíte propojit jednu tabulku s jinou tabulkou. Existují různé způsoby, jak můžeme získat data z více tabulek. Zde bych se zaměřil na Oracle Joins s příklady. To platí obecně také pro jakékoli Sql Joins . Vysvětlil bych vnitřní spojení, vnější spojení, křížové spojení, přirozené spojení, kartézské spojení s příklady

Připojení k Oracle

Připojuje se Oracle  je dotaz, který kombinuje řádky ze dvou nebo více tabulek Oracle.

Oracle provede spojení vždy, když se v klauzuli FROM objeví více tabulek. Chcete-li spojit dvě tabulky, musíte identifikovat společné sloupce, které s těmito dvěma tabulkami souvisí. V klauzuli WHERE definujete vztah mezi tabulkami uvedenými v klauzuli FROM.

Některá pravidla pro  Oracle Joins ( Sql Joins)

1) při psaní příkazu select, který spojuje tabulky, je dobrou praxí uvést před název sloupce název tabulky z důvodu přehlednosti.

2) Ke spojení m tabulek potřebujeme alespoň m-1 podmínek

3) Pokud je název tabulky dlouhý, můžeme pro název tabulky použít alias tabulky. Tabulka vypadá kód kratší a tedy méně paměti

4)  Pokud při výběru sloupce nepoužíváte název_tabulky nebo alias tabulek a pokud má více tabulek stejný název sloupce, měli bychom zadat název_tabulky pro sloupec, který je pro všechny tabulky společný

Vnitřní spojení

Nejběžnějším operátorem používaným ke spojení dvou tabulek je operátor rovnosti (=). Tomu se říká rovnoprávné spojení nebo equijoin . Toto jednoduché spojení známé také jako vnitřní spojení

Příklad vnitřního spojení Oracle

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;

Aby bylo možné provést spojení tří nebo více tabulek, Oracle spojí dvě tabulky na základě podmínky spojení, poté připojí výsledek k jiné tabulce na základě podmínek spojení a opakuje, dokud nejsou spojeny všechny tabulky.

Komplexní spojení

Do klauzule WHERE přidejte jednu nebo více podmínek. Pokud vás například zajímají všechna oddělení a jejich umístění mimo Spojené království, použijte

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

Není –equijoin

Non-equijoin je podmínka spojení jiná než operátor rovnosti.

Jedná se o příkaz vnitřního spojení, který používá nerovnou operaci (tj.:<>,>, <, =, BETWEEN atd.) ke spárování řádků z různých tabulek

SELECT e.ename, e.sal, s.grade
FROM  emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;

Kartézské produkty nebo Kartézské spojení nebo Křížové spojení

-Kartézské spojení (nebo kartézský součin)  (nebo křížové spojení) nastane, když jsou data vybrána ze dvou nebo více tabulek a je definována podmínka spojení nebo není definován žádný společný vztah v klauzuli WHERE

-Pokud je provedeno spojení a není zadána žádná podmínka spojení, výsledkem je kartézský součin. Kartézský součin je sada výsledků, která je součinem celkových řádků dvou tabulek. Pokud má tabulka „P“ 100 řádků a tabulka „Q“ má 100 řádků a je vyvinut kartézský součin, výsledná sada výsledků bude mít 10 000 řádků. Pokud dotaz spojí tři nebo více tabulek, optimalizátor může najít způsob, jak vybrat pořadí spojení, které vylučuje kartézský produkt, ale nepočítejte s ním.

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

Vnější spojení

Vnitřní spojení, která jsme viděli, vracejí odpovídající řádky ze dvou nebo více tabulek podle podmínky spojení. Mechanismus vnějšího spojení vrací data z jedné tabulky, i když ve spojovací tabulce není žádný odpovídající řádek.

Existují tři vnější spojení

a) Levé vnější spojení nebo Levé spojení

b) Pravé vnější spojení nebo Pravé spojení

c) Úplné vnější spojení nebo úplné spojení

Levé vnější spojení

vrátí řádky odpovídající z obou tabulek i neshodné řádky z tabulky nalevo od klauzule spojení.

LEFT OUTER JOIN by vrátil všechny záznamy z levé tabulky a pouze ty záznamy z pravé tabulky, které se protínají s pravou tabulkou

Zde je příklad levého vnějšího spojení Oracle

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

syntaxe spojení Oracle (+) :V  databázi Oracle můžeme také použít syntaxi znaménka plus pro levé vnější spojení. V tomto případě je plus spojení na pravé straně rovnice.

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

 

Přímé vnější spojení

vrátí řádky odpovídající z obou tabulek i neshodné řádky z tabulky napravo od klauzule spojení.

Zde je příklad pro vnější spojení Oracle Right

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

syntaxe spojení Oracle (+) :V  databázi Oracle můžeme také použít  syntaxi znaménka plus pro RIGHT OUTER JOIN. V tomto případě je pravé spojení indikováno, když je znaménko plus nalevo od rovnice.

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

Úplné vnější spojení

Tento typ spojení vrátí všechny řádky z tabulky LEVÉ a PRAVÉ tabulky s nulami na místě, kde není splněna podmínka spojení

Zde je příklad pro Oracle Full Outer Join

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

Tento dotaz vrátí všechny řádky z obou tabulek. Použití syntaxe Oracle pomocí E.DEPT_ID (+) =D.DEPT_ID (+) není možné, protože znaménko (+) může odkazovat pouze na jednu tabulku. Musíme použít Union, abychom toho dosáhli pomocí znaménka +

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;

Některé RDBMS nepodporují klauzuli úplného vnějšího spojení, pak to můžeme použít níže

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;


PŘIROZENÉ PŘIPOJENÍ

Přirozené spojení určuje, že spojení souvisí se všemi sloupci se stejnými názvy ve dvou tabulkách.

V zásadě porovnává společné sloupce obou tabulek. Před provedením přirozeného spojení byste měli zkontrolovat, zda v obou tabulkách existují společné sloupce.

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

Zde dept_id je stejný sloupec mezi tabulkami emp a dept

Přirozené spojení může spojit více než dva stoly

Doufám, že se vám tento příspěvek na webu Oracle joins s příklady líbí.

Související články
Výukový program pro Oracle SQL

Poddotazy Oracle SQL

Operátoři sady Oracle

pohled Oracle

jak psát sql dotazy

Sloupec automatického zvýšení – sekvence

Cross Join v Oracle

vlastní připojení k orákulu s příklady

příklady syntaxe spojení Oracle

Hash Join v Oracle


  1. Jak přejmenovat primární klíč v Oracle tak, aby jej bylo možné znovu použít

  2. Moje cesta OOW15 je dokončena

  3. Povolit protokolování pomalých dotazů (Slow Query Log) v databázi MySQL

  4. Vlastní upgrady PostgreSQL založené na spouštěči