오늘도 쉽게 생각했다가 기본개념으로 뼈맞은 사례가 있어 기록해둔다. JOIN에 관한 것이다. 혹시 틀린 부분이 있다면 댓글을 부탁드린다.
- JOIN은 기본적으로 테이블1 * 테이블2이다.
- 각 row를 하나씩 다 곱하기 때문에 조건을 걸지 않으면 테이블1 row 수 * 테이블2 row 수가 생성된다.
- 마찬가지로 SELF JOIN의 경우 조건을 걸지 않으면 테이블 row 수의 제곱만큼 row가 생성된다.
예를 들어 이런 문제에서 JOIN을 활용하는 경우,
SELECT A.x, A.y
FROM functions A
JOIN functions B ON A.x = B.y AND A.y = B.x
WHERE A.x < A.y
위와 같이 코드를 쓴다면 이것은 아래를 의미한다.
- function이라는 테이블을 A와 B로 만들어서 SELF JOIN을 합니다.
- 이때 JOIN된 테이블은 테이블 A와 B 각각의 row 수를 곱한 만큼의 row를 가질 예정이지만, 우리는 다음의 조건으로 한정하여 JOIN된 테이블을 만듭니다: 테이블 A의 x값과 테이블 B의 y값이 같으면서, 테이블 B의 x값과 테이블 A의 x값이 같은 경우
- 이렇게 만들어진 JOIN 테이블에서도 A 테이블의 y값이 A 테이블의 x 값보다 큰 경우만 뽑아내겠습니다.
- 테이블 A의 x, 테이블 B의 y 값을 출력해주세요.
이 내용은 이 블로그 내용을 보고 알았으므로, 조금 더 구체적인 내용은 여기에서 참고하도록 하자.