고객 데이터 다루기 · SQL 로 답 찾기 · 퀴즈
퀴즈: SQL 로 답 찾기
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
`SELECT * FROM customers WHERE id NOT IN (SELECT customer_id FROM orders);` 가 0건을 반환합니다. 가장 유력한 원인은?
- 서브쿼리에 NULL 이 있어 NOT IN 전체가 '알 수 없음' 이 됐다
- 실제로 모든 고객이 주문을 했다
- 인덱스가 없어 조용히 타임아웃됐다
- 서브쿼리 결과가 비어 있다
LEFT JOIN 결과에서 매칭이 없는 행에 대해 `COUNT(t.id)` 와 `COUNT(*)` 는 각각 무엇을 반환합니까?
- 두 집계 모두 0
- 두 집계 모두 1
- COUNT(t.id) 는 0, COUNT(*) 는 1
- COUNT(t.id) 는 1, COUNT(*) 는 0
왼쪽 테이블을 전부 보존하려고 LEFT JOIN 을 썼는데 결과가 INNER JOIN 과 같습니다. 원인은?
- 조인 키에 인덱스가 없어서
- LEFT JOIN 문법을 잘못 써서
- 오른쪽 테이블의 열 조건을 WHERE 절에 붙여 NULL 행이 전부 탈락해서
- 데이터에 실제로 매칭 없는 행이 없어서
CSV 를 sqlite 에 `.import` 로 적재한 뒤 `WHERE id = 1001` 이 0건을 반환합니다. 원인은?
- `.import` 는 모든 값을 TEXT 로 넣어서 저장된 것은 문자열 '1001' 이다
- id 열에 인덱스가 없다
- CSV 의 헤더 줄이 그대로 데이터 행으로 들어갔다
- id 가 실제로 존재하지 않는다
전체 티켓이 80건인데 `COUNT(closed_at)` 이 60 입니다. 무슨 뜻입니까?
- 티켓 60건만 조회됐다
- 20건이 삭제됐다
- 20건은 closed_at 이 NULL, 즉 아직 열려 있다
- closed_at 에 잘못된 값이 20건 있다
집계 결과를 고객에게 보고하기 전에 반드시 함께 확인할 것은?
- 그 쿼리의 실행 시간
- 분모 — 전체가 몇 건이고 그중 몇 건이 조건에 걸렸는지
- 대상 테이블의 전체 행 수와 크기
- 쿼리의 인덱스 사용 여부