[SQL] join

hanahana·2023년 1월 21일
0

Innor Join

ABC
1avalue
2bvalue1
3cvalue2
4dvalue3

ADE
1c1
2c2
3c3

이 두 테이블을 연결했을 때 똑같은 A컬럼이 있다,
이 값을 연결하여 ABCDE컬럼이 연결되어있는 하나의 테이블을 만들수있다.

이때 공통된 컬럼이 A 이기때문에 테이블1의 A와 테이블2의 A같다는것을 쿼리문으로 알려줘야한다.

<old>
select * 
from table1, table2
where table1.a = table2.a

이게 예전이 방식이다, 하지만 이제는 join을 사용하여 표기한다

select * 
from table1
inner join table2 on table1.a = table2.a //각각 테이블1,2의 a컬럼을 뜻한다

하지만 이 두 테이벌의 컬럼은 이름이 같다 그렇기에 inner줄에서 이런식으로 사용할수있따.

inner join table2 using (a)

이렇게 using과 ()를 사용해 컬럼명이 같다는것을 인싟히킬수있다.

https://sql-joins.leopard.in.ua/
이 사이트를 활용하여 join문을 어떻게 사용하면 좋을지 참고할수있다.

  • inner join이란 양쪽테이블에 모두 있을때만 출력되며 한쪽이라도 없으면 출력되지 않는다.

2가지 이상의 테이블 연결

테이블을 더 많이 연결하고 싶다면

select * 
from table1
inner join table2 on table1.a = table2.a 
inner join table3 using (b)

같이 join절을 계속 붙여주면 된다.

Outer join

table 1과 table2의 a컬럼의 값이 둘다 있지 않은경우 값이 없는 경우에는 합쳐지지 않는다.
없는 값도 합쳐서 출력하고 싶을때 outer join을 사용한다.

table1

ABC
1avalue
2bvalue1
3cvalue2
4dvalue3

table2
ADE
1c1
2c2
3c3

이 데이터의 경우 a컬럼의 4는 연결될 데이터가 없다.
table1을 기준으로 이렇게 작성했다면

select * 
from table1//1번 테이블이 기준이다.
join table2 using (A)
ABCDE
1avaluec1
2bvalue1c2
3cvalue2c3

이 될것이다,
하지만 반대로 table2를 기준으로 작성하면 어떨까?

select * 
from table2//2번 테이블이 기준이다.
join table1 using (A)
ADEBC
1c1avalue
2c2bvalue1
3c3cvalue2

이런식으로 a4의 데이터는 아예 출력되지 않는다,
이때 데이터값이 연결되지 않는 a4의 데이터를 출력하고 싶다면 outer join을 사용한다,
outer join은 left join과 같은 값이 출력되며 자세한 설명은 아래쪽에서 계속된다.

Left join

왼쪽 테이블을 기준으로 왼쪽테이블의 전체출력, 오른쪽 테이블의 교집합만 출력하는것이 left join이다.

ABC
1avalue
2bvalue1
3cvalue2
4dvalue3
nullavalue4

ADE
1c1
2c2
3c3
5c4

이런데이터를 가지고 있을때 첫번째(왼쪽)테이블에는 마지막에 a컬럼의 값이 null인 열이 존재한다.

select * 
from table1
left join table2 on table1.a = table2.a 

이런 쿼리문을 작성한다면 왼쪽을 기준으로 왼쪽 컬럼은 전부 출력이 되기때문에

ABCDE
1avaluec1
2bvalue1c2
3cvalue2c3
4dvalue3nullnull
nullavalue4nullnull

이렇게 null인 부분을 포함하여 값을 출력하게 될것이다. (첫번째 테이블은 null이어도 모두 출력됨)
하지만 두번째 테이블의 a5인 열은 첫번째 테이블에 해당값이 없기때문에 출력되지 않는다.

Right join

ABC
1avalue
2bvalue1
3cvalue2
4dvalue3
nullavalue4

ADE
1c1
2c2
3c3
5c4

이런 같은데이터에서 right join을 사용한다면 이번에는 두번째 테이블을 기준으로 출력하게된다.

select * 
from table1
right join table2 on table1.a = table2.a 
ABCDE
1avaluec1
2bvalue1c2
3cvalue2c3
5nullnullc4

아까와는 정반대로 a4와 anull 행이 조회되지 않는 데이터가 된다.
하지만 왼쪽오른쪽을 바꿀 뿐이기에 보통 left join을 사용한다

본 내용은 데이터리안 'SQL 데이터 분석 캠프 입문반' 을 수강하며 작성한 내용입니다

profile
hello world

0개의 댓글