27번 문제는
- 부등호 조건과 NULL 의 특성 및 조인에 대한 이해를 묻는 문제입니다.
- NULL 은 비교 자체가 불가하여 비교식에 사용되면 결과는 항상 거짓(False)이 됩니다.
- 따라서 NULL 을 제외한 행끼리 v1 이 다른 것을 연결하면 됩니다.
- A 에는 B 가 붙어서 a.n1 은 1
- B 에는 A 가 붙어서 a.n1 은 3
- C 에는 A,B 가 연결되어 2행이 되네요. a.n1 은 4 가 2개
- 1 + 3 + 4 + 4 = 12
17번 문제는
- 조건절에 대한 이해, 집계함수에 대한 이해를 묻는 문제입니다.
- 조건절은 (컬럼 = 값) 형태의 조건만 오는게 아닙니다.
- true/false 를 판별할 수 있는 어떤 형태의 조건이든 올 수 있습니다.
- 1=2 는 무조건 거짓인 조건이므로 반환되는 행이 없게 됩니다. 0 Row
- 만약 1=1 했다면 모든 행이 반환되겠네요.
- 0 Row 일때 COUNT(*) 의 값은 0 이 나옵니다. NULL 이 나오는게 아닙니다.
- NVL 은 null 이 나온다고 생각하게 만들어 오답을 유도하는 Fake 입니다.
22번 문제는
- 단순히 특정 함수에 대해 알고 있는지에 대한 문제입니다. 거기에 Null 의 특징도 알아야 하겠네요.
- Coalesce 는 순서대로 널을 대체하는 함수입니다.
- Null 은 비교식에서 거짓을 리턴할 뿐만 아니라, 계산식에서도 NULL 을 반환합니다.
- 1행 : Coalesce(100, 100*50, 50) = 첫번째 값(100)
- 2행 : Coalesce(NULL, 60*50, 50) = 첫번째 값이 널이므로 두번째 값(3000)
- 3행 : Coalesce(NULL, NULL*50, 50) = 첫번째 값, 두번째 값이 널이므로 세번째 값(50)
- 이게 단순한 문제인데도 불구하고 지속적으로 질문이 많이 올라오는 걸 보면
- Coalesce 가 단일행 함수라서 각 행마다 계산되는 것인데.
- 아마도 여러행에 대한 집계함수로 착각해서 어려워하는게 아닐까? 생각되네요.
- 보기가 3행이 나오는 형태가 아닌, 컴마로 구분하여 나온것도 헷갈리게 하는 요소네요.