[JOIN] 함수 학습하기
JOIN이란?
- 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현하는 것이다.
- 쉽게 말해 '다중 테이블 연산'으로 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다.
JOIN의 종류
1 ) INNER JOIN (내부 조인)
두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다. (교집합 : 두 테이블의 중복 값)
2 ) OUTER JOIN (외부 조인)
두 테이블을 조인할 때, 개의 테이블에만 데이터가 있어도 결과가 나온다.
3 ) CROSS JOIN (상호 조인)
한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다. (모든 경우의 수를 나타낸다.)
4 ) SELF JOIN (자체 조인)
자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.
INNER JOIN
두 테이블을 연결할 때 가장 많이 사용하는 것이 내부 조인이며, 그냥 조인이라고 부르는 경우 내부 조인을 의미한다.

>> 위의 사진은 내부 조인의 형식이다.

>> 내부 조인은 두 테이블의 교집합을 의미한다.
OUTER JOIN
내부 조인은 두 테이블에 모두 데이터가 있어야만 결과가 나오지만,
외부 조인은 한쪽에만 데이터가 있어도 결과가 나온다.

>> 위의 사진은 외부 조인의 형식이다.
- OUTER JOIN의 종류
1) LEFT OUTER JOIN
: 왼쪽 테이블의 모든 값이 출력되는 조인
2) RIGHTOUTER JOIN
: 오른쪽 테이블의 모든 값이 출력되는 조인
3) FULL OUTER JOIN
: 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인

>> 외부 조인은 기준되는 테이블의 위치를 잘 파악하여야 한다.
LEFT OUTER JOIN 기준
: 첫 번째 테이블(LEFT 테이블)이 기준 테이블이며, 두 번째 테이블(RIGHT 테이블)이 조건 테이블이다.
// 내가 출력하고자 하는 데이터 테이블을 왼쪽에 두고, 조건이 될 테이블을 오른쪽에 두어야 한다.
FULL OUTER JOIN 은 기준이 없다.
// 모든 테이블의 값이 다 출력된다.
'LEFT OUTER JOIN' 예제 1
모든 칼럼을 출력하는 'SELECT'문


'LEFT OUTER JOIN'문
user_mst 테이블과 user_dtl 테이블을 JOIN 해보자.

'user_mst 테이블'과 'user_dtl 테이블'이 조인될 조건이 ON ( 1 = 1 )으로 항상 true이기 때문에
왼쪽의 키 값에 대한 모든 경우의 수가 다 입력되었다. (CROSS JOIN)
>> 왼쪽 id가 1 일 때 user_dtl에서 값을 모두 가지고 온다. (id가 2,3,4일 때도 동일)

>> 조인될 조건이 ON ( 1 = 0 )으로 false인 경우 값을 붙이지 않고 null값으로 모두 들어온다.
조건이 참일 경우에만 데이터가 JOIN 된다.
'LEFT OUTER JOIN' 예제 2
'user_mst.id'와 'user_dtl.id'의 두 개의 키 값이 동일한 데이터만 붙이는 경우
아래의 사진과 같이 ON의 조건식에 조건문을 대입하면 된다.

결과값 : 중복이 되지 않는 값은 NULL이 출력된다.
기준의 테이블 값은 모두 출력되고 조인될 조건이 true인 경우 출력, false인 경우 null값으로 출력된다. 👇👇

'JOIN'문에서 Alias 사용하기
테이블 JOIN시 테이블 이름 설정의 간편화를 위해
스네이크 표기법을 기준으로 연결된 단어의 알파벳 두 개만 따오는 경우가 많다. 예) user_mst = um, user_dtl = ud
>> 이것을 Alias(별명)이라고 한다.
Alias표기방법 👇👇

컬럼에는 위와 같이 AS를 적어주지만 테이블에는 아래와 같이 생략하는 경우가 많다.

'LEFT OUTER JOIN' 예제 3 - 정규화된 테이블로 'JOIN' 하기
정규화된 테이블을 JOIN 하는 경우 조인될 조건의 기준은 첫 번째 테이블 인 'um'이며
조건을 붙일 때의 기준은 두 번째 테이블 인'ud'이다.
순서가 바뀌어도 출력되는 결과는 바뀌지 않지만
JOIN문의 기준을 분명히 알기 위해서는 기준되는 테이블을 우선으로 작성하는 것이 중요하다.

ON (od.order_id = om.id)로 작성하는 것은 좋지 않다.
결과값 👇👇

order_mst를 기준으로 user_mst를 JOIN 할 때
um의 'id'와 om의 'user_id'와 값이 같다면 user_mst값을 JOIN 하여라



'LEFT OUTER JOIN' 예제 3 - 정규화된 테이블로 'JOIN' 하기 2
기준이 '사용자'가 되는 경우 user를 첫 번째(기준) 테이블로 설정해야 하며
그 사용자들이 주문한 정보를 나타내고 싶다면 order_mst을 JOIN 하면 된다.

>> 사용자가 기준인 경우 id와 user_id에 NULL값이 입력된다. 👇👇

inner join을 사용하는 경우 👇👇

아래의 JOIN문 실행 시 id값에 1이 두 번 나오는 이유는 product 때문에 order의 1에 대한 정보가 2개 이기 때문이다.

order_id가 같은 값이 2개 이기 때문이다.

지금까지 데이터베이스의 함수인 [JOIN]에 대해 알아보았습니다.
다음 포스팅에서는 [JOIN] 함수 실습 문제를 풀이해보도록 하겠습니다.
❤긴 글 읽어주셔서 감사드립니다❤
사진 출처 링크 :
'웹개발 > 웹 개발[데이터베이스-MySQL]' 카테고리의 다른 글
| 데이터베이스 [Group By] 함수 (0) | 2022.12.19 |
|---|---|
| 데이터베이스 [JOIN] 함수 2 (0) | 2022.12.19 |
| 데이터베이스 [DB] 정규화(Normalization) .2 (0) | 2022.12.19 |
| 데이터베이스 [DB] 정규화(Normalization) .1 (0) | 2022.12.19 |
| 데이터베이스 [SQL] 트리거(Trigger) (0) | 2022.12.18 |