본문 바로가기

Learning/SQL

5. Join

 

© Alexas_Fotos, 출처 Pixabay

Join의 종류

· 개념 : 둘 이상의 테이블을 합쳐서 하나의 큰 테이블로 만드는 방법.

 

(정규화된 테이블로부터 결합된 형태의 정보를 추출할 필요가 있음.)

 

Cartesian Product

결합 조건이 옳바르지 않거나 없을 경우 모든 조합을 출력!!

 

실습1.

SELECT ename, dname FROM emp, dept;

 

☞ 일반적으로 사용자가 원하는 결과가 아니다!

Simple Join(Equi-Join)

· 컬럼 이름의 모호성을 피하기위해 table이름에 ALIAS 사용

· 일반적으로 PK와 FK간의 = 조건이 붙는 경우가 많음

 

Syntax

SELECT column1 col1, column2 col2 .......
FROM table1 t1, table2 t2
WHERE t1.col3 = t2.col3

 

실습2.

SELECT * FROM emp, dept 
WHERE emp.deptno = dept.deptno;

<deptno을 기준으로 inner join>

 

Theta Join(Non-Equi Join)

임의의 조건을 Join조건으로 사용!

 

실습 3.

SELECT e.ename, e.sal, s.grade FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal;

(생략)

Outer Join

Join 조건을 만족하지 않는(짝이 없는) 튜플의 경우 NULL 값을 포함해서 결과 출력 => 모든 행이 결과 테이블로!!

 

종류

· Left Outer Join

· Right Outer Join

· Full Outer Join

=> NULL이 올 수 있는 쪽 조건에 (+)를 붙여 표현!

 

실습4.

SELECT * FROM emp, dept 
WHERE emp.deptno(+) = dept.deptno;

 

Self Join

· 테이블 하나로 자기 자신과 Join(table이 두 개라고 생각하면 쉬움)

· ALIAS를 사용해야함.

 

실습 5.

 

SELECT * FROM emp e1, emp e2 
WHERE e1.empno = e2.mgr;

FROM 절에서 바로 Join을 명시적으로 정의하기

실습 6.

SELECT * FROM emp NATURAL JOIN DEPT;

 

실습 7.

SELECT * FROM emp JOIN dept 
USING (deptno);

 

실습 8.

SELECT * FROM emp JOIN dept 
ON emp.deptno = dept.deptno;

 

실습 9.

SELECT * FROM emp RIGHT OUTER JOIN dept 
ON (emp.deptno = dept.deptno);

 

Hierarchical Query

· 트리 형태 구조를 추출하기 위한 쿼리

· START WITH (ROOT 조건), CONNECT BY PRIOR (연결 조건)

SELECT level, ename FROM emp 
START WITH mgr IS NULL 
CONNECT BY PRIOR empno = mgr 
ORDER BY level;

 

이상입니다~~

 

'Learning > SQL' 카테고리의 다른 글

7. SUBQUERY  (0) 2021.07.11
6. GROUP & AGGREGATION  (0) 2021.07.11
4. Single-Row-Funtion  (0) 2021.07.11
3. 기본 SELECT  (0) 2021.07.11
2. Database 용어정리  (0) 2021.07.11