Skip to content

쿼리 작성 ​

이 대주제는 SQL을 쓰는 쪽에서 알아야 할 것을 다룬다. 같은 결과를 원해도 문장을 어떻게 쓰느냐에 따라 결과가 조용히 틀어지거나, 인덱스를 못 타거나, 운영 중인 테이블을 멈추게 할 수 있다. 인덱스와 옵티마이저(optimizer)가 속에서 어떻게 움직이는지는 다른 대주제에서 보고, 여기서는 조회 문장, 조인(join) 문장, 쿼리 안에 쿼리를 넣는 서브쿼리(subquery), 데이터를 바꾸는 문장, 테이블 구조를 바꾸는 DDL(Data Definition Language, 데이터 정의어) 문장을 틀리지 않게 쓰는 법과 운영 중에 실행 상태를 확인하는 법을 본다.

학습 순서 ​

  1. SELECT 작성과 처리 순서 — 절이 실행되는 논리적 순서, 인덱스를 못 쓰게 만드는 비교 조건, NULL 비교 (면접 비중: 높음)
  2. SELECT 작성과 처리 순서 2 — DISTINCT·COUNT·LIMIT의 함정, SQL 모드(SQL mode), 이름의 대소문자·예약어 규칙 (면접 비중: 높음)
  3. 조인 종류와 작성 — INNER·OUTER·CROSS·셀프 조인(self join)이 남기는 행, FULL OUTER JOIN 대체 (면접 비중: 높음)
  4. 조인 종류와 작성 2 — ON과 WHERE의 차이, 외부 조인(outer join) 뒤 집계, 안티 조인(anti-join)·세미 조인(semi-join) 작성법 (면접 비중: 높음)
  5. 서브쿼리·CTE·윈도우 함수 — 서브쿼리 위치별 종류, IN과 EXISTS, NOT IN의 NULL 함정, 상관 서브쿼리(correlated subquery) (면접 비중: 중간)
  6. 서브쿼리·CTE·윈도우 함수 2 — CTE(Common Table Expression, 공통 테이블 식)와 재귀 CTE(recursive CTE)로 계층 펼치기 (면접 비중: 중간)
  7. 서브쿼리·CTE·윈도우 함수 3 — 윈도우 함수(window function)로 순위·이전 행·누적합 구하기 (면접 비중: 중간)
  8. INSERT·UPDATE·DELETE 고급 — INSERT IGNORE·ON DUPLICATE KEY UPDATE·REPLACE 차이, 대량 적재(bulk load) (면접 비중: 중간)
  9. INSERT·UPDATE·DELETE 고급 2 — ORDER BY·LIMIT으로 나눠 지우기, 조인 UPDATE·DELETE, 여러 행을 서로 다른 값으로 고치기 (면접 비중: 중간)
  10. 온라인 DDL — ALGORITHM(INSTANT·INPLACE·COPY)과 LOCK 옵션, 작업별 비용 (면접 비중: 높음)
  11. 온라인 DDL 2 — MySQL 8.4에서 칼럼을 즉시 추가·삭제할 수 있는 조건, 여러 변경 묶기, 메타데이터 락(metadata lock) 대기 (면접 비중: 높음)
  12. 온라인 DDL 3 — 실행 중인 쿼리와 열린 트랜잭션(transaction) 조회 (면접 비중: 높음)
  13. 온라인 DDL 4 — 잠금 대기 조회와 KILL, ALTER 진행률 확인 (면접 비중: 높음)