SQLP
시험 직전 요약장
판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.
조인의 결과 의미: Inner·Outer·Semi·Anti Join과 NULL
원래 이론 →판단 기준
주문이 없는 고객을 찾는 흔한 표현은 다음과 같습니다.
SQL좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
SELECT c.customer_id
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.customer_id
WHERE o.order_id IS NULL;
여기서 o.order_id는 실제 Match 행에서 NULL이 될 수 없는 Key여야 합니다. Optional Table의 Nullable Column을 검사하면 실제로 Match한 행의 값이 NULL인 경우까지 미매칭으로 잘못 분류할 수 있습니다.
안전한 기준은 다음과 같습니다.
- Primary Key 또는
NOT NULLUnique Key - Join 성공 시 반드시 값이 존재하는 Column
- 업무적으로 NULL이 가능한 속성 Column은 미매칭 판별에 사용하지 않음
존재하지 않음을 직접 표현하려면 다음 NOT EXISTS도 명확합니다.
SQL좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
SELECT c.customer_id
FROM customers c
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.customer_id
);
두 표현을 변경할 때는 Join 조건, 추가 Predicate, NULL 가능성을 함께 비교합니다.
헷갈리는 개념
표를 좌우로 밀어 나머지 열을 확인하세요. 키보드: ←·→, Home·End
| 혼동하기 쉬운 판단 | 정확한 판단 |
|---|---|
| Left Join은 왼쪽 행을 한 번만 반환한다 | 오른쪽 Match 수만큼 반복되며 Match가 없을 때 최소 한 행을 보존한다 |
| Optional Table 조건은 ON과 WHERE 어디에 둬도 같다 | WHERE의 Null-Rejecting Predicate는 미매칭 행을 제거할 수 있다 |
LEFT JOIN ... nullable_col IS NULL은 항상 미매칭 탐지다 | 실제 Match 행의 Column도 NULL일 수 있어 NOT NULL Key를 사용해야 한다 |
JOIN + DISTINCT는 항상 EXISTS와 같다 | 오른쪽 Column·중복·집계·NULL 의미를 확인해야 한다 |
NOT IN과 NOT EXISTS는 항상 같다 | 안쪽과 바깥 Join Key의 NULL 가능성 때문에 결과가 달라질 수 있다 |
ANTI NA는 NULL을 무시한다 | NOT IN의 NULL 의미를 보존하기 위한 Null-Aware Operation이다 |
| Full Outer Join은 항상 한 가지 알고리즘으로 실행된다 | Native Hash 또는 변환된 Outer·Anti 구조가 가능하다 |
| Join Type이 정해지면 Join Method도 정해진다 | 같은 Join Type을 NL·Hash·Merge 등 여러 Method로 실행할 수 있다 |
| 높은 Constraint 신뢰도는 Outer Join을 불필요하게 만든다 | 이번 조회가 보존해야 할 행과 추가 Predicate까지 확인해야 한다 |
| 성능이 빨라지면 SQL 변경이 성공이다 | 보존 행·중복·NULL·집계 결과가 같아야 한다 |
대표 계산·예제
다음 데이터를 사용합니다.
내 최근 연습 오답
현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.
오답 기록을 확인하고 있습니다.