
본 강의는 메타코드M에서 진행되는 이상훈 강사님의 실무에 적합한 SQL역량을 키우기 위해 준비된 강의입니다.
강의 정보는 아래 이미지 링크를 클릭해 주세요
이 구문은 테이블 간 연계된 데이터를 처리하기 위한 핵심 구문으로 SQL언어와 MySQL프로그램을 사용하는 이유인 RDBMS의 핵심 명령어라 볼 수 있다.

이 부분을 실현시키는 구문이 JOIN 구문이다.

해당 구문의 사용 문법은 아래와 같다.
select [대상 칼럼]
from [join 대상 테이블]
join [join 하려는 테이블] on [조건문]
여기서 [join 대상 테이블] 은 'Primary Key'와 'Foreign Key'가 포함되어 있는 테이블이라 보면 되며,
[join 하려는 테이블]은 'Foreign Key'에 연동된 'Primary Key'가 존재하는 테이블이라 볼 수 있다.

따라서 위 코드처럼 예시 테이블 ex3, ex4를 설계하고
[join 대상 테이블]을 ex3으로 고정할 때
'Primary Key'는 ex3 테이블의 #컬럼이 되며,
'Foreign Key'는 ex3 테이블의 id
'Primary Key'는 ex4 테이블의 id가 된다.
이에 대한 개념을 이해하고 JOIN구문을 사용하면 교집합, 합집합, 왼쪽/오른쪽 합산 등의 다양한 데이터셋을 만들 수 있다.

첫번째 관계형 테이블 방법론은 '교집합' 이다.
이는 위 사진처럼 'Foreign Key'와 'Primary Key'의 데이터 셋에서 일치하는 데이터 셋 만을 추출하는 방식이다.

다음으로 [join 대상 테이블] 혹은 [join 하려는 테이블]에 관계되어 있는 테이블만을 연결하는 방식은 JOIN 구문 앞에 left, right구문을 추가하여 붙여주면 된다.
여기서 교집합에 해당하는 부분을 삭제하고 싶다면
WHERE구문을 활용하여 논리연산 조건문을 추가해 삭제하면 된다.
그러면 합집합은 어떻게 만들어야 할까?

합집합은 UNION구문을 응용하여 만드는 것인데
이 UNION구문은 두 테이블의 데이터를 단순하게 세로로 쭉 나열하는 기능만 수행한다
이때, 중요한 것은 세로로 쭉 나열하여 합치기 때문에 합치려는 두 대상 테이블에서 추출하는 Col의 개수가 같아야 한다.
여기서 합치려는 컬럼 내 데이터셋을 비교하여 같은 값이 있다면 그냥 교집합 해버리는데
만약 그 교집합 한 항목(중복항목)도 표기가 되게 하고 싶다면 UNION ALL 로 뒤에 ALL코드를 추가하면 된다.

이제 합집합 코드를 구현해보자

SELECT ex3.id, ex3.name, ex3.age, ex4.id, ex4.region
FROM ex3
LEFT JOIN ex4 ON ex3.id = ex4.id
UNION
SELECT ex3.id, ex3.name, ex3.age, ex4.id, ex4.region
FROM ex3
RIGHT JOIN ex4 ON ex3.id = ex4.id
WHERE ex3.id IS NULL;
뭔가 많이 복잡하다.
그런데 이 코드를 엄청 단순화 해서 같은 결과를 낼 수 있는 코드가 있다.

바로 앞에 LEFT JOIN 예제와 RIGHT JOIN 예제를
UNION으로 이어붙이기만 하면 된다.
그럼 이 코드는 어떤 문제가 있는가?
바로 UNION 시 코드 가독성을 높여야 하는 '명시적 COL 지정'부분이 완전 빠진 구문이라 볼 수 있다.

따라서 위 사진처럼 운 좋게 LEFT JOIN 결과와 RIGHT JOIN 결과의 COL개수가 모두 5개로 일치하여
UNION이 실행된 것이지만
이는 매우 위험한 방식이기에
UNION 코드를 수행할 때는 수행하는 코드 블럭 간 합치려는 COL의 개수, 명칭을 모두 명시적으로 언급해야 한다.