안녕하세요. 전산실에서 근무하며 매일 데이터를 다루는 전산직입니다.
개발이나 DB 관리를 하다 보면 메인으로 쓰는 오라클(Oracle) 외에, 특정 솔루션 때문에 MS-SQL(SQL Server)을 만져야 할 때가 있습니다.
그런데 분명 둘 다 'SQL'이라는 같은 언어를 쓰는데, 막상 쿼리를 날려보면 에러가 납니다. "오라클에선 NVL이 되는데 MS-SQL은 왜 안 돼?" "날짜 포맷은 왜 또 달라?"
이런 의문, 한 번쯤 가져보셨을 겁니다. 오늘은 도대체 왜 두 DB의 문법이 다른지 그 근본적인 이유부터, 실무에서 가장 자주 틀리는 핵심 문법 차이까지 한 방에 정리해 드립니다.

1. SQL이란 무엇인가? (표준의 존재)
먼저 SQL(Structured Query Language)은 데이터베이스와 대화하기 위해 만들어진 '표준 언어'입니다. 마치 전 세계 공용어인 영어처럼요.
미국 국립 표준 협회(ANSI)에서는 "모든 DB는 이 문법을 따라라"라고 정해둔 규칙이 있는데, 이를 'ANSI SQL(표준 SQL)'이라고 합니다.
- SELECT, FROM, WHERE, JOIN 같은 기본적인 뼈대는 이 표준을 따르기 때문에 어떤 DB든 똑같습니다.
❓ 그럼 왜 문법이 다를까? (방언의 탄생)
문제는 DB를 만드는 회사들(오라클, 마이크로소프트)의 경쟁 때문입니다. 표준만 지키면 기능이 너무 밋밋하니까, 각 회사가 자기들만의 '편리하고 강력한 독자 기능'을 추가하기 시작했습니다.
이것을 'SQL 방언(Dialect)'이라고 부릅니다. 마치 한국어(표준어)가 있지만, 제주도 사투리와 경상도 사투리가 서로 다른 것과 똑같습니다.
- 오라클(Oracle): 표준 SQL에 'PL/SQL'이라는 강력한 자체 언어를 섞어서 씁니다. (예: DECODE, NVL)
- MS-SQL(Microsoft): 표준 SQL에 'T-SQL'이라는 자체 언어를 확장해서 씁니다. (예: TOP, ISNULL)
결국 우리는 "표준어(ANSI SQL)"와 "각 회사의 사투리"를 섞어서 쓰고 있었던 셈입니다. 우리가 헷갈리는 건 바로 이 '사투리' 부분 때문이죠.
2. 오라클 vs MS-SQL, 운영 환경의 차이 (개발자 상식)
문법 차이를 알아보기 전에, 두 DB가 주로 사용되는 환경을 알면 이해가 빠릅니다.
1) 오라클 (Oracle)
- 특징: 대용량 데이터 처리에 매우 강력하며, 안정성이 뛰어납니다.
- 주 사용처: 금융권, 대기업, 관공서, 대학병원 등 '절대 죽으면 안 되는' 핵심 시스템(Mission Critical)에서 주로 씁니다.
- 비용: 라이선스 비용이 매우 비쌉니다. (전산실 예산의 주범이죠.)
2) MS-SQL (SQL Server)
- 특징: 마이크로소프트가 만든 만큼 Windows OS와의 호환성이 끝판왕입니다. GUI(관리 도구)가 매우 편리해서 초보자가 접근하기 좋습니다.
- 주 사용처: 중견기업, 웹 서비스, .NET 기반의 개발 환경에서 많이 씁니다.
- 비용: 오라클보다는 저렴하며, 윈도우 서버와 패키지로 도입하는 경우가 많습니다.
3. 실무에서 가장 많이 틀리는 문법 차이 BEST 5
배경을 알았으니, 이제 실무에서 우리를 괴롭히는 결정적인 차이점들을 비교해 보겠습니다. (이 부분은 즐겨찾기 해두고 필요할 때마다 보세요!)
① NULL 처리 (NVL vs ISNULL)
데이터 조회 시 NULL 값을 0이나 공백으로 바꿀 때 쓰는 함수입니다. 가장 기본인데 가장 많이 틀립니다.
- 오라클: NVL(컬럼, 0)
- MS-SQL: ISNULL(컬럼, 0)
- (참고: 표준 ANSI 문법인 COALESCE를 쓰면 둘 다 통합니다!)
② 현재 날짜와 시간 (SYSDATE vs GETDATE)
로그를 남길 때 필수인 현재 시간 함수입니다.
- 오라클: SYSDATE (반드시 FROM DUAL이 필요함)
- MS-SQL: GETDATE() (그냥 이것만 써도 됨)
③ 날짜 포맷 변환 (가장 복잡함!)
날짜를 'YYYY-MM-DD' 문자열로 바꿀 때입니다.
- 오라클: TO_CHAR(SYSDATE, 'YYYY-MM-DD')
- 직관적입니다. 포맷을 문자로 적으면 됩니다.
- MS-SQL: CONVERT(VARCHAR, GETDATE(), 23)
- 마이크로소프트는 고유의 '스타일 번호'를 씁니다.
- 23: YYYY-MM-DD
- 120: YYYY-MM-DD HH:MI:SS (제일 많이 씀)
- MS-SQL 2012부터는 오라클의 TO_CHAR와 거의 똑같은 FORMAT(GETDATE(), 'yyyy-MM-dd') 함수가 생겼습니다.
④ 문자열 합치기 (|| vs +)
이름과 직급을 합쳐서 보여줄 때입니다.
- 오라클: 이름 || 직급 (파이프라인 기호 2개)
- MS-SQL: 이름 + 직급 (더하기 기호)
- 주의: MS-SQL에서 숫자가 섞여 있으면 덧셈 연산이 될 수 있습니다.
- 더 무서운 건 "하나라도 NULL이면 결과가 전체 NULL이 된다"는 점입니다.
⑤ 상위 N개 데이터만 조회 (ROWNUM vs TOP)
"최신 글 5개만 가져와" 같은 쿼리를 짤 때 차이가 큽니다.
- MS-SQL: SELECT TOP 5 * FROM BOARD (아주 직관적이고 편함)
- 오라클: SELECT * FROM BOARD WHERE ROWNUM <= 5
- 오라클은 TOP이 없습니다. ROWNUM이라는 가상 컬럼을 써야 하는데, 정렬(ORDER BY)과 함께 쓰려면 서브쿼리를 써야 해서 꽤 복잡해집니다.
- 과거엔 ROWNUM이 필수였지만, 최신 버전(12c 이상)부터는 FETCH FIRST 5 ROWS ONLY라는 아주 편한 문법이 생겼습니다.
4. 자주 만나는 에러 메시지 비교 (트러블 슈팅)
쿼리를 잘못 짰을 때 나오는 에러 메시지도 다릅니다. 이걸 알아두면 구글링할 때 편합니다.
- 테이블이 없을 때:
- Oracle: ORA-00942: table or view does not exist
- MS-SQL: Invalid object name '테이블명'.
- 컬럼명이 틀렸을 때:
- Oracle: ORA-00904: invalid identifier
- MS-SQL: Invalid column name '컬럼명'.
5. 한눈에 보는 요약표 (Cheat Sheet) 📋
바쁘신 분들은 이 표 하나만 캡처해 두시면 됩니다.
| 구분 | 오라클 (Oracle) | MS-SQL (SQL Server) |
| 언어(방언) | PL/SQL | T-SQL |
| NULL 처리 | NVL | ISNULL |
| 현재 시간 | SYSDATE | GETDATE() |
| 날짜 변환 | TO_CHAR | CONVERT |
| 문자열 연결 | || | + |
| 상위 N개 | WHERE ROWNUM <= N | SELECT TOP N |
| 가상 테이블 | FROM DUAL 필수 | 생략 가능 |
마치며: 둘 다 잘하는 개발자가 되려면?
결국 오라클과 MS-SQL은 "같은 뿌리(ANSI SQL)에서 나온 다른 형제"입니다. 처음엔 문법 차이가 짜증 나겠지만, "왜 다를까?"를 이해하고 나면 오히려 각 DB의 특징을 활용해서 더 효율적인 쿼리를 짤 수 있습니다.
특히 표준 문법(ANSI SQL)을 위주로 쿼리를 짜는 습관을 들이면, DB가 바뀌어도 코드 수정을 최소화할 수 있다는 점, 꼭 기억해 주세요!
이 글이 두 DB 사이에서 방황하는 분들에게 작은 나침반이 되길 바랍니다.
[함께 보면 좋은 글]
2025.11.25 - [IT & TECH/개발기록] - [프로젝트] PC 자산관리 프로그램 개발기 #1 : 엑셀 & 파워빌더(CS)를 넘어 웹(Web)으로 가는 도전
[프로젝트] PC 자산관리 프로그램 개발기 #1 : 엑셀 & 파워빌더(CS)를 넘어 웹(Web)으로 가는 도전
그동안 저는 사내의 수백 대가 넘는 PC와 장비들을 엑셀(Excel) 하나로 관리해 왔습니다. 물론 엑셀은 인류가 만든 가장 위대한 도구 중 하나입니다. 하지만 데이터가 쌓이고 관리해야 할 자산이
codenplay.tistory.com
'IT & TECH > 팁(Tip)' 카테고리의 다른 글
| [업무 효율] "마우스 휠 돌리다 손목 나간다..." 웹 서핑 속도 3배 올리는 브라우저(크롬/엣지) 단축키 BEST 5 (0) | 2025.12.31 |
|---|---|
| [IT 상식] 윈도우 라이선스 종류 & 기업용 인증(MAK/KMS) 완벽 정리 (1) | 2025.12.26 |
| [IT 트러블슈팅] 윈도우 계정 이름 바꿨는데, 원격 데스크톱(RDP) 접속이 안 된다면? (원인 및 해결) (0) | 2025.12.22 |
| [업무 효율] "복붙만 잘해도 퇴근이 빨라진다" 윈도우 단축키 BEST 5 (클립보드/보안 편) (1) | 2025.12.17 |
| [오류 해결] Office 설치 중 Error 1935, 0x80131049, fsutil/Repair Tool로 해결 안 될 때 (범인은 기본 앱 충돌) (0) | 2025.12.12 |