JOIN ON 1 = 1

ddoddo·2023년 1월 18일

SQL로 데이터 분석을 하다가 모르는 문법이 나타났다.
아래와 같은 JOIN을 하는 경우 ON 조건에 관한 부분이었다.

table1 AS B JOIN table2 AS B ON 1 = 1

흔히 사용해오던 JOIN 방법은 다음과 같았다.

  • ON table1.column = table2.column
  • ON table.column BETWEEN A AND B

ON 1 = 1 이 뭐야?

도와줘요 구글맨~

JOIN ON 1 = 1

1 = 1은 항상 참(True)이다.
'아무것도 없애지 마라' 라는 뜻과도 같다.

얼핏 보면 'CROSS JOIN 하고 똑같은 거 아니야?' 라는 생각을 할 수도 있다. 사실 나도 결과 테이블을 보고 처음엔 'CROSS JOIN인가?' 라고 생각하였으나 잘 모르는 문법이고, 확신이 없어서 찾아보게 되었다.

그러나 CROSS JOIN과는 다르다 ❗❗
그럼 어떤 부분이 다른 걸까 ❓

CROSS JOIN과의 차이점

오른쪽 테이블이 행을 반환하지 않을 때 CROSS JOIN도 행을 반환하지 않는다. 그러나 ON 1 = 1 JOIN은 NULL을 사용하여 모든 행을 오른쪽 테이블로 반환한다.

이건 또 무슨 뜻이야 ❓ 라고 생각할 수 있으니 예시를 보자.

  • A table
a
2
1
3
  • B table
b
a
b
c
NULL
  • C table (empty)
c

A와 B를 JOIN할 경우

SELECT * FROM A LEFT JOIN B ON 1 = 1;
SELECT * FROM A CROSS JOIN B;

두 쿼리는 모두 같은 결과를 반환한다.

ab
1NULL
1a
1b
1c
2NULL
2a
2b
2c
3NULL
3a
3b
3c

A와 C를 JOIN할 경우

SELECT * FROM A LEFT JOIN C ON 1 = 1;
ab
1NULL
3NULL
2NULL

SELECT * FROM A CROSS JOIN C;
ab

즉, 테이블 하나가 비어있지만 여전히 레코드는 원할 경우 1 = 1을 사용하며, 문자열을 연결하여 동적 SQL문을 쉽게 만들기 위해 사용한다.

0개의 댓글