Join
JOIN 이라는 벽.
생각보다 많이 어려운 연산자였다.
왜냐하면
보통 이런 문법에 JOIN 부분만 때에따라 다른 JOIN을 사용하는 것 같은데,
FROM 뒤에 JOIN이 쓰이는것과 정체모를 Y와 같은! 컬럼 이름이 나오는것 때문이었다.
여러가지 찾아보고 쿼리를 작성하면서 깨달았다.
join을 사용하는 이유가 서로 다른 테이블을 활용하기 위해서 라는것을...
서로 다른 두 테이블을 사용하려는 것이기 때문에 내가 처음 이해한
이런 느낌의 쿼리문이 아니었던 것이다.
다시한번 정석 join 쿼리문을 보면
select * from x 으로 x테이블을 조회하고,
join y 구문으로 y 테이블 조회 후, 뒤에 붙는 on 조건문을 소화해서 출력한다.
이렇게 다시한번 살펴보니 python으로 예시를 들면
인자가 필요한 함수에 인자를 안넣고 쓰려고 하는것과 결이 비슷했다.
자료형이 지원하지 않는 메소드를 사용하려고 한 게 좀 더 비슷할지도 모르겠다. ㅋ_ㅋ
이제 종류에 대해서 살펴보면
처음엔 왼쪽 오른쪽 이것도 이해가 되지 않았다.
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 |