상호 배타적 관계
상호 배타적 (Exclusive-OR) 관계 는 둘중 무.조.건 하나인 관계라고 생각하면 될 것 같다.
예를 들어서 인터넷쇼핑몰의 DB에 주문정보 테이블과 개인고객 테이블, 법인고객 테이블이 있다고 하자.
주문정보 테이블에서 개인고객 테이블의 개인고객명 아니면 법인고객 테이블의 법인고객명 이 둘 중 하나의 컬럼을 출력하고 싶다고 하자. (무.조.건 법인고객명 아니면 개인고객명 ! 둘다 가져올 수는 없다.)
이걸 SQL문으로 표시를 해보겠다.
SELECT B.법인고객명
FROM 주문정보 A, 법인고객 B
WHERE A.주문번호=10010 AND A.개인/법인번호=B.법인번호
UNION ALL
SELECT B.개인고객명
FROM 주문정보 A, 개인고객 B
WHERE A.주문번호=10010 AND A.개인/법인번호=B.개인번호
만약에 법인고객 번호와 개인고객 번호가 겹치지 않는다면, COALESCE() 함수를 사용해서 조금 더 간단하게 쓸 수 있다.
(그러면 여기서 UNION ALL은 중복 허용이라는 것은 눈치껏 알아주기~!)
SELECT COALESCE(B.개인고객명 C.법인고객명)고객명
FROM 주문 A LEFT OUTER JOIN 개인고객 B ON (A.개인/법인번호=B.개인번호) LEFT OUTER JOIN 법인고객 C ON (A.개인/법인번호=B.법인번호)
WHERE A.주문번호=10010;
reference. SQL 전문가 가이드