2024-06-06 23:24:56

삽입 SQL의 개념과 특징

 지금까지 살펴본 SQL 문은 DBMS에 대화식으로 직접 입력하여 수행 결과를 바로 확인할 수 있지만, 응용 프로그램 안에 삽입해 사용할 수도 있다. C, C++, JAVA 등과 같은 프로그래밍 언어로 작성된 응용 프로그램 안에 삽입하여 사용하는 SQL 문을 삽입 SQL 이라 한다.

 

 일반 SQL 문과 달리 응용 프로그램에 삽입 SQL 문을 사용할 때는 다음과 같은 특징을 염두에 두어야 한다.

 

1. 삽입 SQL 문은 프로그램 안에서 일반 명령문이 위치할 수 있는 곳이면 어디든 삽입할 수 있다.

 

2. 프로그램 안의 일반 명령문과 구별하기 위해 삽입 SQL 문 앞에 EXEC SQL을 붙인다.

 

3. 프로그램에 선언된 일반 변수를 삽입 SQL 문에서 사용할 수 있다. 단, SQL 문에서 일반 변수를 사용할 때는 앞에 콜론(:)을 붙여 테이블 이름이나 속성의 이름과 구분한다.

 

 수행 결과로 여러 개의 행을 반환하는 SELECT 문을 삽입 SQL 문으로 사용하는 경우에는 커서(cursor)라는 도구가 필요하다. 커서는 수행 결과로 반환된 여러 행을 한 번에 하나씩 가리키는 포인터 역할을 한다. 프로그램에서는 SELECT 문의 수행 결과로 반환되는 여러 행을 한꺼번에 처리할 수 없으므로 커서를 이용해 한 번에 한 행씩 차례로 처리해야 한다.

 

 이 책에서는 커서가 필요 없는 삽입 SQL과 커서가 필요한 삽입 SQL 을 C 언어로 작성한 프로그램을 예로 들어 설명했다. 하지만 필자는 Python 언어를 주 언어로 사용하기 때문에 Python 프로그램에서 앞서 학습한 데이터를 출력하는 코드를 작성했다.

#라이브러리 선언
import pymysql

#데이터베이스 연결
conn = pymysql.connect(host = 'localhost', user = 'root', password = '패스워드_입력', db = 'DB_이름_입력', charset = 'utf8')

#커서 생성
curs = conn.cursor()

#SQL 문 실행
sql = 'select * from 테이블_이름'
curs.execute(sql)

#데이터 가져오기
data = curs.fetchall()
data[0]
data[1]

#연결 끊기
conn.close()

 

 학습에 사용한 테이블의 개수는 총 3개로 각각 고객, 제품, 주문 테이블이다. 따라서 각각의 테이블을 가리키는 커서가 3개 필요하다. 추가로 데이터를 행렬로 표현하기 위해 pandas 라이브러리를 사용하여 코드를 다시 작성해보았다.

#라이브러리 선언
import pymysql
import pandas as pd

#데이터베이스 연결
conn = pymysql.connect(host = 'localhost', user = 'root', password = '패스워드_입력', db = 'DB_이름_입력', charset = 'utf8')

#커서 생성
curs1 = conn.cursor()
curs2 = conn.cursor()
curs3 = conn.cursor()

#SQL 문 실행
sql1 = 'select * from 고객'
sql2 = 'select * from 제품'
sql3 = 'select * from 주문'
curs1.execute(sql1)
curs2.execute(sql2)
curs3.execute(sql3)

#데이터 가져오기
data1 = curs1.fetchall()
data2 = curs2.fetchall()
data3 = curs3.fetchall()

#고객 테이블 출력
df1 = pd.DataFrame(data1)
lables1 = ['고객아이디', '고객이름', '나이', '등급', '직업', '적립금']
df1.columns = lables1
df1

#제품 테이블 출력
df2 = pd.DataFrame(data2)
lables2 = ['제품번호', '제품명', '재고량', '단가', '제조업체']
df2.columns = lables2
df2

#주문 테이블 출력
df3 = pd.DataFrame(data3)
lables3 = ['주문번호', '주문고객', '주문제품', '수량', '배송지', '주문일자']
df3.columns = lables3
df3

 

 

고객 테이블 출력

 

제품 테이블 출력

 

주문 테이블 출력

 

'데이터베이스 > 데이터베이스 언어 SQL' 카테고리의 다른 글

  (0) 2024.06.06
SQL을 이용한 데이터 조작  (0) 2024.06.02
SQL을 이용한 데이터 정의  (0) 2024.06.01
SQL의 소개  (0) 2024.06.01