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을 했을때 중복값이 나오기 때문이었다.
C1 | C3 |
---|---|
1 | 2 |
1 | 0 |
1 | 3 |
같이 내가 출력을 원하지 않는 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에 익숙해지고싶다.