Понякога трябва да покажете данни от множество таблици. За да направите това, трябва да свържете една таблица с друга таблица. Има различни начини, по които можем да получим данни от множество таблици. Тук бих се съсредоточил върху Oracle Joins с примери. Това е валидно и за всички Sql Joins по принцип . Ще обясня вътрешно присъединяване, външно присъединяване, кръстосано присъединяване, естествено присъединяване, декартово присъединяване с примери
Oracle се присъединява
Оракул се присъединява е заявка, която комбинира редове от две или повече таблици на оракул.
Oracle извършва обединяване, когато в клаузата FROM се появят няколко таблици. За да свържете две таблици, трябва да идентифицирате общите колони, които свързват двете таблици. В клаузата WHERE дефинирате връзката между таблиците, изброени в клаузата FROM.
Някои насоки за Oracle Joins (Sql Joins)
1) когато пишете оператора select, който обединява таблици, е добра практика името на колоната да се предхожда с име на таблица с цел яснота.
2) За да обединим m таблици, ни трябват поне m-1 условия
3) Можем да използваме псевдоним на таблицата за името на таблиците, ако името на таблицата е дълго. Таблицата изглежда, че кодът е по-кратък и следователно по-малко памет
4) Ако не използвате table_name или псевдоним на таблици, докато избирате колоната и ако няколко таблици имат едно и също име на колона, тогава трябва да посочим table_name за колоната, която е обща за таблиците
Вътрешно присъединяване
Най-често използваният оператор за свързване на две таблици е операторът за равенство (=). Това се нарича equality join или equijoin . Това просто свързване, известно още като вътрешно съединение
Пример за вътрешно присъединяване на 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;
За да изпълни обединяване на три или повече таблици, Oracle обединява две таблици въз основа на условието за присъединяване, след което обединява резултата с друга таблица въз основа на условията за присъединяване и повтаря, докато всички таблици се обединят.
Сложни съединения
Добавете едно или повече условия в клаузата WHERE. Например, ако се интересувате от всички отдели и техните местоположения извън Обединеното кралство, използвайте
SELECT LOCATIONS.LOCATION_ID, CITY, DEPARTMENT_NAME
FROM LOCATIONS, DEPARTMENTS
WHERE LOCATIONS.LOCATION_ID = DEPARTMENTS.LOCATION_ID
AND COUNTRY_ID != 'UK';
Неравносъединени
Неравносъединение е условието за присъединяване, различно от оператора за равенство.
Това е оператор за вътрешно присъединяване, който използва неравностойна операция (т.е.:<>,>, <, =, BETWEEN и т.н.) за съпоставяне на редове от различни таблици
SELECT e.ename, e.sal, s.grade
FROM emp e, sal_grade s
WHERE e.sal BETWEEN s.low_sal AND s.high_sal;
Картезиански продукти или декартово присъединяване или кръстосано присъединяване
- Декартово обединение (или декартов продукт) (или кръстосано свързване) възниква, когато данните са избрани от две или повече таблици и е дефинирано условието за присъединяване или не е дефинирана обща връзка в клаузата WHERE
-Ако се извърши обединяване и не е посочено условие за присъединяване, се получава декартов продукт. Декартов продукт е набор от резултати, който е продукт на общите редове на двете таблици. Ако таблица „P“ има 100 реда и таблица „Q“ има 100 реда и е разработен декартов продукт, резултантният набор от резултати ще има 10 000 реда. Ако заявка се присъедини към три или повече таблици, оптимизаторът може да намери начин да избере ред на присъединяване, който изключва декартов продукт, но не разчита на това.
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP , DEPT ;
or
SELECT EMPNO,ENAME, DEPT.DEPTNO,DNAME FROM EMP cross join DEPT ;
Външни свързвания
Вътрешните съединения, които видяхме, връщат съвпадащите редове от две или повече таблици според условието за свързване. Механизмът Outer Join връща данните от една таблица, дори ако няма съответен ред в таблицата за свързване.
Има три външни съединения
a) Ляво външно присъединяване или Ляво присъединяване
б) Дясно външно присъединяване или Дясно присъединяване
в) Пълно външно съединение или пълно присъединяване
Ляво външно присъединяване
връща редовете, съвпадащи от двете таблици, както и несъответстващите редове от таблицата отляво на клаузата за свързване.
LEFT OUTER JOIN ще върне всички записи от лявата таблица и само онези записи от дясната таблица, които се пресичат с дясната таблица
Ето примера за Oracle Left outer Join
Example:
select empno,ename,emp.deptno,dname
from emp
LEFT OUTER JOIN dept
on emp.deptno=dept.deptno;
Синтаксис на присъединяване към oracle (+) :В Oracle база данни можем също да използваме синтаксиса на знака плюс за ляво външно присъединяване. В този случай плюс присъединяването е от дясната страна на уравнението.
Example:
select empno,ename,emp.deptno,dname
from emp ,dept where emp.deptno=dept.deptno(+) ;
Дясно външно съединение
връща редовете, съвпадащи от двете таблици, както и несъответстващите редове от таблицата отдясно на клаузата за свързване.
Ето примера за Oracle Right външно присъединяване
Example:
select empno,ename,dept.deptno,dname
from emp
right OUTER JOIN dept
on emp.deptno=dept.deptno;
Синтаксис на присъединяване към oracle (+) :В Oracle база данни можем също да използваме синтаксиса на знака плюс за ДЯСНО ВЪНШНО ПРИСЪЕДИНЕНИЕ. В този случай дясното присъединяване е показано, когато знакът плюс е отляво на уравнението.
Example:
select empno,ename,dept.deptno,dname
from emp ,dept where emp.deptno(+)=dept.deptno ;
Пълно външно присъединяване
Този тип обединяване връща всички редове от таблицата от ЛЯВА и ДЯСНА страна с нули на място, където условието за присъединяване не е изпълнено
Ето примера за Oracle Full Outer Join
select empno,ename,dept.deptno,dname
from emp
full OUTER JOIN dept
on emp.deptno=dept.deptno;
Тази заявка ще върне всички редове от двете таблици. Използването на синтаксис на Oracle с E.DEPT_ID (+) =D.DEPT_ID (+) е невъзможно, тъй като знакът (+) може да препраща само към една таблица. Трябва да използваме Union, за да постигнем същото, като използваме знак +
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;
Някои RDBMS не поддържат клаузата за пълно външно присъединяване, тогава можем да използваме по-долу, за да покрием това
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;
Естествено присъединяване
Естественото свързване указва, че свързването свързва всички колони с еднакви имена в двете таблици.
По принцип сравнява общите колони на двете таблици помежду си. Трябва да се провери дали има общи колони и в двете таблици, преди да се направи естествено свързване.
Example
SELECT EMP_ID,EMP_NAME, DEPT_ID,DEPARTMENT_NAME FROM EMP NATURAL JOIN DEPT;
Тук dept_id е същата колона между таблиците emp и dept
Естественото присъединяване може да обедини повече от две маси
Надяваме се, че тази публикация в Oracle се присъединява към примери.
Сродни статии
Урок за Oracle sql
Oracle Sql подзаявки
Оператори на набор от Oracle
Изглед на Oracle
как да пиша sql заявки
Колона за автоматично увеличение – последователност
Кръстосано присъединяване в Oracle
самостоятелно присъединяване към oracle с примери
Примери за синтаксис за присъединяване на Oracle
Hash Join в Oracle