SQL은 DBMS에 따라 각기 다른 방언(dialect)이 존재한다.
ANSI SQL(표준 SQL)을 기반으로 하지만, 기능, 문법, 내장 함수 등이 약간씩 다르다.
| DBMS | 주요 특징 | 주로 사용되는 곳 |
|---|---|---|
| MySQL | 오픈 소스, 가볍고 빠름 | 웹 개발 |
| PostgresSQL | 표준 SQL 준수율이 높고 확장성이 강하다 | 데이터 분석, GIS, 대규모 시스템 |
| Oracle | 안정성이 높고 기능이 풍부함 | 대기업, 금융, 정부기관 등 |
| SQL server (T-SQL) | Microsoft의 SQL | 윈도우 기반 기업 환경 |
| SQLite | 서버 없이 파일 기반 DB, 매우 경량 | 모바일 앱, 임베디드 시스템 |
| MariaDB | MySQL의 fork, 오픈 소스 유지 | MySQL 대체용 |
| IBM Db2 | 메인 프레임 및 대기업 시스템용 | 금융/보험, 레거시 시스템 |
| Amazon Redshift / Google BigQuery | 클라우드 기반, 대용량 데이터 분석 | 데이터 웨어하우스 |
| Snowflake SQL | 완전 클라우드 기반, 높은 확장성 | 데이터 레이크, BI 분석 |
백준에서는 MySQL과 Oracle로 SQL 코딩테스트 문제를 풀게 되어 있으므로 이 둘을 비교해보자.
| MySQL | Oracle | |
|---|---|---|
| 문자열 연결 | CONCAT('a', 'b') | 'a' || 'b' |
| 자동 증가 키 | AUTO_INCREMENT | SEQUENCE + TRIGGER or IDENTITY (12c 이후) |
| 현재 날짜/시간 | NOW() or CURRENT_TIMESTAMP | SYSDATE or SYSTIMESTAMP |
| Top n query | LIMIT n | 서브쿼리 + WHERE ROWNUM <= n, FETCH FIRST n ROWS ONLY (12c 이후) |
| 이중 따옴표 " 처리 | 문자열 | 컬럼/식별자 |
| 서브쿼리 별칭 | AS 생략 가능 | AS 생략 가능하지만 일부 구문에서 필수 |
| NULL 처리 | IFNULL(exp1, exp2) | NVL(exp1, exp2) |
| 조건문 (CASE 대체) | IF(exp, val1, val2) | DECODE(A, B, X, Y)* |
| 데이터형 | INT, VARCHAR, TEXT, DATETIME 등 | NUMBER, VARCHAR2, CLOB, DATE 등 |
| BOOLEAN 타입 | 없음(TINYINT(1)로 대체) | 없음(숫자나 CHAR로 처리) |
| AUTO COMMIT | O | X (명시적인 COMMIT 필요) |
* DECODE(A, B, X, Y) : A=B이면 X를 출력, A≠B이면 Y를 출력