본문 바로가기
프로그래밍 언어(Programming Languages)/SQL

[SQL] SQL에서 FULL JOIN과 "1=1" 구문 이해하기 🧐

by 데이터 벌집 2023. 12. 12.
반응형

SQL을 다루다 보면, 테이블을 조인하는 것은 매우 기본적이면서도 중요한 작업이에요. 이를 통해 두 개 이상의 테이블에서 관련된 컬럼을 기준으로 행을 결합할 수 있죠. 하지만, 특정 상황에서 유용하거나 눈에 띄는 구문이 하나 있어요: FULL JOIN을 1=1 조건과 함께 사용하는 것이죠. 이게 무엇을 의미하고 사용했을 때 무슨 영향이 있는지 살펴보도록 해요. 🕵️‍♂️

 

 

FULL JOIN과 1=1

 

FULL JOIN이란?

FULL JOIN, 즉 완전 외부 조인은 두 테이블의 모든 행을 결합하고, 한쪽 테이블에서 매치가 없는 경우 NULL로 채우는 방법이에요. 이는 매칭되는 행이 다른 테이블에 없어도 양쪽 테이블의 모든 레코드를 보고 싶을 때 사용되죠.

 

"1=1" 조건이란?

 

1=1 조건은 항상 참이 되는 거죠. SQL 문에서 이를 사용하면, 실제로는 어떤 조인 조건도 적용되지 않게 됩니다. JOIN 절에서 1=1을 사용하면, 데이터베이스에 첫 번째 테이블의 모든 행을 두 번째 테이블의 모든 행과 매칭하라고 지시하는 거예요.

 

 

학생과 과목의 예제

다음과 같은 테이블을 생각해 보세요:

 

학생 테이블:

STUDENT_ID STUDENT_NAME
1 Alice
2 Bob
13 John
6 Alex

 

과목 테이블:

SUBJECT_NAME
Math
Physics
Programming

이 테이블들에 FULL JOIN을 ON 1=1 구문과 함께 사용하면 두 테이블의 카테시안 곱이 생성되요. 즉, 첫 번째 테이블(학생)의 각 행이 두 번째 테이블(과목)의 모든 행과 매칭되는 거죠.

 

SQL 쿼리는 다음과 같습니다:

SELECT s.*, su.*
FROM students s
FULL JOIN subjects su ON 1=1;

 

결과는 이렇게 됩니다:

STUDENT_ID STUDENT_NAME SUBJECT_NAME
1 Alice Math
1 Alice Physics
1 Alice Programming
2 Bob Math
... ... ...
6 Alex Programming

"1=1"을 JOIN에서 사용하는 경우

JOIN 작업에서 1=1 조건을 사용하는 것은 일상적인 SQL 작업에서 흔하지 않아요. 하지만 특정 상황에서 매우 유용할 수 있습니다:

  • 학생과 과목 사이의 완전한 조합 세트를 생성할 때, 예를 들어 수업 일정에 학생들을 배치하는 것처럼요.
  • 동적 SQL에서 런타임에 조인 조건이 구성되고 추가될 때, 1=1은 추가 조건을 연결하는 시작점으로 사용될 수 있어요.

 

 

고려할 점

이 방법은 유용할 수 있지만, 위험성도 있어요:

  • 두 테이블이 크면 매우 많은 수의 행이 생성되어 성능 문제를 일으킬 수 있어요.
  • 테이블 간의 관계에 기반한 JOIN을 기대하는 사람들에게 혼란을 줄 수 있죠.

 

결론

SQL에서 FULL JOIN과 1=1은 강력한 도구지만, 모든 도구와 마찬가지로 주의해서 사용해야 해요. 이 작업의 함의를 이해하고 사용하기 적절한 경우를 아는 것이 중요해요. 이 포스트가 SQL의 이러한 다소 난해한 측면을 이해하는 데 도움이 되었길 바라요. 😄

반응형