정보처리기사 필기
시험 직전 요약장
판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.
서브쿼리와 EXISTS·IN·ANY·ALL
원래 이론 →판단 기준
ANY와 ALL은 각 비교 결과를 TRUE·
| 연산 | TRUE를 확정하는 조건 | FALSE를 확정하는 조건 | UNKNOWN이 되는 조건 |
|---|---|---|---|
op ANY | 비교 중 TRUE가 하나 이상 | TRUE가 없고 모든 비교가 FALSE, 또는 빈 집합 | TRUE는 없고 UNKNOWN이 하나 이상 |
op ALL | 모든 비교가 TRUE, 또는 빈 집합 | 비교 중 FALSE가 하나 이상 | FALSE는 없고 UNKNOWN이 하나 이상 |
기준 집합이 {60, 80, NULL}일 때 > 비교 결과는 다음과 같다.
x | x > ANY | x > ALL | 이유 |
|---|---|---|---|
| 50 | UNKNOWN | FALSE | ANY에는 TRUE 없이 NULL 비교가 남고, ALL에는 60·80과의 FALSE가 있음 |
| 70 | TRUE | FALSE | 60과의 TRUE가 ANY를 확정하고, 80과의 FALSE가 ALL을 확정 |
| 90 | TRUE | UNKNOWN | ANY에는 TRUE가 있고, ALL에는 FALSE 없이 NULL 비교가 남음 |
빈 집합은 비교할 행이 하나도 없는 경우다.
70 > ANY(empty set) → FALSE
70 > ALL(empty set) → TRUE
ANY는 TRUE를 만들어 줄 대상이 하나도 없으므로 FALSE다. ALL은 조건을 깨뜨리는 반례가 하나도 없으므로 TRUE다. 같은 원리로 빈 집합에 대한 IN은 FALSE, NOT IN은 TRUE, EXISTS는 FALSE, NOT EXISTS는 TRUE다.
NULL이 들어 있는 문제에서는 최종 조건이 UNKNOWN인지 반드시 확인한다. WHERE와 HAVING은 TRUE인 행이나 그룹만 남기므로 UNKNOWN은 FALSE처럼 결과에서 제외되지만, 불리언 식 자체의 값은 FALSE와 다르다.
ANY·
빈 집합에서 ANY는 FALSE, ALL은 TRUE다. ANY는 TRUE가 하나라도 있으면 TRUE, ALL은 FALSE가 하나라도 있으면 FALSE다. 결정값이 없고 NULL 비교가 남으면 UNKNOWN이다. 나머지는 ANY=FALSE·
헷갈리는 개념
x IN (subquery)는 서브쿼리가 반환한 한 열의 값 중 x와 같은 값이 하나라도 있는지 판정한다. 서브쿼리는 0개 이상의 행을 반환할 수 있지만, 스칼라 왼쪽 식과 비교하는 기본 형태에서는 정확히 한 열을 반환해야 한다.
SELECT e.employee_id, e.employee_name
FROM employee AS e
WHERE e.employee_id IN (
SELECT a.employee_id
FROM assignment AS a
)
ORDER BY e.employee_id;
이 예제에서는 employee_id가 양쪽에서 NULL이 아니므로 앞의 EXISTS 질의와 같은 직원 1·
| 구분 | EXISTS | IN |
|---|---|---|
| 묻는 질문 | 조건을 만족하는 행이 존재하는가 | 왼쪽 값이 결과 집합에 포함되는가 |
| 내부 출력값 | 일반적으로 값 자체는 사용하지 않음 | 비교할 한 열이 필요 |
| 중복 행 | 존재 여부에 영향 없음 | 포함 여부에 영향 없음 |
| NULL의 핵심 | 행이 있으면 선택값이 NULL이어도 TRUE | 일치값이 없고 집합에 NULL이 있으면 UNKNOWN 가능 |
| 흔한 형태 | 상관 서브쿼리 | 비상관 또는 상관 서브쿼리 모두 가능 |
IN은 = ANY와 같은 양화 의미를 갖는다. 결과 집합 S에 대해 다음처럼 읽는다.
x IN S ↔ x = ANY S ↔ S 안에 x와 같은 값이 적어도 하나 있다
다만 EXISTS와 IN이 비슷한 행을 반환하는 사례가 많다고 해서 언제나 같은 불리언 값을 갖는 것은 아니다. 특히 NULL이 관여하면 IN은 UNKNOWN이 될 수 있지만, EXISTS는 조건을 만족하는 행이 없으면 FALSE다. WHERE에서는 FALSE와 UNKNOWN이 모두 제거되어 우연히 같은 행 집합처럼 보일 수 있다.
내 최근 연습 오답
현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.
오답 기록을 확인하고 있습니다.