안녕하세요!!
이번 포스팅에서는 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 |