본문 바로가기
data/sql

SQL Join

by 포잉띠 2024. 3. 5.

Join

JOIN 이라는 벽.

생각보다 많이 어려운 연산자였다.

 

왜냐하면 

보통 이런 문법에 JOIN 부분만 때에따라 다른 JOIN을 사용하는 것 같은데,

FROM 뒤에 JOIN이 쓰이는것과 정체모를 Y와 같은! 컬럼 이름이 나오는것 때문이었다.

 

여러가지 찾아보고 쿼리를 작성하면서 깨달았다.

join을 사용하는 이유가 서로 다른 테이블을 활용하기 위해서 라는것을...

 

서로 다른 두 테이블을 사용하려는 것이기 때문에 내가 처음 이해한

이런 느낌의 쿼리문이 아니었던 것이다.

 

다시한번 정석 join 쿼리문을 보면

select * from x 으로 x테이블을 조회하고,

join y 구문으로 y 테이블 조회 후, 뒤에 붙는 on 조건문을 소화해서 출력한다.

 

이렇게 다시한번 살펴보니 python으로 예시를 들면

인자가 필요한 함수에 인자를 안넣고 쓰려고 하는것과 결이 비슷했다.

자료형이 지원하지 않는 메소드를 사용하려고 한 게 좀 더 비슷할지도 모르겠다. ㅋ_ㅋ

 

 

이제 종류에 대해서 살펴보면

on 구문을 안쓰는 join이 있는가 질문에 대한 gpt의 답변

 

처음엔 왼쪽 오른쪽 이것도 이해가 되지 않았다.

on 사용하는것도 솔직히 왜쓰는지 뭐하는애인지 몰랐는데 정리가 깔끔하다.

 

요약하면

여기에서 X 가 왼쪽 테이블, Y가 오른쪽 테이블이다.

 

LEFT JOIN

LEFT JOIN 을 쓰면 X(왼쪽)테이블의 행 전체와 Y(오른쪽)테이블에서 ON 구문의 조건에 맞는 행을 결합한다.

Gpt에게 예시를 부탁했다.

 

RIGHT JOIN 

RIGHT JOIN은

이렇게 결과가 나온다고 한다.

하지만 오른쪽, orders 테이블에는 order_id라는 컬럼이 존재하는데 이 결과에는 반영되지 않았다.

이는 Select 구문에서 order_id 컬럼을 제외했기 때문이다.

 

Cross join

Cross join 은 python itertools 라이브러리의 combination 메소드 처럼 두 테이블간 모든 행의 조합을 출력한다.

보통 on을 사용하지 않기에 모든 행의 조합을 출력하는데, 이를 좀 규모가 큰 DB에서 쿼리를 날렸다가는 

DB가 날라갈수가 있다고 한다.

경우의수를 확인하기 위해 사용하는 것이라 on을 쓸것이라면 다른것을 쓰는게 나을 것 같다.

 

 

Full join, Full outer join

Full join, Full outer join 은 두 테이블에서 기준이 되는 컬럼을 on으로 잡고 그 외의 컬럼들을 다 합쳐서 비교해 주는 join 이다.

물론 Gpt가 들어준 예시 처럼 Select 구문을 조정해 필요한 컬럼만 조회할 수 있다.

 

Cross Join, Full Join 에서의 Null 값

두 테이블을 비교하는 과정에서 레코드에 Null값, 매칭되지 않는 값들이 존재할 수 있다.

이럴때 Null을 출력한다.

 

 

기본적인 것만 해도 꽤 무겁다. 

join에 여러가지를 더해서 쓸 수도 있다고 한다.

 

프로그래밍 처음 배울 때 반복문 배웠을때랑 비슷한 느낌을 받았다.

어려운데 기본적인것이고 쓰이는곳도 많고 응용도 매우 다양하게 가능한게 참 찰떡같다.

 

 

 

'data > sql' 카테고리의 다른 글

MySQL load data  (0) 2024.03.09
Sql 이진 데이터  (0) 2024.03.06
Mysql 8.0 Workbench로 로컬 테스트 환경 구축  (0) 2024.03.05
sql 문법 정리 2  (0) 2024.03.04
sql 문법 정리 1  (0) 2024.03.01