Czasami trzeba wyświetlić dane z wielu tabel. Aby to wykonać, musisz połączyć jedną tabelę z inną tabelą.Istnieją różne sposoby, w jakie możemy uzyskać dane z wielu tabel.Tutaj skupiłbym się na złączach Oracle z przykładami.Jest to również ważne dla wszystkich złączeń Sql . Wyjaśniłbym sprzężenie wewnętrzne, sprzężenie zewnętrzne, sprzężenie krzyżowe, sprzężenie naturalne, sprzężenie kartezjańskie z przykładami
Łączenia Oracle
Wyrocznia łączy to zapytanie, które łączy wiersze z dwóch lub więcej tabel Oracle.
Oracle wykonuje łączenie, gdy w klauzuli FROM pojawia się wiele tabel. Aby połączyć dwie tabele, musisz zidentyfikować wspólne kolumny, które łączą te dwie tabele. W klauzuli WHERE definiujesz relacje między tabelami wymienionymi w klauzuli FROM.
Niektóre wytyczne dotyczące połączeń Oracle (połączeń SQL)
1) podczas pisania instrukcji select, która łączy tabele, dobrą praktyką jest poprzedzenie nazwy kolumny nazwą tabeli w celu zachowania przejrzystości.
2) Aby połączyć m tabel, potrzebujemy co najmniej m-1 warunków
3) Możemy użyć aliasu tabeli jako nazwy tabeli, jeśli nazwa tabeli jest długa. Tabela wygląda na krótszy kod, a co za tym idzie mniej pamięci
4) Jeśli nie używasz nazwy_tabeli ani aliasu tabeli podczas wybierania kolumny i jeśli wiele tabel ma tę samą nazwę kolumny, należy określić nazwę_tabeli dla kolumny, która jest wspólna dla wszystkich tabel
Łączenie wewnętrzne
Najpopularniejszym operatorem używanym do powiązania dwóch tabel jest operator równości (=). Nazywa się to złączeniem równościowym lub equijoin . To proste połączenie znane również jako sprzężenie wewnętrzne
Przykład łączenia wewnętrznego 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 wykonać łączenie trzech lub więcej tabel, Oracle łączy dwie tabele na podstawie warunku złączenia, a następnie łączy wynik z inną tabelą na podstawie warunków złączenia i powtarza aż wszystkie tabele zostaną połączone.
Połączenia złożone
Dodaj jeden lub więcej warunków w klauzuli WHERE. Na przykład, jeśli interesują Cię wszystkie działy i ich lokalizacje poza Wielką Brytanią, użyj
SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';
Bez połączenia równorzędowego
Nie-equijoin to warunek złączenia inny niż operator równości.
Jest to instrukcja sprzężenia wewnętrznego, która wykorzystuje nierówną operację (np.:<>,>, <, =, BETWEEN itp.) w celu dopasowania wierszy z różnych tabel
SELECT e.ename, e.sal, s.grade
FROM emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;
Produkty kartezjańskie lub łączenie kartezjańskie lub łączenie krzyżowe
-Złączenie kartezjańskie (lub produkt kartezjański) (lub Złączenie krzyżowe) występuje, gdy dane są wybrane z co najmniej dwóch tabel i zdefiniowany jest warunek złączenia lub nie zdefiniowano żadnej wspólnej relacji w klauzuli WHERE
-Jeżeli wykonywane jest łączenie i nie określono warunku łączenia, powstaje iloczyn kartezjański. Iloczyn kartezjański to zestaw wyników, który jest iloczynem sumy wierszy dwóch tabel. Jeśli tabela „P” ma 100 wierszy, a tabela „Q” ma 100 wierszy i opracowany jest iloczyn kartezjański, wynikowy zestaw wyników będzie miał 10000 wierszy. Jeśli zapytanie łączy trzy lub więcej tabel, optymalizator może znaleźć sposób na wybranie kolejności łączenia, która wyklucza produkt kartezjański, ale nie licz na to.
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP cross join DEPT ;
Połączenia zewnętrzne
Sprzężenia wewnętrzne, które widzieliśmy, zwracają pasujące wiersze z dwóch lub więcej tabel zgodnie z warunkiem złączenia. Mechanizm zewnętrznego łączenia zwraca dane z jednej tabeli, nawet jeśli w łączącej tabeli nie ma odpowiedniego wiersza.
Istnieją trzy połączenia zewnętrzne
a) Łączenie lewe zewnętrzne lub Łączenie lewe
b) Prawe sprzężenie zewnętrzne lub Prawe sprzężenie
c) Pełne sprzężenie zewnętrzne lub pełne sprzężenie
Połączenie zewnętrzne lewe
zwraca pasujące wiersze z obu tabel, a także niedopasowane wiersze z tabeli po lewej stronie klauzuli join.
LEFT OUTER JOIN zwróci wszystkie rekordy z lewej tabeli i tylko te rekordy z prawej tabeli, które przecinają się z prawą tabelą
Oto przykład Oracle Left External Join
Example:
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;
Składnia łączenia Oracle (+) :W bazie danych Oracle możemy również użyć składni znaku plusa dla lewego sprzężenia zewnętrznego. W tym przypadku sprzężenie plusa znajduje się po prawej stronie równania.
Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;
Prawe połączenie zewnętrzne
zwraca wiersze pasujące z obu tabel, a także niedopasowane wiersze z tabeli po prawej stronie klauzuli join.
Oto przykład połączenia zewnętrznego Oracle Right
Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
Składnia łączenia Oracle (+) :W bazie danych Oracle możemy również użyć składni znaku plus dla RIGHT OUTER JOIN. W tym przypadku prawe złącze jest wskazywane, gdy znak plusa znajduje się po lewej stronie równania.
Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;
Pełne połączenie zewnętrzne
Ten typ złączenia zwraca wszystkie wiersze z tabeli LEWEJ i PRAWEJ z wartościami null w miejscu, w którym warunek złączenia nie jest spełniony
Oto przykład dla Oracle Full Outer Join
select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;
To zapytanie zwróci wszystkie wiersze z obu tabel. Użycie składni Oracle przy użyciu E.DEPT_ID (+) =D.DEPT_ID (+) jest niemożliwe, ponieważ znak (+) może odnosić się tylko do jednej tabeli. Musimy użyć Union, aby osiągnąć to samo za pomocą znaku +
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;
Niektóre RDBMS nie obsługują klauzuli Full external join, więc możemy to wykorzystać poniżej
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;
DOŁĄCZENIE NATURALNE
Złączenie naturalne określa, że złączenie dotyczy wszystkich kolumn o tych samych nazwach w obu tabelach.
Zasadniczo porównuje ze sobą wspólne kolumny obu tabel. Przed wykonaniem połączenia naturalnego należy sprawdzić, czy w obu tabelach istnieją wspólne kolumny.
Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME FROM EMP NATURAL JOIN DEPT;
Tutaj dept_id to ta sama kolumna między tabelami emp i dept
Połączenie naturalne może dołączyć do więcej niż dwóch stołów
Mam nadzieję, że podoba Ci się ten post w Oracle dołącza do przykładów.
Powiązane artykuły
Samouczek Oracle SQL
Podzapytania Oracle SQL
Operatory zestawów Oracle
Widok Oracle
jak pisać zapytania sql
Kolumna automatycznego przyrostu — sekwencja
Połączenie krzyżowe w Oracle
dołącz do wyroczni z przykładami
przykłady składni sprzężenia Oracle
Hash Dołącz do Oracle