SQL 표준과 플랫폼 방언 (Dialect)
SQL에는 ANSI SQL이라는 국제 표준이 있다. 기본적인 CRUD, 조인, 집계 등은 어떤 관계형 DB에서든 거의 동일하게 동작한다.
-- 어디서든 동일하게 동작하는 표준 SQL
SELECT * FROM users WHERE age > 20;
CREATE TABLE users (id INT, name VARCHAR(100));
플랫폼마다 다른 것들
표준을 벗어나는 영역에서 **방언(dialect)**이 생긴다.
자동 증가 ID
- MySQL:
AUTO_INCREMENT - PostgreSQL:
SERIAL또는GENERATED ALWAYS AS IDENTITY - Oracle: 별도
SEQUENCE생성
문자열 함수
- MySQL/SQL Server:
SUBSTRING(str, 1, 3) - Oracle:
SUBSTR(str, 1, 3)
페이징
- MySQL/PostgreSQL:
LIMIT 10 OFFSET 20 - Oracle (구버전):
WHERE ROWNUM <= 10 - SQL Server:
FETCH FIRST 10 ROWS ONLY
고급 기능(JSON 처리, 윈도우 함수 세부 문법, 쿼리 힌트 등)으로 갈수록 플랫폼 간 차이가 커진다.
ORM과의 관계
what-is-orm|ORM이 "DB가 바뀌어도 코드를 거의 안 고쳐도 된다"는 장점을 제공하는 이유가 여기 있다. ORM은 내부적으로 각 플랫폼의 dialect를 알고, 메서드 호출을 해당 DB에 맞는 SQL로 번역해준다. Raw SQL을 직접 쓰면 DB를 교체할 때 방언 차이가 있는 쿼리들을 직접 수정해야 한다.