인프런 커뮤니티 질문&답변

hunter님의 프로필 이미지

작성한 질문수

장래쌤과 함께하는 쉽고 재미있는 SQL 이야기

Join 질문

해결된 질문

24.06.20 16:21 작성

·

87

0

안녕하세요 선생님, 질문 드립니다

 

A테이블과 B테이블을 조인해서 B테이블에만 있는 값을 가져오려고하는데요

두 테이블 간의 조인 key 값은 있지만 데이터 수는 다릅니다

예시로

A테이블에 10개의 데이터를 가지고있고

B테이블에 3개 데이터를 가지고있으면 A 의 10개 값에 B 값을 붙이려고합니다

안나오는 값은 null 이 되더라도 A 의 모수를 살리고싶은데

 

조인을 어떻게해도 같은거만 가져오는건지 3개만 반환이되서요..

A의 모수를 살리면서 B 값만 (마치 브이룩업처럼) 붙이는 방법을 알고싶습니다

답변 1

1

장래쌤님의 프로필 이미지
장래쌤
지식공유자

2024. 06. 20. 17:35

안녕하세요?

두 테이블을 조인할 때 한 쪽 테이블의 모든 내용이 조회 되게 하려면 OUTER JOIN을 사용해야 합니다. 그렇지 않고 INNER JOIN을 사용하면 매핑이 되는 데이터만 조회가 됩니다. 참고로, 조인문에서 JOIN 이라고 쓰면 이것도 INNER JOIN입니다. 간단히 예제 코드를 만들어 보았습니다. 아래 예제 코드의 INNER JOIN와 LEFT OUTER JOIN 결과를 비교해보시면 좋을 것 같습니다.

-- 예제 데이터 만들기
CREATE TABLE ta (
	num int,
	name varchar(20)
);
INSERT INTO ta VALUES( 1, '홍길동');
INSERT INTO ta VALUES( 2, '일지매');
INSERT INTO ta VALUES( 3, '강우동');
INSERT INTO ta VALUES( 4, '박여인');
INSERT INTO ta VALUES( 5, '한사랑');

CREATE TABLE tb (
	num int,
	city varchar(20)
);
INSERT INTO tb VALUES( 1, '서울');
INSERT INTO tb VALUES( 4, '부산');

-- INNER JOIN
SELECT a.num, a.name, b.city
	FROM ta AS a
	INNER JOIN tb AS b ON a.num = b.num
/*
num  name   city
-----------------
1	홍길동	서울
4	박여인	부산
*/

-- LEFT OUTER JOIN
SELECT a.num, a.name, b.city
	FROM ta AS a
	LEFT OUTER JOIN tb AS b ON a.num = b.num
/*
num  name   city
-----------------
1	홍길동	서울
2	일지매	NULL
3	강우동	NULL
4	박여인	부산
5	한사랑	NULL
*/

해결 안되는 부분이 있으면 다시 질문해 주세요.

질문해 주셔서 감사합니다~

hunter님의 프로필 이미지
hunter
질문자

2024. 06. 20. 17:55

left outer join 이 left join 맞을까요?

left join 사용했는데 매핑이되는 데이터만 조회되서요ㅠ

 

장래쌤님의 프로필 이미지
장래쌤
지식공유자

2024. 06. 20. 18:19

네, 맞습니다.

LEFT JOIN이 LEFT OUTER JOIN 입니다. 혹시 RIGHT OUTER JOIN이 되야하는 상황이 아닌지, 또는 WHERE 절에서 매핑된 데이터만 조회되게 조건을 준 게 아닌지 확인해 보세요.

곧 해결 되실 것 같네요~

hunter님의 프로필 이미지

작성한 질문수

질문하기