[SQL] 필요한 데이터 join으로 가져오기

hanahana·2023년 1월 4일
0

문제풀이

A테이블과 B테이블을 중복된 컬럼을 통해 join으로 연결하고 원하는 값이 입력되어있는 컬럼만 출력하는 문제이다.
이 경우 join을 쓰는것은 어렵지 않지만 원하는 값만을 가져오는것은 생각보다 헷갈렸다.

오답풀이

첫번재 오답

select * 
from B
join 
A
using (C3)

동일한 이름의 컬럼이 있어 그 컬럼같을 이용해 묶었다.
하지만 이건 컬럼의 이름만 동일할 뿐 컬럼의 내용은 달랐기 때문에 원하는 값이 출력되지 않았다.

두번째 오답

select C1 from A
join B
on B.C2 = A.C1
where C3 = 'value'

처음에 해당 문제를 이런식으로 풀이하였지만 내가 원한 값이 나오지 않았다.
바로 join을 했을때 중복값이 나오기 때문이었다.

C1C3
12
10
13

같이 내가 출력을 원하지 않는 C3에 해당 C1값이 있기때문에 1이 세번출력되는 결과를 얻어 중복값을 출력한것ㅇ니다
나는 C1의 값이 중복이라면 C1이 단 한번만 출력되길 바랐다.

중복된 값을 삭제하는 법

이럴때는 group by를 사용하면 된다.
원하는 컬럼의 이름을 그룹으로 묶어 한번만 출력하겠다는 뜻이다
밑에 group by c1 만 입력해주면 해당 중복 값을 하나의 값으로 인식해 출력한다.

정답풀의

select c1 from A
join B //join을 입력하면 중복된값이 없다면 출력되지 않는다 없는값도 출력하고 싶다면 outer  join을 이용해야 한다.
on B.c2 = A.c1 //B의 c2칼럼과 A의 c1컬럼을 동일한 값으로보고 합친다.
where c3 = 'value' //c3컬럼의 'value'라고 입력된 값만 찾아서 출력한다.
group by c1 //c1의 중복된값을 하나의 그룹으로 인식하여 중복값 없이 출력한다.

gruop by가 생각보다 잘 떠오르지 않았다.
여러가지 응용문제를 풀어보며 sql에 익숙해지고싶다.

profile
hello world

0개의 댓글