Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

파이썬 스크립트

SQLite 튜토리얼: Oracle 개발자를 위한 핵심 차이점 정리

Billcorea 2026. 6. 30. 18:58

SQLite 튜토리얼: Oracle 개발자를 위한 핵심 차이점 정리

sqlite

 

SQLite는 가볍고 단순한 구조 덕분에 다양한 환경에서 널리 쓰입니다. 하지만 Oracle SQL에 익숙한 개발자라면 몇 가지 문법 차이 때문에 혼란스러울 수 있습니다. 이번 튜토리얼에서는 WITH 절, DECODE 함수, ROWNUM, 버전 확인, OUTER JOIN을 중심으로 살펴봅니다.

1. WITH 절 (CTE)

SQLite에서도 공통 테이블 표현식(CTE)를 지원합니다.

sql
WITH recent_orders AS (
  SELECT *
  FROM orders
  WHERE order_date > '2026-01-01'
)
SELECT customer_id, COUNT(*)
FROM recent_orders
GROUP BY customer_id;

👉 Oracle과 거의 동일하게 사용할 수 있습니다.

2. DECODE 함수 대체

Oracle의 DECODE는 SQLite에 없습니다. 대신 CASE 문을 사용하세요.

sql
SELECT 
  CASE status
    WHEN 'A' THEN 'Active'
    WHEN 'I' THEN 'Inactive'
    ELSE 'Unknown'
  END AS status_text
FROM users;

👉 CASE 문이 더 범용적이고 가독성도 좋습니다.

3. ROWNUM 대신 쓰는 방법

SQLite에는 ROWNUM이 없습니다. 대신 두 가지 방법을 씁니다.

(1) LIMIT / OFFSET

sql
SELECT *
FROM users
LIMIT 10 OFFSET 20;  -- 21번째 행부터 10개

(2) ROW_NUMBER() 윈도우 함수

sql
SELECT ROW_NUMBER() OVER (ORDER BY id) AS rn, name
FROM users;

👉 SQLite 3.25.0 이상에서 지원됩니다.

4. SQLite 버전 확인

버전 확인은 간단합니다.

  • SQL 쿼리:
  • sql
    SELECT sqlite_version();
    
  • CLI:
  • bash
    sqlite3 --version
    
  • Python:
  • python
    import sqlite3
    print(sqlite3.sqlite_version)
    

5. OUTER JOIN

SQLite는 LEFT OUTER JOIN만 지원합니다.

sql
SELECT u.id, u.name, o.order_date
FROM users u
LEFT OUTER JOIN orders o
  ON u.id = o.user_id;
  • RIGHT OUTER JOIN → 테이블 순서를 바꿔서 LEFT JOIN으로 대체
  • FULL OUTER JOIN → LEFT JOIN과 RIGHT JOIN을 UNION으로 합쳐서 구현

마무리

Oracle에서 SQLite로 넘어올 때 가장 많이 부딪히는 차이점들을 정리했습니다.

  • WITH 절은 그대로 사용 가능
  • DECODE는 CASE로 대체
  • ROWNUM은 LIMIT/OFFSET 또는 ROW_NUMBER()
  • 버전 확인은 sqlite_version()
  • OUTER JOIN은 LEFT만 지원, FULL은 UNION으로 구현

👉 이 튜토리얼을 따라가면 Oracle 개발자도 SQLite 환경에서 빠르게 적응할 수 있습니다.

반응형