작성일자 : 2023-09-21
Ver 0.1.1
구문 기반식과 식 기반
CASE 식은 초보자들이 사용하기에 어려운 것도 사실이다. 단적인 이유는 SQL 초보자와 중급자 이상이 살고 있는 세계는 다르기 때문이다.
일반적으로 SQL 초보자는 절차 지향적인 세계에서 살고 있다. 이는 대부분 처음 배우는 프로그래밍 언어가 절차 지향형 프로그래밍 언어이기 때문이다. 그 세계에서 생각의 기본 단위는 ‘구문(statement)’이다.
하지만 SQL 중급자 이상은 선언적인 세계에서 살고 있다. 여기서 기본 단위는 ’식(expression)’이다. 이들 두 세계에서는 기본적인 생각의 쳬계(Scheme)가 다르다.
SQL 초보자가 UNION을 사용해 조건 분기를 하는 이유는 간단하다. UNION이라는 것 자체가 구문을 바탕으로 하는 절차 지향적인 체계를 사용하기 때문이다.
실제로 UNION을 연결하는 대상은 SELECT 구문이다.
따라서 절차지향형 프로그래밍 언어에 익숙한 사람들에게 굉장히 익숙한 방식인 것이다.
하지만 SQL의 기본적인 체계는 선언형이다. 이 세계의 주역은 ‘구문’이 아니라 ‘식’이다. 절차 지향형 언어가 CASE 구문으로 분기하는 것을 SQL은 CASE 식으로 분기한다. SQL 구문의 각 부분 (SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY)에 작성하는 것은 모두 식이다. 열 이름 또는 상수만 기술하는 경우에도 마찬가지 이다.
SQL 구문 내부에는 식을 작성하지, 구문을 작성하지는 않는다.
절차 지향형 세계에서 선언형 세계로 도약하는 것이 곧 SQL 능력 향상의 핵심이다.
요약
- SQL의 성능은 저장소의 I/O를 얼마나 감소시킬 수 있을지가 열쇠
- UNION에서 조건 분기를 표현한다면 “내가 지금 쓸데없이 길게 쓰고 있는 것은 아닐까? 라는 것을 항상 의식 할것
- IN 또는 CASE 식으로 조건 분기를 표현할 수 있다면, 테이블에의 스캔을 크게 감소시킬 가능성이 있음
- 이를 위해서라도, 구문에서 식으로 패러다임 전환을 연습