미루고 미루었던 JOIN에 관한 포스팅,,,
JOIN기능은 2개 이상의 테이블을 하나의 테이블로 합치는 역할을 합니다.
그렇다면 두 테이블을 합치기 위한 기준이 있어야 한다.
그 기준은 두 테이블이 동시에 고유한 값을 가진 컬럼이 있어야한다.
난 항상 예시를 드는 것이 이해하기 가장 편한 방법이였기 때문에 예시를 들어보자.
우선 INNER JOIN에 관한 것부터!!
다음과 같이 테이블 A와 B가 있다고 가정해보자.
테이블 명: A
고객ID | 광고 수신여부 |
1 | O |
3 | X |
5 | O |
6 | O |
테이블 명: B
고객ID | 주소 | 연락처 |
1 | 서울시 서대문구 | 010-1111-1111 |
2 | 서울시 마포구 | 010-2222-2222 |
3 | 서울시 영등포구 | 010-3333-3333 |
4 | 서울시 강남구 | 010-4444-4444 |
INNER JOIN을 통해 쿼리를 작성해본다면 다음과 같이 작성해볼 수 있다.
SELECT *
FROM A
INNER JOIN B
ON A.고객ID= B.고객ID;
위의 코드를 작성한다면 다음과 같은 결과를 얻을 수 있다.
고객ID | 광고 수신여부 | 연락처 |
1 | O | 010-1111-1111 |
3 | X | 010-3333-3333 |
INNER JOIN은 A와 B의 테이블을 합치되!, ON의 조건인 일치하는 고객ID를 바탕으로
SELECT에 있는 컬럼만을 가져온다.
----------------------------------------------------------------------------------------------------
(2020.01.29 설명추가 ++++
INNER JOIN은 두 테이블 모두 존재하는 값만을 가져온다.
만!약!에!
테이블B 고객ID 3번 010-3333-3333 이라는 값이 NULL 이라면
위의 코드를 입력했을 때
고객ID | 광고수신여부 | 연락처 |
1 | O | 010-1111-1111 |
만을 가져온다.
왜냐하면
INNER JOIN이 되는 테이블B의 고객ID3번인 행에 NULL이 있기 때문이다.)
----------------------------------------------------------------------------------------------------
처음 작성한 쿼리문은 다음과 같이 바꾸어 쓸 수도 있다.
USING이라는 쿼리문을 이용한 것이다.
두 테이블을 이어주는 컬럼명이 완벽하게 동일한다면, USING 을 이용해 쿼리문을 바꾸어 작성할 수 있다.
SELECT *
FROM A
INNER JOIN B
USING (고객ID);
고객ID | 광고 수신여부 | 연락처 |
1 | O | 010-1111-1111 |
3 | X | 010-3333-3333 |
USING을 써도 똑같은 결과가 나타난다.
위의 쿼리문은
LEFT JOIN은 다음과 같다.
이것도 예제부터!
SELECT *
FROM A
LEFT JOIN B
ON A.고객ID= B.고객ID;
고객ID | 광고 수신여부 | 연락처 |
1 | O | 010-1111-1111 |
3 | X | 010-3333-3333 |
5 | O | |
6 | O |
LEFT JOIN은
두 테이블의 결합고리가 되는 고객ID는 A의 것을 바탕으로 가져온다.
테이블B는 고객ID 5,6이 없다. 그렇기 때문에 뽑아낸 테이블에서 고객ID 5,6은 공란인 상태로 가져오게 된 것이다.
반대로 RIGHT JOIN을 하면
두 테이블의 결합고리가 되는 컬럼인 고객ID는 B의 것을 바탕으로 가져온다.
SELECT *
FROM B
RIGHT JOIN A
ON A.고객ID= B.고객ID;
고객ID | 광고 수신여부 | 연락처 |
1 | O | 010-1111-1111 |
2 | 010-2222-2222 | |
3 | X | 010-3333-3333 |
4 | 010-4444-4444 |
그냥 기준점이 되는 것을 어떤 테이블의 것으로, 어떤 컬럼으로 할지에 따라
결정을 하고 입맛에 맞는 JOIN기능을 골라쓰면 된다.
사실 조인이 이거말고도 스스로 자기한테 조인 걸기도 하고, 여러가지가 있더라.
일단 여기까지만 알아보자..
'SQL ' 카테고리의 다른 글
SUBSTRING(), REPLACE(), POSITION() and COALESE() (0) | 2021.04.23 |
---|---|
SQL 너 도대체 어떻게 공부 하는데...(경험을 중심으로) (0) | 2020.03.26 |
SQL JOIN(FULL JOIN, CROSS JOIN, +SELF JOIN) 알아보기 (0) | 2020.02.18 |
MySQL 배우기 2탄 (0) | 2019.08.13 |
MySQL 배워보기(간단주의) (0) | 2019.07.30 |