SQL JOIN - INNER JOIN / OUTER JOIN / LEFT JOIN / RIGHT JOIN / SELF JOIN

JOIN에 관해 포스팅하려 합니다 개인적으로는 조금 어려웠습니다..

아래의 그림이 잘 정리가 되어있는데 한번 설명해보겠습니다

 

LEFT / RIGHT JOIN

LEFT JOIN 기준으로 설명하겠습니다. RIGHT JOIN은 기준 테이블이 반대가 되면 된다

A , B 테이블 중에서 A값의 전체와 A의 KEY와 B의 KEY 가 같은 결과를 리턴

 

아래의 테이블을 A테이블이라고 하겠다

ID NAME AGE POINT
1 철수 15 500
2 영희 13 NULL
3 훈이 14 200
4 정우 14 NULL

아래는 B테이블 이다

ID SCHOOL GRADE
1 고구려중학교 1
3 백제중학교 3
3 신라중학교 2
4 발해중학교 1
5 고려중학교 2

사용법은 아래와 같습니다.

-- JOIN 사용법
SELECT ~~~
  FROM TABLE_A
        LEFT JOIN TABLE_B ON TABLE_A.KEY = TABLE_B.KEY
        
--> 예제
SELECT *
  FROM A
        LEFT JOIN B ON A.ID = B.ID

위 예제는 어떤 결과가 나올까요? 설명을 다시 한번 보면

A , B 테이블 중에서 A값의 전체와 A의 KEY와 B의 KEY 가 같은 결과를 리턴

 

A의 결과가 다 출력이 되고 이중 ID값이 B의 ID값과 같다면 연결되어 출력된다

ID값이 같은 게 없다면 연결되는 값이 없을 것이다

 

ID NAME AGE POINT ID SCHOOL GRADE
1 철수 15 500 1 고구려중학교 1
3 훈이 14 200 3 백제중학교 3
3 훈이 14 200 3 신라중학교 2
4 정우 14   4 발해중학교 1
2 영희 13        

A의 ID 값은 1, 2, 3, 4

B의 ID 값은 1, 3, 4       ID가 같은 1, 3, 4 ROW에 연결되어 출력되었다

또 B의 ID에 3의 값이 2개여서 2개가 연결되어 출력되었다

 

B테이블에 고려중학교는 ID값이 5로 연결되는 5의 값이 A테이블에 없어 출력되지 않았다

영희는 ID값 2로써 B에는 2의 해당하는 값이 없지만 LEFT JOIN으로 A의 값은 다 출력되었다

 

설명을 차분히 읽어본다면 충분히 이해가 되었으리라 생각이 된다


LEFT / RIGHT JOIN (IS NULL)

JOIN 하는 두 테이블 중 한 테이블에만 있는 값을 출력하는 내용입니다.

사용법은 아래와 같습니다.

--> 사용법
SELECT ~~~~
  FROM TABLE_A
        LEFT JOIN TABLE_B ON TABLE_A.KEY = TABLE_B.KEY
 WHERE B.KEY IS NULL --> 기본 LEFT JOIN에서 WHERE절이 추가되었다
 
--> 예제
SELECT *
  FROM A
        LEFT JOIN B ON A.ID = B.ID
 WHERE B.ID IS NULL

결과:

ID NAME AGE POINT ID SCHOOL GRADE
2 영희 13        

A의 값들 중에서 B와 연결되지 않는 ROW인 ID가 2인 ROW만 출력이 되었다

LEFT JOIN이 아니라 RIGHT JOIN / WHERE A.ID IS NULL이라고 했다면

A와 연결되지 않는 B값인 ID가 5인 ROW만 출력이 될 것이다


INNER JOIN

INNER JOIN은 테이블 간에 서로 연결되는 값만 출력하는 내용이다 사용법을 보자

--> 사용법
SELECT ~~~~
  FROM TABLE_A
        INNER JOIN TABLE_B ON TABLE_A.KEY = TABLE_B.KEY
        
--> 예제
SELECT *
  FROM A
        INNER JOIN B ON A.ID = B.ID
ID NAME AGE POINT ID SCHOOL GRADE
1 철수 15 500 1 고구려중학교 1
3 훈이 14 200 3 백제중학교 3
3 훈이 14 200 3 신라중학교 2
4 정우 14   4 발해중학교 1

A와 B테이블 중 두 테이블 모두에 있는 ID값 1, 3, 4를 ID의 값으로 가진 ROW들만 출력이 된다


FULL OUTER JOIN

FULL OUTER JOIN 은 두 테이블 모두의 값을 출력하는 내용이다

--> 사용법
SELECT ~~~
  FROM TABLE_A
        FULL OUTER JOIN TABLE_B ON TABLE_A.KEY = TABLE_B.KEY
        
--> 예제
SELECT *
  FROM A
        FULL OUTER JOIN B ON A.ID = B.ID

KEY같이 같은 애들은 연결되어 출력되고 연결 안 되는 다른 모든 값들도 출력된다

ID NAME AGE POINT ID SCHOOL GRADE
1 철수 15 500 1 고구려중학교 1
3 훈이 14 200 3 백제중학교 3
3 훈이 14 200 3 신라중학교 2
4 정우 14   4 발해중학교 1
2 영희 13        
        5 고려중학교 2

같은 ID 값이 있는 경우 연결되어 출력되고

연결되는 ID값이 없는 ROW들도 두 테이블 모두 다 출력이 된다

 

++참고로 MYSQL에서는 FULL OUTER JOIN이 없다

++다만 LEFT JOIN과 RIGHT조인을 UNION으로 묶어 사용할 수 있다

SELECT * FROM A LEFT JOIN B UNION SELECT * FROM A RIGHT JOIN B


SELF JOIN

SELF JOIN은 원하는 데이터들이 하나의 테이블에 있을 때 사용한다

ID NAME MANAGER_ID
13 철수 15
14 영희 15
15 정우  
16 훈이 15

위의 테이블에서 친구들의 매니저의 이름을 출력하고 싶은데 그 이름은 같은 테이블에 있는 이런 경우다

 

해당 경우는 아래처럼 쿼리를 작성한다

SELECT A.ID AS 'ID'
     , A.NAME AS 'NAME'
     , B.NAME AS 'MANAGER_NAME'
  FROM A AS A
        JOIN A AS B ON A.MANAGER_ID = B.ID

아래의 결과가 출력된다

ID NAME MANAGER_NAME
13 철수 정우
14 영희 정우
16 훈이 정우

 

이상으로 포스팅을 마치겠습니다

도움이 되었다면 공감 버튼 한번 눌러주세요~