2개 테이블에서 데이터 불러오기(LEFT JOIN)
앞에서 우리는 JOIN문에 대해서 학습했습니다.
정확히는 INNER JOIN문이었습니다.
INNER JOIN문의 결과는 다음과 같았습니다.
SELECT s.name, a.address FROM student s JOIN address a ON(s.num = a.memberID);
즉, 두 테이블간에 유효한 데이터만 불러왔습니다.
한 테이블에 데이터가 없으면 그 데이터는 안불러오죠.
하지만 당연하게도 주소를 등록하지 않은 고객들도 있습니다.
주소를 등록하지 않은 고객들의 정보도 함께 불러오겠습니다.
LEFT JOIN문 사용하기
LEFT는 왼쪽을 의미하지요?
SELECT s.name, a.address FROM student s JOIN address a ON(s.num = a.memberID);
위의 쿼리문에서 student 테이블은 왼쪽에 있고 address 테이블은 오른쪽에 있습니다.
즉, 왼쪽에 있는 테이블을 기준으로 한다는 의미입니다.
그러면 다음의 쿼리문을 사용해 결과를 확인합시다.
SELECT s.name, a.address FROM student s LEFT JOIN address a ON(s.num = a.memberID);
단순히 JOIN앞에 LEFT만 넣었습니다.
어떤가요? 결과가 다릅니다.
address 테이블에 정보가 없더라도 LEFT JOIN을 사용하면 LEFT에 해당하는 테이블인 student 테이블에 정보가 모두 나타납니다.
자 그러면 하나 더 해봅시다. 이번에는 address 테이블에 데이터가 없는 student 데이터만 불러보겠습니다.
간단합니다. 조건문을 추가합니다. student테이블의 대표 필드값이 NULL인 것을 불러옵니다.
그려면 조건문으 다음과 같습니다.
WHERE a.addressID IS NULL;
그럼 최종적으로 쿼리문은 다음과 같습니다.
SELECT s.name, a.address FROM student s LEFT JOIN address a ON(s.num = a.memberID) WHERE a.addressID IS NULL;
결과와 같이 address 테이블에 데이터가 없는 student 테이블이 데이터만 보입니다.
현재까지의 db 백업 (아래는 현재까지의 작업을 백업한거라서 중도에 들어오신분들을 위한거에요.)
david_db smart study_db