SQLP
시험 직전 요약장
판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.
MERGE 정확성과 성능: Source 유일성·조건부 DML·DELETE WHERE
원래 이론 →판단 기준
SQL좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
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);
각 요소의 역할은 다음과 같습니다.
표를 좌우로 밀어 나머지 열을 확인하세요. 키보드: ←·→, Home·End
| 요소 | 역할 |
|---|---|
| Source | 비교할 Key와 변경할 값을 제공 |
| Target | 실제로 변경되는 Table 또는 수정 가능한 View |
ON | Source Row가 Match·Nonmatch 중 어느 Branch로 갈지 결정 |
WHEN MATCHED | Match Row에 Update를 수행할 후보 Branch |
WHEN NOT MATCHED | Match가 없는 Source Row에 Insert를 수행할 후보 Branch |
ON 조건은 단순한 사후 Filter가 아닙니다. 업무적으로 같은 Entity를 찾는 기준이며, 너무 좁거나 변동 가능한 속성을 포함하면 기존 Row를 Nonmatch로 잘못 분류할 수 있습니다.
예를 들어 Target의 CUSTOMER_ID가 Unique인데 ON 조건에 상태까지 포함하면, 같은 고객이 이미 존재해도 상태가 다르다는 이유로 Nonmatch가 되어 Insert를 시도하고 Unique 오류가 발생할 수 있습니다.
SQL좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
ON (t.customer_id = s.customer_id
AND t.status_cd = s.status_cd)
업무 식별 Key와 Branch Filter를 구분해야 합니다. 상태에 따라 Update 여부를 제한하려는 목적이라면 UPDATE WHERE 등 더 적합한 위치를 검토합니다.
헷갈리는 개념
SQL좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
WHERE t.grade <> s.grade
한쪽 값이 NULL이면 비교 결과가 UNKNOWN이 될 수 있어 변경을 놓칠 수 있습니다. 다음처럼 Data Type과 업무 규칙에 맞는 NULL-safe 조건을 사용합니다.
SQL좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
WHERE DECODE(t.grade, s.grade, 0, 1) = 1
또는 명시적으로 NULL 경우를 분리합니다.
SQL좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
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)
내 최근 연습 오답
현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.
오답 기록을 확인하고 있습니다.