1. 조인이란?

두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 연산입니다. 퍼즐 조각을 맞추듯이, 공통된 열을 기준으로 테이블을 합쳐서 원하는 정보를 얻을 수 있게 해줍니다.

관계형 데이터베이스인 MySQL에선 JOIN이란 쿼리로, 비관계형 데이터베이스인 MongoDB에선 lookup이라는 쿼리로 이를 처리할 수 있습니다.

 

2. 조인의 종류

join은 크게 inner join, outer join으로 나뉩니다. outer join에는 left (outer) join, right (outer) join, full (outer) join이 있습니다.

2-1. INNER JOIN

양쪽 테이블에서 모두 일치하는 값이 있는 행만 반환합니다.

 

<STUDENT>

ID NAME DEPT
1 홍길동 컴퓨터공학과
2 이순신 산업경영공학과
3 임꺽정 수학교육과

 

<ENROLLMENT>

STUDENT_ID COURSE_CODE GRADE
2 101 A+
3 102 B-
4 103 A0

 

SELECT STUDENT.NAME, ENROLLMENT.COURSE_CODE, ENROLLMENT.GRADE
FROM STUDENT
	INNER JOIN ENROLLMENT
    ON STUDENT.ID = ENROLLMENT.STUDENT_ID
STUDENT.NAME ENROLLMENT.COURSE_CODE ENROLLMENT.GRADE
이순신 101 A+
임꺽정 102 B-

 

2-2. LEFT (OUTER) JOIN

왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다.

SELECT S.NAME, E.COURSE_CODE, E.GRADE
FROM STUDENT AS S
	LEFT JOIN ENROLLMENT AS E
    ON S.ID=E.STUDENT.ID
S.NAME E.COURSE_CODE E.GRADE
홍길동 NULL NULL
이순신 101 A+
임꺽정 102 B-

 

모든 학생 정보와 수강 신청을 했다면 과목코드, 점수를 보여줍니다. 수강신청을 하지 않은 학생의 경우 과목 코드와 점수는 NULL값으로 표시됩니다.

 

2-3. RIGHT (OUTER) JOIN

오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다.

SELECT S.NAME, E.COURSE_CODE, E.GRADE
FROM STUDENT AS S
	RIGHT JOIN ENROLLMENT AS E
    ON S.ID=E.STUDENT.ID
S.NAME E.COURSE_CODE E.GRADE
이순신 101 A+
임꺽정 102 B-
NULL 103 A0

 

학생 정보가 없는 수강 신청의 경우 이름은 NULL 값으로 표시됩니다. 

 

2-3.  FULL (OUTER) JOIN

양쪽 테이블의 모든 행을 반환하고 일치하는 값이 없으면 NULL값으로 채웁니다.

SELECT S.NAME, E.COURSE_CODE, E.GRADE
FROM STUDENT AS S
	FULL JOIN ENROLLMENT AS E
    ON S.ID=E.STUDENT.ID
S.NAME E.COURSE_CODE E.GRADE
홍길동 NULL NULL
이순신 101 A+
임꺽정 102 B-
NULL 103 A0

 

728x90

+ Recent posts