비교를 위한 INTERSECT와 EXCEPT
두 데이터 집합 사이에서 공통 행과 서로 다른 행을 찾습니다.
비교를 위한 INTERSECT와 EXCEPT은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
비교 연산자
INTERSECT와 EXCEPT는 두 결과 집합을 결합하는 대신 비교하는 집합 연산자입니다. 면접관은 "두 목록에 모두 있는 고객은 누구인가요?" 또는 "A에는 있지만 B에는 없는 행은 무엇인가요?"와 같은 질문에서 이 연산자를 사용합니다.
INTERSECT= 두 쿼리에 모두 있는 행.EXCEPT= 첫 번째 쿼리에는 있지만 두 번째 쿼리에는 없는 행.
INTERSECT가 반환하는 결과
INTERSECT는 두 결과 집합에 모두 나타나는 중복 없는 행만 반환합니다. 공통 행으로 인정되려면 모든 열의 값이 일치해야 합니다.
UNION과 마찬가지로 일반적인 INTERSECT는 중복을 제거하므로 공통 행을 각각 한 번씩만 반환합니다.
SELECT customer_id FROM orders_2023
INTERSECT
SELECT customer_id FROM orders_2024;
-- customers who ordered in BOTH yearsEXCEPT가 반환하는 결과
EXCEPT(오라클에서는 MINUS라고 합니다)는 첫 번째 쿼리에는 있지만 두 번째 쿼리에는 없는 중복 없는 행을 반환합니다. 방향성이 있으므로 A EXCEPT B와 B EXCEPT A는 서로 다른 결과를 냅니다.
두 번째 데이터 집합에 없는 레코드를 찾는 자연스러운 방법입니다.
SELECT customer_id FROM orders_2023
EXCEPT
SELECT customer_id FROM orders_2024;
-- ordered in 2023 but NOT in 2024 (churned)EXCEPT는 대칭적이지 않습니다
면접에서 자주 다루는 핵심 내용입니다. EXCEPT는 방향성이 있습니다. 두 쿼리의 순서를 바꾸면 다른 질문에 답하게 됩니다.
A EXCEPT B= A에는 있고 B에는 없는 항목.B EXCEPT A= B에는 있고 A에는 없는 항목.
반면 INTERSECT는 대칭적이므로 A INTERSECT B와 B INTERSECT A의 결과는 같습니다.
-- new customers in 2024 (not seen in 2023):
SELECT customer_id FROM orders_2024
EXCEPT
SELECT customer_id FROM orders_2023;중복과 DISTINCT 기본 동작
표준 INTERSECT와 EXCEPT는 UNION과 마찬가지로 중복 없는 행을 대상으로 동작합니다. 비교하기 전에 입력 행의 중복이 하나로 합쳐집니다.
일부 데이터베이스는 중복 개수를 유지하는 INTERSECT ALL과 EXCEPT ALL을 지원하지만, 이는 덜 일반적입니다. 면접관이 ALL을 명시하지 않았다면 중복 제거 방식으로 가정하세요.
SELECT city FROM a
INTERSECT ALL
SELECT city FROM b;
-- multiplicity-aware (Postgres supports this; MySQL 8+ too)전체 행을 비교하여 같은지 확인하기
두 연산자는 선택된 모든 열에 걸쳐 전체 행을 비교합니다. 모든 열이 일치해야 두 행이 같은 것으로 간주됩니다. 따라서 두 테이블에 동일한 데이터가 저장되어 있는지 확인하는 데 적합합니다.
비교를 의미 있게 만들려면 관심 있는 열을 모두 선택하세요.
SELECT id, name, email FROM prod_users
EXCEPT
SELECT id, name, email FROM staging_users;
-- rows in prod that differ from / are missing in staging양방향 테이블 차이 비교 패턴
두 테이블이 동일한지 확인하려면 양방향으로 EXCEPT를 실행하고 차이를 결합하세요. 결합한 결과가 비어 있다면 두 테이블이 정확히 일치한다는 뜻입니다.
이는 마이그레이션 및 대사 확인을 위한 데이터 검증 면접 답변에서 자주 사용하는 방식입니다.
(SELECT * FROM table_a EXCEPT SELECT * FROM table_b)
UNION ALL
(SELECT * FROM table_b EXCEPT SELECT * FROM table_a);
-- empty result => tables are identicalNULL은 어떻게 처리되는가
집합 연산 내부에서는 일치 여부를 판단할 때 두 NULL 값을 서로 같은 것으로 취급합니다. 이는 일반적인 비교에서 NULL = NULL의 결과가 UNKNOWN인 것과 다릅니다.
따라서 한 열에 NULL이 있는 행은 같은 위치에 NULL이 있는 다른 행과 일치합니다. 일반적인 비교 규칙과 반대이므로 면접관이 이 내용을 확인하기도 합니다.
-- (1, NULL) INTERSECT (1, NULL) -> returns (1, NULL)
SELECT id, region FROM a
INTERSECT
SELECT id, region FROM b;집합 연산자 간 우선순위
연산자를 섞어 사용할 때 표준에서는 일반적으로 INTERSECT가 UNION과 EXCEPT보다 우선순위가 높습니다. 모호함을 피하려면 분기를 괄호로 감싸세요.
평가 순서를 명확히 하기 위해 괄호를 사용한다고 말하면 면접에서 성숙한 이해를 보여 줄 수 있습니다.
(SELECT id FROM a EXCEPT SELECT id FROM b)
UNION
(SELECT id FROM c);INTERSECT/EXCEPT와 조인 중 선택하기
INTERSECT와 EXCEPT는 간결하며 내장된 중복 제거 기능으로 전체 행을 비교합니다. 조인은 더 유연하므로 추가 열을 반환하거나 중복을 처리하는 방식을 선택할 수 있습니다.
질문이 순수하게 "어떤 행이 공통인가요?" 또는 "어떤 행이 누락되었나요?"에 관한 것이라면 집합 연산자를 선호하세요. 양쪽의 열이 모두 필요하거나 사용하는 문법에서 해당 연산자를 지원하지 않으면 조인으로 전환하세요.
종합하기
다음과 같이 요약해서 말할 수 있습니다. "INTERSECT는 두 쿼리에 모두 있는 행을 반환하며 대칭적입니다. EXCEPT는 첫 번째 쿼리에는 있지만 두 번째 쿼리에는 없는 행을 반환하며 방향성이 있습니다. 두 연산자 모두 전체 행을 비교하고 NULL을 같은 값으로 취급하며 기본적으로 중복 없는 결과를 반환합니다."
데이터 대사 관련 추가 질문에는 양방향 EXCEPT 차이 비교 기법을 덧붙이면 이 주제를 완전히 다룰 수 있습니다.
빠른 확인
2023년에 주문을 했지만 2024년에는 주문하지 않은 고객, 즉 이탈 고객을 찾으려고 합니다.
복습
핵심 내용:
INTERSECT= 두 쿼리 모두에 있는 행, 대칭적입니다.EXCEPT(오라클에서는 MINUS) = 첫 번째 쿼리에는 있지만 두 번째 쿼리에는 없는 행, 방향성이 있습니다.- 두 연산자 모두 전체 행을 비교하며 기본적으로 중복 없는 결과를 반환합니다.
- 일치 여부를 판단할 때 NULL은 같은 값으로 취급됩니다.
- 양방향
EXCEPT를 사용하면 전체 테이블의 차이를 확인할 수 있습니다.
자주 묻는 질문
“비교를 위한 INTERSECT와 EXCEPT” 강의는 무료인가요?
네 — “비교를 위한 INTERSECT와 EXCEPT” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“비교를 위한 INTERSECT와 EXCEPT”에서 뭘 배우나요?
두 데이터 집합 사이에서 공통 행과 서로 다른 행을 찾습니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“비교를 위한 INTERSECT와 EXCEPT” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- UNION과 UNION ALL 비교하기
- 열 개수와 형식 호환성
- 비교를 위한 INTERSECT와 EXCEPT
- JOIN으로 집합 연산 흉내 내기