정보처리기사 필기

시험 직전 요약장

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

이론 목록

서브쿼리와 EXISTS·IN·ANY·ALL

원래 이론 →

판단 기준

ANY와 ALL은 각 비교 결과를 TRUE·FALSE·UNKNOWN으로 만든 뒤 양화 규칙을 적용한다.

연산TRUE를 확정하는 조건FALSE를 확정하는 조건UNKNOWN이 되는 조건
op ANY비교 중 TRUE가 하나 이상TRUE가 없고 모든 비교가 FALSE, 또는 빈 집합TRUE는 없고 UNKNOWN이 하나 이상
op ALL모든 비교가 TRUE, 또는 빈 집합비교 중 FALSE가 하나 이상FALSE는 없고 UNKNOWN이 하나 이상

기준 집합이 {60, 80, NULL}일 때 > 비교 결과는 다음과 같다.

xx > ANYx > ALL이유
50UNKNOWNFALSEANY에는 TRUE 없이 NULL 비교가 남고, ALL에는 60·80과의 FALSE가 있음
70TRUEFALSE60과의 TRUE가 ANY를 확정하고, 80과의 FALSE가 ALL을 확정
90TRUEUNKNOWNANY에는 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·ALL의 NULL과 빈 집합

ANY·ALL의 NULL과 빈 집합

빈 집합에서 ANY는 FALSE, ALL은 TRUE다. ANY는 TRUE가 하나라도 있으면 TRUE, ALL은 FALSE가 하나라도 있으면 FALSE다. 결정값이 없고 NULL 비교가 남으면 UNKNOWN이다. 나머지는 ANY=FALSE·ALL=TRUE다. WHERE는 TRUE만 통과시킨다.

이 부분의 원문 →

헷갈리는 개념

x IN (subquery)는 서브쿼리가 반환한 한 열의 값 중 x와 같은 값이 하나라도 있는지 판정한다. 서브쿼리는 0개 이상의 행을 반환할 수 있지만, 스칼라 왼쪽 식과 비교하는 기본 형태에서는 정확히 한 열을 반환해야 한다.

SQL
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·3·4를 반환한다. 배정 테이블에 직원 1이 두 번 있어도 IN의 TRUE·FALSE·UNKNOWN 판정은 달라지지 않는다.

구분EXISTSIN
묻는 질문조건을 만족하는 행이 존재하는가왼쪽 값이 결과 집합에 포함되는가
내부 출력값일반적으로 값 자체는 사용하지 않음비교할 한 열이 필요
중복 행존재 여부에 영향 없음포함 여부에 영향 없음
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이 모두 제거되어 우연히 같은 행 집합처럼 보일 수 있다.

이 부분의 원문 →

내 최근 연습 오답

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

학습 기록 →

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