SQLP

시험 직전 요약장

판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.

이론 목록

MERGE 정확성과 성능: Source 유일성·조건부 DML·DELETE WHERE

원래 이론 →

판단 기준

SQL
MERGE INTO customer t
USING customer_stage s
ON (t.customer_id = s.customer_id)
WHEN MATCHED THEN
  UPDATE SET
    t.customer_name = s.customer_name,
    t.grade         = s.grade
WHEN NOT MATCHED THEN
  INSERT (customer_id, customer_name, grade)
  VALUES (s.customer_id, s.customer_name, s.grade);

각 요소의 역할은 다음과 같습니다.

요소역할
Source비교할 Key와 변경할 값을 제공
Target실제로 변경되는 Table 또는 수정 가능한 View
ONSource Row가 Match·Nonmatch 중 어느 Branch로 갈지 결정
WHEN MATCHEDMatch Row에 Update를 수행할 후보 Branch
WHEN NOT MATCHEDMatch가 없는 Source Row에 Insert를 수행할 후보 Branch

ON 조건은 단순한 사후 Filter가 아닙니다. 업무적으로 같은 Entity를 찾는 기준이며, 너무 좁거나 변동 가능한 속성을 포함하면 기존 Row를 Nonmatch로 잘못 분류할 수 있습니다.

예를 들어 Target의 CUSTOMER_ID가 Unique인데 ON 조건에 상태까지 포함하면, 같은 고객이 이미 존재해도 상태가 다르다는 이유로 Nonmatch가 되어 Insert를 시도하고 Unique 오류가 발생할 수 있습니다.

SQL
ON (t.customer_id = s.customer_id
AND t.status_cd   = s.status_cd)

업무 식별 Key와 Branch Filter를 구분해야 합니다. 상태에 따라 Update 여부를 제한하려는 목적이라면 UPDATE WHERE 등 더 적합한 위치를 검토합니다.

이 부분의 원문 →

헷갈리는 개념

SQL
WHERE t.grade <> s.grade

한쪽 값이 NULL이면 비교 결과가 UNKNOWN이 될 수 있어 변경을 놓칠 수 있습니다. 다음처럼 Data Type과 업무 규칙에 맞는 NULL-safe 조건을 사용합니다.

SQL
WHERE DECODE(t.grade, s.grade, 0, 1) = 1

또는 명시적으로 NULL 경우를 분리합니다.

SQL
WHERE t.grade <> s.grade
   OR (t.grade IS NULL AND s.grade IS NOT NULL)
   OR (t.grade IS NOT NULL AND s.grade IS NULL)
이 부분의 원문 →

내 최근 연습 오답

현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.

학습 기록 →

오답 기록을 확인하고 있습니다.