내장 SQL(고정 SQL, Embedded SQL)
- 내장 SQL은 개발 프로그래밍 언어 안에 SQL 문장을 고정 형식으로 입력하여 사용하는 방식
- SQL 문장과 프로그래밍 변수(파라미터)가 명확하게 연결되는 것이 특징
- 예시: Python의 psycopg2, Java의 JDBC 등에서 Prepared Statement 방식 사용
prepared_sql = ""“
SELECT username, age FROM users2 WHERE age BETWEEN %s AND %s;
""“
cur.execute(prepared_sql, (30, 40)) rows = cur.fetchall()
- %s 단어를 이용해 파라미터 반영 SQL 문은 고정되고 값만 변경함.
동적 SQL(Dynamic SQL)
- 동적 SQL은 SQL 문장을 언어 시간에 문자열 형식으로 만들어 시작 시 실행하는 방식을 말함.
- 유연성은 있지만 SQL Injection 가능성도 함께 있음.
age_min = 30
age_max = 40
dynamic_sql = f"""
SELECT username, age FROM users2 WHERE age BETWEEN {age_min} AND {age_max};
"""
cur.execute(dynamic_sql)
rows = cur.fetchall()
- SQL을 f-string 또는 +문자열 결합 구조로 만들고 시작 시 실행
내장 Vs. 동적 SQL

Python에서 내장 SQL, 동적 SQL 실행 비교
내장 sql
prepared_sql = """
SELECT u.username, u.age, o.amount, o.order_date FROM users2 u
JOIN orders o ON u.id = o.user_id
WHERE u.age BETWEEN %s AND %s
AND o.amount > %s;
"""
cur.execute(prepared_sql, (age_min, age_max, amount_threshold))
rows = cur.fetchall()
동적 sql
age_min = 30
age_max = 40
amount_threshold = 100
dynamic_sql = f"""
SELECT u.username, u.age, o.amount, o.order_date FROM users2 u
JOIN orders o ON u.id = o.user_id WHERE u.age BETWEEN {age_min} AND {age_max} AND o.amount > {amount_threshold};
"""
cur.execute(dynamic_sql) rows = cur.fetchall()
n=1일 때 실행 결과

n=500일 때 실행 결과

비교표
