0Pricing
Coding Interview Prep · 강의

열 개수와 형식 호환성

결과 집합을 결합하기 위해 충족해야 하는 규칙과 일반적인 불일치 오류를 알아봅니다.

열 개수와 형식 호환성은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

면접관이 확인하는 호환성 규칙

모든 집합 연산(UNION, INTERSECT, EXCEPT)에서는 두 결과 집합이 UNION과 호환되어야 합니다. 면접관은 이러한 쿼리가 어떤 방식으로 조용히 실패하는지 알고 있는지 확인하기 위해 이 내용을 질문합니다.

호환성을 결정하는 규칙은 두 가지입니다. 열 개수가 일치해야 하고, 위치별로 데이터 형식이 호환되어야 합니다. 둘 중 하나라도 잘못되면 오류가 발생하거나 예상 밖의 결과가 나옵니다.

규칙 1: 열 개수가 같아야 합니다

두 쿼리는 같은 수의 열을 반환해야 합니다. 첫 번째 쿼리가 세 개의 열을 반환하고 두 번째 쿼리가 두 개를 반환하면 데이터베이스가 해당 문을 거부합니다.

이는 면접에서 집합 연산을 사용할 때 가장 흔히 발생하는 오류입니다. 특히 한 분기만 수정하고 다른 분기를 수정하는 것을 잊었을 때 자주 발생합니다.

SELECT id, name, city FROM a
UNION
SELECT id, name FROM b;
-- ERROR: each UNION query must have the same number of columns

규칙 2: 위치별로 형식이 호환되어야 합니다

열은 이름이 아니라 위치를 기준으로 대응됩니다. 쿼리 1의 첫 번째 열은 쿼리 2의 첫 번째 열과 대응하고, 나머지도 같은 방식으로 대응합니다. 각 열 쌍의 형식은 호환되어야 합니다.

호환된다는 것은 보통 암시적으로 변환할 수 있다는 뜻입니다. INT와 BIGINT는 괜찮지만, INT와 DATE는 일반적으로 호환되지 않습니다.

SELECT id, signup_date FROM a
UNION
SELECT id, signup_date FROM b;
-- positions: (int,date) vs (int,date) -> OK

중요한 것은 이름이 아니라 위치입니다

미묘한 함정이 있습니다. 위치가 맞고 형식이 호환된다면 열 이름이 서로 달라도 결합할 수 있습니다. 반대로 이름이 같더라도 순서가 잘못되면 데이터가 서로 어긋납니다.

집합 연산은 항상 열의 위치를 기준으로 읽으세요. 면접관은 이를 확인하기 위해 열 순서를 바꿔 놓기도 합니다.

SELECT name, id FROM a
UNION ALL
SELECT id, name FROM b;
-- name<->id swapped: types may clash or data lands in wrong column

출력 열 이름

결과 집합은 첫 번째 쿼리에서 열 이름을 가져옵니다. 두 번째 쿼리의 레이블은 버려집니다. 헤더를 제어하려면 첫 번째 분기의 열에 별칭을 지정하세요.

따라서 이후에 사용하는 ORDER BY에서는 첫 번째 쿼리의 이름을 참조하거나 열 순번을 사용해야 합니다.

SELECT id AS user_id, city AS location FROM a
UNION ALL
SELECT id, town FROM b;
-- output headers: user_id, location

암시적 형 변환

위치가 대응하는 두 열의 형식이 서로 다르지만 호환될 때 엔진은 두 값을 모두 담을 수 있을 만큼 넓은 결과 형식을 선택합니다. INT와 DECIMAL을 결합하면 일반적으로 DECIMAL이 됩니다.

면접에서 이러한 형 변환을 언급하면 깊이 있는 이해를 보여 줄 수 있습니다. 열에서 오류가 발생하는 것이 아니라 더 넓은 형식으로 승격된다는 것을 알고 있다는 뜻입니다.

SELECT amount FROM int_table   -- INT
UNION ALL
SELECT amount FROM dec_table;  -- DECIMAL
-- result column is DECIMAL

NULL로 누락된 열 채우기

두 쿼리의 형태가 자연스럽게 다를 때는 자리 표시자 열을 추가하여 형태를 맞춥니다. 흔히 다른 분기에 있는 슬롯을 채우기 위해 NULL을 선택하며, 필요한 경우 형식을 변환합니다.

NULL을 형 변환하면 엔진이 형식을 임의로 추측하는 것을 막고 열의 호환성을 유지할 수 있습니다.

SELECT id, phone, CAST(NULL AS VARCHAR) AS email FROM a
UNION ALL
SELECT id, CAST(NULL AS VARCHAR), email FROM b;

형식 불일치로 실패하는 사례

여기서는 한 분기의 두 번째 열이 날짜이고 다른 분기에서는 문자열입니다. 엄격한 엔진은 이를 거부하고, 관대한 엔진은 예측할 수 없는 방식으로 변환할 수 있습니다. 안전한 해결 방법은 양쪽이 같은 형식을 사용하도록 명시적인 CAST를 적용하는 것입니다.

면접에서는 암시적 변환에 의존하기보다 형 변환을 제안하세요.

SELECT id, CAST(event_date AS VARCHAR) FROM a
UNION ALL
SELECT id, label FROM b;
-- both second columns now VARCHAR -> compatible

이 규칙은 모든 집합 연산자에 적용됩니다

열 개수와 형식 호환성 규칙은 UNION, UNION ALL, INTERSECT, EXCEPT에서 동일합니다. 모두 결과 집합을 세로로 쌓으며, 입력이 UNION과 호환되어야 합니다.

따라서 하나의 머릿속 점검 목록으로 모든 집합 연산을 확인할 수 있습니다. 열 개수를 세고, 위치별 형식을 확인하고, 첫 번째 쿼리에서 이름을 제어하세요.

SELECT id, city FROM a
INTERSECT
SELECT id, city FROM b;
-- same compatibility rules as UNION

사전 점검 목록

결과 집합을 결합하기 전에 다음을 확인하세요.

  • 모든 분기의 열 개수가 같은지 확인합니다.
  • 각 위치의 열 쌍이 형식상 호환되는지 확인합니다(확실하지 않다면 형 변환을 적용합니다).
  • 열이 같은 논리적 순서로 배치되어 있는지 확인합니다.
  • 깔끔한 출력 이름을 위해 첫 번째 쿼리에 별칭이 설정되어 있는지 확인합니다.

면접에서 이 목록을 소리 내어 확인하면 조용히 발생하는 정렬 불일치 문제를 예방할 수 있습니다.

종합하기

호환성 문제는 대부분 예방할 수 있습니다. 열 개수가 다르면 오류가 분명하게 발생하지만, 열 순서가 바뀌거나 예상하지 못한 형 변환이 일어나면 문제가 드러나지 않을 수 있습니다. 쿼리를 열의 위치 기준으로 읽고 의도적으로 형 변환을 적용하면 집합 연산을 올바르게 유지할 수 있습니다.

자신 있는 답변에서는 두 규칙을 모두 말하고, 위치 기준 대응을 언급하며, 출력 이름이 첫 번째 쿼리에서 결정된다는 점을 설명하세요.

빠른 확인

구조화 질의 언어에서는 두 UNION 분기의 어떤 열이 서로 대응하는지 어떻게 결정하나요?

복습

핵심 내용:

  • 모든 집합 연산자는 모든 분기에서 같은 열 개수를 요구합니다.
  • 열은 위치를 기준으로 대응하며, 각 열 쌍의 형식이 호환되어야 합니다.
  • 호환되는 형식은 더 넓은 공통 형식으로 변환될 수 있습니다.
  • 형태가 다른 경우 CAST(NULL AS type)을 사용하여 부족한 부분을 채우세요.
  • 출력 이름은 첫 번째 쿼리에서 가져옵니다.

자주 묻는 질문

“열 개수와 형식 호환성” 강의는 무료인가요?

네 — “열 개수와 형식 호환성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“열 개수와 형식 호환성”에서 뭘 배우나요?

결과 집합을 결합하기 위해 충족해야 하는 규칙과 일반적인 불일치 오류를 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“열 개수와 형식 호환성” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. UNION과 UNION ALL 비교하기
  2. 열 개수와 형식 호환성
  3. 비교를 위한 INTERSECT와 EXCEPT
  4. JOIN으로 집합 연산 흉내 내기
← Coding Interview Prep(으)로 돌아가기