포스트

.sql 이라고 다 같은 문법을 쓰지는 않는다?

대표적인 SQL 문법 차이 예시

예시 구문MS SQL Server (T-SQL)PostgreSQL (PL/pgSQL)
변수 선언DECLARE @id INTDECLARE id INT; (블록 안에서만)
조건문IF (@id IS NULL)IF id IS NULL THEN
프로시저CREATE PROCEDURECREATE FUNCTION or DO \(...\)
문자열 연결'Hello' + 'World'`'Hello'
현재 시각GETDATE()NOW()

그래서 파일 확장자가 .sql이어도 아래처럼 다름

DBMS확장자내부 문법
MS SQL Server.sqlT-SQL (Transact-SQL)@변수, BEGIN … END, SET NOCOUNT ON
PostgreSQL.sqlPL/pgSQL 또는 표준 SQLDO \(BEGIN ... END\);
MySQL.sqlMySQL SQLDELIMITER $$, @@session.time_zone 등
SQLite.sql순수 SQL 중심서브셋만 지원 (변수, 프로시저 없음)

실전 팁

작업권장
.sql 파일 공유할 때어떤 DB용인지 주석으로 명시 (– For PostgreSQL 등)
다른 DBMS로 옮길 때쿼리 문법 변환 필요 (자동 도구 또는 수동 변환)
Python에서 사용할 때PostgreSQL이나 SQLite가 더 직관적이고 간결함

결론 **

한 가지 db 문법만 알면 다른 db로 옮기는 건 자동 도구로 변환하면 된다! 참고로 표준 SQL을 쓰는 것은 PostgreSQL이다!


+참고) 파이썬에 더 잘 어울리는 db는? -> PostgreSQL

비교 요약: MS SQL vs PostgreSQL in Python

항목MS SQL (SQL Server)PostgreSQL
Python 라이브러리pyodbc, pymssqlpsycopg2, asyncpg, SQLAlchemy
ORM 호환성제한적 또는 번거로움SQLAlchemy 완전 지원, FastAPI/Pydantic과 자연스러움
문법T-SQL (약간 독자적)SQL 표준에 가깝고 Python 친화적
로직 이식성저장 프로시저/트리거 등은 Python에서 직접 다루기 어려움Python으로 로직을 옮기기 쉬움
Docker 연동복잡한 마운트 필요가볍고 설정 간단 (postgres:14 등)
권한/보안윈도 기반 로그인 등 복잡유닉스/도커/리눅스 기반에서 자연스러움

추천 상황

당신이 원하는 것추천 DB
Python에서 직접 로직 처리, FastAPI 등 백엔드 개발✅ PostgreSQL
기존 SSMS 기반의 앱 유지, Windows 환경 종속SQL Server 유지 가능
데이터 이전 계획 중PostgreSQL로 마이그레이션 고려해볼 가치 있음

=> 완전 새로 시작하는 상황이고, Windows 환경에 종속될 필요가 없으면 PostgreSQL로 시작하면 Python에서 직접 sql 로직을 처리할 수가 있어서 프로그래밍이 더 자유롭다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.