두 개의 팀이 서로 다른 작업을 수행하고 있다.
이들은 서로 다른 작업을 수행하기 위해 독립적으로 작업하고 있지만
때로는 서로의 작업에 필요한 정보를 공유하거나, 그들의 일부 구성원이 함께 작업할 필요가 있는 경우도 있다.
조인은 이들 팀의 구성원이 필요한 정보를 서로 공유하는 것과 유사하다.
예를 들어, 한 팀은 책의 목록을 가지고 있고 다른 팀은 각 저자의 정보를 가지고 있다고 가정해보자.
이 두 팀은 각각 독립적으로 일하고 있지만,
책의 목록과 각 저자의 정보가 필요한 경우가 있다.
이때 조인은 책의 목록과 각 저자의 정보를 결합하여 필요한 정보를 얻을 수 있게 해 준다.
WHY?
데이터베이스의 정규화된 데이터 모델은 데이터를 분할하여 중복을 피한다. (정규화)
조인은
데이터베이스에서 설정된 여러 테이블 간 데이터를 효율적으로 결합하는 데 사용된다.
Inner Join:
- Inner Join은 두 테이블 간의 교집합이다.
- 두 테이블에서 조건에 맞는 행들만 결합된다.
- 만약 한 테이블에 해당하는 값이 다른 테이블에 없다면, 그 행은 결과에 포함되지 않는다.
- Explicit Inner Join과 Implicit Inner Join이 있으며, 결과는 같지만 문법에 약간의 차이가 있다.
Explicit Inner Join : 명확하게 조인되는 테이블과 조인 조건을 지정해, 코드의 가독성이 높다.
(명시적 내부 조인) SELECT *
FROM table1 INNER JOIN table2
ON table1.ID = table2.ID;
Implicit Inner Join : 조인 조건이 WHERE 절에 포함되어 있어
(암시적 내부 조인) 명시적으로 표현되는 것이 아니라 암시적으로 결합된다.
테이블 간 조인이 불명확할 수 있고,
복잡한 쿼리에서는 가독성이 감소할 수 있다.
SELECT *
FROM table1, table2
WHERE table1.ID = table2.ID;
Outer Join:
- Outer Join은 하나 이상의 테이블이 값을 가지고 있을 때, 모든 레코드를 가져오는 데 사용된다.
- Left, Right, Full로 나뉜다.
- 각각 기준 테이블의 모든 값을 출력하고 다른 테이블과 매칭되는 값을 가져온다. 매칭되는 값이 없는 경우 NULL로 채워진다.
- Full Outer Join은 모든 값과 매칭되는 값을 가져오며, DBMS에 따라 지원 여부가 다를 수 있다.
Left Outer Join : 왼쪽 테이블의 모든 레코드를 포함하고,
오른쪽 테이블과 일치하는 레코드가 있으면 함께 결합한다.
오른쪽 테이블의 해당하는 값이 없으면 NULL로 채워진다.
SELECT *
FROM table1 LEFT OUTER JOIN table2
ON table1.ID = table2.ID;
Right Outer Join : 오른쪽 테이블의 모든 레코드를 포함하고,
왼쪽 테이블과 일치하는 레코드가 있으면 함께 표시한다.
왼쪽 테이블의 해당하는 값이 없으면 NULL로 채워진다.
SELECT *
FROM table1 RIGHT OUTER JOIN table2
ON table1.ID = table2.ID;
Full Outer Join : 양쪽 테이블의 모든 레코드를 포함하고,
일치하는 레코드가 없을 경우 NULL로 채워진다.
양쪽 테이블 모두에서 일치하는 레코드가 없으면 모든 열이 NULL로 채워진다.
SELECT *
FROM table1 FULL OUTER JOIN table2
ON table1.ID = table2.ID;
(OR)
SELECT *
FROM table1 LEFT OUTER JOIN table2
ON table1.ID = table2.ID;
UNION
SELECT *
FROM table1 RIGHT OUTER JOIN table2
ON table1.ID = table2.ID;
oracle은 full outer join을 지원하지만
mysql 같은 다른 데이터베이스는 full outer join을 지원하지 않기 때문에
UNION을 사용한다.
CROSS JOIN : 두 테이블 간에 모든 가능한 조합을 만들어 낸다.
일반적으로 조인 조건 없이 사용된다.
(cartesian product, 교차곱)
SELECT *
FROM table1 CROSS JOIN table2;
SELF JOIN : 하나의 테이블에서 자기 자신과 조인하는 것을 말한다.
주로 부하 관계나 계층적 테이블을 다룰 때 사용된다.
SELECT *
FROM table1.t1 INNER JOIN table1.t2
ON t1.ID = t2.ID;
'CS' 카테고리의 다른 글
S)Spring_09_스프링 컨테이너 (2) | 2024.04.10 |
---|---|
S)Spring_09_스프링DI (0) | 2024.04.09 |
S)DB_08_DBCP (0) | 2024.04.02 |
S)DB_07_B tree, B+tree (1) | 2024.03.30 |
S)DB_07_인덱스 (1) | 2024.03.30 |