JOIN문 : 여러 테이블을 합칠 수 있게 하는 SQL문
<목차>
1. 테이블을 왜 쪼개는가?
2. JOIN의 종류
3. 문법
1. 테이블을 왜 쪼개는가?
JOIN문은 여러 테이블을 합칠 수 있게 해주는데, 애초에 테이블을 왜 나누는걸까?
여러분이 데이터베이스 관리자라고 해보자.
여러분은 회사 내 업무 별 담당 직원과 그 직원의 정보를 저장하고 있는 데이터 베이스를 관리하고 있는 상황이다.
여기서 김헌창 팀장은 업무 a와 e를 맡고 있고, 이에 따라 해당 테이블에는 중복 데이터가 발생했다.
데이터베이스에서 발생하는 중복 데이터는 나중에 데이터를 관리할 때 매우 좋지 않은 영향을 끼친다.
예를 들어 업무 e를 김헌창 팀장이 아닌 김주역 신입이 맡는걸로 변경 되었다고 하면 직급~비고까지 컬럼의 데이터를 하나하나 모두 바꿀 것인가?
그리고 어떤 부서명의 부서 코드가 바뀌었다고 하면 부서코드를 하나하나 바꿀 것인가?
아니면 아래와 같이 표를 알맞게 쪼개어서
첫 번째 표의 업무 e 담당자 명을 김주역 이라고만 바꾸고, 부서명의 코드가 바뀌었을 경우 세 번째 표의 부서코드만 수정해줄 것인가?
데이터베이스에 데이터를 작성할 때는 토픽마다 테이블을 나눠주는 것이 좋다. 테이블을 적절히 분리하는 것을 정규화라고 한다.
토픽을 나누는 기준을 스스로 잘 파악하고 중복 데이터를 최대한 줄일 수록 좋은 데이터베이스 관리자가 될 것이다.
2. JOIN의 종류
join의 대표적인 종류 5가지이다.
Table1과 Table2 이 있다고 가정하자.
1) Inner join : 일반적인 join문, Inner 생략가능. 조건에 맞는 컬럼만 조회
2) Outer join : 조건에 맞지 않는 부분도 NULL을 생성해서라도 모든 컬럼을 조회
3) Left join : 조건에 맞지 않는 부분도 NULL을 생성해서라도 왼쪽 테이블에 있는 모든 컬럼만 조회
4) Union : 두 테이블을 컬럼째로 이어붙혀 조회
5) Cross join : join할 수 있는 모든 경우에 대해 조회 (컬럼 수 = Table1의 컬럼 수 * Table2의 컬럼 수)
추가로, join의 경우별 SQL코드를 확인할 수 있는 사이트를 남겼다.
사이트에 들어간 뒤 벤다이어그램에서 원하는 영역을 클릭하면 해당 SQL문이 자동으로 오른쪽에 출력된다.
(A,B 영역은 각각 LEFT TABLE, RIGHT TABLE)
3. 문법
~FROM 테이블1 JOIN 테이블2 ON 테이블1.필드명=테이블2.필드명
물론 ON문에서 AND를 이용하여 다중조건을 이용해도 된다.
그리고 다른 테이블을 또 JOIN하고 싶다면
~FROM 테이블1 JOIN 테이블2 ON 테이블1.필드명=테이블2.필드명 JOIN ~
이렇게 JOIN을 이어 붙여 나가면 된다.
"~FROM 테이블1 JOIN 테이블2 ON 테이블1.필드명=테이블2.필드명" 도 하나의 테이블로 본 것이다.
※ NULL =(==) NULL -> FALSE
댓글