SQL 실전 · 조회와 필터 · 퀴즈
퀴즈: 조회와 필터
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
city = '서울' 인 행이 48개, city <> '서울' 인 행이 335개인데 전체는 400개다. 나머지 17개는?
- city 가 빈 문자열('')인 행
- 양쪽에 중복으로 세어진 행
- 인덱스에서 누락된 행
- city 가 NULL 인 행 (양쪽 조건 어디에도 걸리지 않는다)
NULL 을 포함해 '서울이 아닌 모든 행'을 고르려면?
- WHERE city <> '서울'
- WHERE NOT city = '서울'
- WHERE city NOT IN ('서울')
- WHERE city IS DISTINCT FROM '서울'
NOT IN 목록에 NULL 이 하나라도 들어 있으면 어떻게 되는가?
- NULL 은 무시되고 나머지로 비교된다
- 오류가 발생한다
- 결과가 한 행도 나오지 않는다
- NULL 인 행만 반환된다
CASE WHEN 을 여러 개 나열할 때 주의할 점은?
- 모든 조건이 평가되어 마지막 것이 이긴다
- 위에서부터 처음 참인 가지가 선택되므로 순서가 곧 우선순위다
- 조건이 겹치면 오류가 발생한다
- ELSE 는 생략할 수 없다
ORDER BY created_at DESC 만으로 페이지네이션할 때 생길 수 있는 문제는?
- 두 번째 페이지부터는 정렬이 아예 적용되지 않는다
- created_at 이 같은 행들의 순서가 보장되지 않아 페이지 사이에서 중복이나 누락이 생긴다
- OFFSET 절을 함께 쓸 수 없게 된다
- 정렬 컬럼의 인덱스를 쓸 수 없다
OFFSET 방식 페이지네이션이 뒷 페이지로 갈수록 느려지는 이유는?
- 정렬을 매번 다시 하기 때문
- 인덱스가 뒤쪽 값을 담지 않기 때문
- 건너뛸 행을 실제로 읽고 버려야 하기 때문
- 네트워크 전송량이 늘기 때문