안녕하세요!!
이번 포스팅에서는 SQL 에서 LEFT JOIN 구문에 대해서 설명드리겠습니다.
INNER JOIN 구문이 교집합 구문이었다면 LEFT JOIN은 LEFT 를 포함한 교집합 구문이라 생각하시면 되겠습니다.
이미지출처 : w3schools
위 그림에서 보면 table1 과 table2에 대해서 left join 을 한 모습인데 자세히 살펴보면 table1의 내용은 그대로 있고 table2와 겹치는 부분의 내용을 추출하는것을 볼 수 있습니다. 그리고 table1의 내용과 일치되지 않는 구문은 null 값을 반환하게 됩니다.
left join 의 기본구문
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
// inner join 의 형태와 사용법은 같습니다. 단지 틀려진건 inner -> left 로 바뀐것 입니다.
실제로 예제 테이블을 이용하여 값을 가져와 보겠습니다.
| 
 p_num  | 
 name  | 
 age  | 
 mobile  | 
| 
 1  | 
 송기종  | 
 42  | 
 010-1111-1111  | 
| 
 2  | 
 신석호  | 
 41  | 
 010-2222-2222  | 
| 
 3  | 
 이현주  | 
 35  | 
 010-3333-3333  | 
// 테이블 이름을 임시로 INFO 라고 정의하겠습니다.
| 
 order_id  | 
 p_num  | 
 employ_date  | 
 caree_year  | 
| 
 1001  | 
 2  | 
 2003-02-02  | 
 5  | 
| 
 1002  | 
 3  | 
 2004-02-17  | 
 6  | 
// 위 테이블 이름은 임시로 ORDER 라고 정의하겠습니다.
위 두개의 테이블을 LEFT JOIN 하면
select * from info
left join order
on info.p_num = order.p_num;
또는
select * from info A
left join order B
on A.p_num = B.p_num;
위 두 구문은 같은 형식이며, 아래 구문은 as 의 구문이 생략된 형태입니다. info의 테이블 이름을 A라는 별칭으로 사용했고 order 의 테이블 이름을 B라는 별칭으로 사용했습니다.
그리고 중복되는 같은 두 개 이지만 총 레코드는 info의 레코드 개수 만큼 3개가 나오게 됩니다. 그리고 겹치지 않는 order 테이블의 레코드값은 NULL을 가져오게 됩니다.
  p_num  name  age  mobile  order_id  p_num   employ_date  caree_year  1  송기종  42  010-1111-1111  NULL  NULL  NULL  NULL  2  신석호  41  010-2222-2222  1001  2  2003-02-02  5  3  이현주  35  010-3333-3333  1002  3  2004-02-17  6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
// 위 처럼 값이 출력됩니다.
지금까지 LEFT JOIN에 대해서 설명드렸습니다. 사실 예전에 ERP 관련 프로그램을 만들때는 join 구문을 참 많이 사용했었던 기억이 납니다. 그런데 PHP로 넘어오면서 홈페이지 작업을 위주로 일을 하다보니 조인 구문을 그렇게 많이 사용하진 않았습니다. 하지만 살다보면 꼭 이거다라는 정의를 내릴 수 없듯이 JOIN 구문을 알아두시면 언젠가 필요한 날이 오지 않을까 합니다 ㅎㅎ;;
그럼 다음 포스팅에서 RIGHT JOIN 구문으로 찾아뵙겠습니다. 남은 오늘 하루일정 잘 마무리 하시고 즐거운 시간 보내길 바라며 즐거운 프로그래밍 되길 바랍니다. ~
'SQL' 카테고리의 다른 글
| SQL UNION 구문 (0) | 2013.09.04 | 
|---|---|
| SQL RIGHT JOIN 구문 (1) | 2013.09.03 | 
| SQL INNER JOIN 구문 (0) | 2013.08.31 | 
| SQL JOIN 구문 (2) | 2013.08.29 | 
| SQL AS(Aliases) 구문 (0) | 2013.08.27 |