데이터 베이스 입력, 삭제, 수정, 조회(SQL)

inhak·2023년 9월 15일

데이터베이스

목록 보기
2/5

1. SQL(Structured Query Language)이란?

  • 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 관리하고 조작하는 표준화된 언어입니다.

2. SQL의 주요 명령어

  • CREATE: 테이블 생성
  • INSERT: 데이터 삽입
  • DELETE: 데이터 삭제
  • UPDATE: 데이터 수정
  • SELECT: 데이터 조회

3. SQL 실습

3.1. 테이블 생성(CREATE)

데이터베이스에 데이터를 테이블을 생성 하기 위해 CREATE 명령을 사용합니다.

3.1.1. SQL 문법

# SQL
CREATE TABLE 테이블명 (
    필드이름1 데이터타입 제약조건,
    필드이름2 데이터타입 제약조건,
    ...
);
  • CREATE TABLE: 새로운 테이블을 생성하기 위한 SQL 명령어
  • 테이블명: 생성할 테이블의 이름을 지정
  • 필드이름 (Column Name): 테이블의 각 열을 정의하는 이름
  • 데이터타입 (Data Type): 필드에 저장될 데이터의 유형을 지정
    • 주요 데이터 타입:
      • INTEGER: 정수 값.
      • REAL: 실수 값.
      • TEXT: 문자열 값.
      • BLOB: 이진 데이터(파일, 이미지 등).
      • DATE, DATETIME: 날짜와 시간.
    • 예: name TEXT, age INTEGER.
  • 제약조건 (Constraint): 필드에 적용할 규칙을 지정
    • 주요 제약조건:
      • PRIMARY KEY: 기본 키로, 필드 값이 고유하며 NULL일 수 없습니다.
      • AUTOINCREMENT: 숫자 필드가 자동으로 증가합니다(주로 PRIMARY KEY와 함께 사용).
      • NOT NULL: 필드가 NULL 값을 가질 수 없습니다.
      • UNIQUE: 필드 값이 고유해야 합니다.
      • DEFAULT: 기본값을 지정합니다.
      • FOREIGN KEY: 다른 테이블의 필드와 관계를 정의합니다.
    • 예: id INTEGER PRIMARY KEY AUTOINCREMENT, age INTEGER NOT NULL.

3.1.2.예제

# SQL
CREATE TABLE IF NOT EXISTS members (
    mem_id INTEGER PRIMARY KEY AUTOINCREMENT,
    mem_name TEXT NOT NULL,
    mem_age INTEGER
);
  • CREATE TABLE members: members 테이블을 생성
  • IF NOT EXISTS: 동일한 이름의 테이블이 이미 존재하면 테이블을 새로 생성하지 않도록 합니다.
  • mem_id INTEGER PRIMARY KEY AUTOINCREMENT: mem_id 필드는 고유 값으로 자동 증가합니다.
  • mem_name TEXT NOT NULL: mem_name 필드는 반드시 값을 가져야 합니다.
  • mem_age INTEGER: mem_age 필드는 정수를 허용하며, NULL 값을 가질 수 있습니다.

3.1.3. Python 코드

import sqlite3

# SQLite 데이터베이스 연결 (파일 이름: test.db)
con = sqlite3.connect("test.db")
cur = con.cursor()  # 커서 생성

# SQL 테이블 생성 명령어 작성
sql = """
CREATE TABLE IF NOT EXISTS members (
    mem_id INTEGER PRIMARY KEY AUTOINCREMENT,
    mem_name TEXT NOT NULL,
    mem_age INTEGER
);
"""

# SQL 명령어 실행
cur.execute(sql)

# 변경 사항 저장
con.commit()

# DB 연결 종료
con.close()

print("테이블 생성 완료")

3.1.4. Python 코드 설명

  • 데이터베이스 연결 및 커서 생성
    • sqlite3.connect("test.db"): 데이터베이스 파일과 연결하거나 없으면 새로 생성.
    • cur = con.cursor(): SQL 명령을 실행하기 위한 커서 객체를 생성.
  • SQL 작성 및 데이터 준비:
    • sql: 데이터 삽입을 위한 SQL 명령.
    • data: SQL 명령에 사용할 데이터(튜플 형태).
  • SQL 실행:
    • cur.execute(sql): SQL 문을 실행.
    • con.commit(): 변경 사항을 데이터베이스에 저장.
  • 데이터베이스 연결 종료:
    • con.close(): 데이터베이스 연결 해제.

3.2. 입력(INSERT)

데이터베이스에 데이터를 추가하기 위해 INSERT 명령을 사용합니다.

3.2.1. SQL 문법

INSERT INTO 테이블명 (필드이름1, 필드이름2, ...) VALUES (1,2, ...);
  • INSERT INTO: 데이터를 추가할 테이블을 지정.
  • 필드이름1, 필드이름2, ...: 값을 삽입할 테이블의 필드(열) 이름.
  • VALUES: 삽입할 실제 값들.

3.2.2. SQL 예제

테이블 members에 데이터를 추가:

INSERT INTO members (name, age) VALUES ('홍길동',150);
  • name 필드에 '홍길동'을 입력.
  • age 필드에 150을 입력.

3.2.3. Python 코드

import sqlite3

# SQLite 데이터베이스 연결
con = sqlite3.connect("test.db")  # test.db는 데이터베이스 파일 이름
cur = con.cursor()  # 커서 생성

# SQL INSERT 문 작성
sql = "INSERT INTO test_table (mem_name, mem_age) VALUES (?, ?)"
# SQL문에서 사용할 데이터 정의
data = ("홍길동", 150)

# SQL 실행
cur.execute(sql, data)

# 변경 사항 저장
con.commit()

# DB 연결 종료
con.close()

print("데이터 삽입 완료")

3.2.4. Python 코드 설명

  • 데이터베이스 연결 및 커서 생성
    • sqlite3.connect("test.db"): 데이터베이스 파일과 연결하거나 없으면 새로 생성.
    • cur = con.cursor(): SQL 명령을 실행하기 위한 커서 객체를 생성.
  • SQL 작성 및 데이터 준비:
    • sql: 데이터 삽입을 위한 SQL 명령.
    • data: SQL 명령에 사용할 데이터(튜플 형태).
  • SQL 실행:
    • cur.execute(sql, data): SQL 문에 데이터를 적용하여 실행.
    • con.commit(): 변경 사항을 데이터베이스에 저장.
  • 데이터베이스 연결 종료:
    • con.close(): 데이터베이스 연결 해제.

3.3. 삭제(DELETE)

데이터베이스에서 특정 조건에 맞는 데이터를 삭제하려면 DELETE 명령을 사용합니다.

3.3.1. SQL 문법

DELETE FROM 테이블 명 WHERE 조건
  • DELETE FROM: 데이터를 삭제할 테이블을 지정.
  • WHERE 조건: 삭제할 데이터를 필터링하는 조건. 조건이 없으면 테이블의 모든 데이터가 삭제됩니다.

3.3.2. SQL 예제

DELETE FROM members WHERE id = 1;
  • test_table에서 id1인 데이터를 삭제

3.3.3. Python 코드

import sqlite3

# 데이터베이스 연결
con = sqlite3.connect("test.db")  # test.db는 데이터베이스 파일 이름
cur = con.cursor()  # 커서 생성

# DELETE SQL 문 작성
sql = "DELETE FROM test_table WHERE mem_id = ?"
# 삭제할 데이터의 ID
delete_id = 1

# SQL 실행
cur.execute(sql, (delete_id,))

# 변경 사항 저장
con.commit()

# DB 연결 종료
con.close()

print("데이터 삭제 완료")
  • SQL 작성:
    • DELETE FROM members WHERE mem_id = ?: 삭제할 데이터의 조건을 지정.
    • ?: 삭제 조건의 값을 동적으로 지정할 수 있는 플레이스홀더.
  • SQL 실행
    • cur.execute(sql, (delete_id,)): delete_id 값을 SQL에 전달하여 삭제 명령 실행.
    • (delete_id,): sqlite3execute() 메서드는 SQL 쿼리의 파라미터를 튜플 또는 리스트 형태로 받아들입니다.

3.3.4. 주의 사항

  • 조건 없이 DELETE를 실행하면 전체 데이터가 삭제됩니다:
DELETE FROM members;
  • 이 명령은 테이블의 모든 데이터를 삭제하므로, 사용 시 매우 신중해야 합니다.
  • 데이터 삭제 후 COMMIT 명령을 실행하지 않으면 삭제가 적용되지 않을 수 있습니다.

3.4. 수정(UPDATE)

데이터베이스에서 특정 데이터의 값을 수정하려면 UPDATE 명령을 사용합니다.

3.4.1. SQL 문법

UPDATE 테이블명 SET 컬럼명1 = 새값1, 컬럼명2 = 새값2, ... WHERE 조건;
  • UPDATE 테이블명: 데이터를 수정할 테이블을 지정합니다.
  • SET: 수정할 열(column)과 새로운 값을 설정합니다.
  • WHERE 조건: 수정할 데이터를 필터링하는 조건을 지정합니다. 조건이 없으면 모든 데이터가 수정됩니다.

3.4.2. SQL 예제

UPDATE members SET mem_age = 43 WHERE mem_name = '홍길동';
  • members 테이블에서 mem_name'홍길동'인 데이터의 mem_age43으로 수정

3.4.3. Python 코드

import sqlite3

# SQLite 데이터베이스 연결
con = sqlite3.connect("test.db")  # test.db는 데이터베이스 파일 이름
cur = con.cursor()  # 커서 생성

# UPDATE SQL 문 작성
sql = "UPDATE members SET mem_age = ? WHERE mem_name = ?"

# 수정할 데이터 설정
input_age = 43
input_name = "홍길동"
data = (input_age, input_name)

# SQL 실행
cur.execute(sql, data)

# 변경 사항 저장
con.commit()

# DB 연결 종료
con.close()

print("데이터 수정 완료")

3.4.4. 주의사항

  • 조건이 없는 UPDATE 문은 모든 데이터가 수정되므로 사용 시 주의해야 합니다.

3.5. 조회(SELECT)

3.5.1. SQL 문법

데이터베이스에서 데이터를 조회할 때는 SELECT 명령을 사용합니다.

SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명 WHERE 조건;
  • SELECT: 가져올 데이터를 선택합니다.
  • 컬럼명: 조회할 열(column)을 지정합니다.
    • *는 모든 컬럼을 조회한다는 의미입니다.
  • FROM 테이블명: 데이터를 가져올 테이블을 지정합니다.
  • WHERE 조건: 데이터를 필터링하는 조건을 지정합니다. 조건이 없으면 모든 데이터가 조회됩니다.

3.5.2. SQL 예제

SELECT * FROM members WHERE mem_age > 10
  • members 테이블에서 mem_age가 10보다 큰 데이터를 모두 조회.

3.5.3. Python 코드

import sqlite3

# SQLite 데이터베이스 연결
con = sqlite3.connect("test.db")  # test.db는 데이터베이스 파일 이름
cur = con.cursor()  # 커서 생성

# SELECT SQL 작성
sql = "SELECT * FROM members WHERE mem_age > ?"

# 조건에 사용할 데이터 준비
age_filter = 10

# SQL 실행
cur.execute(sql, (age_filter,))

# 조회된 데이터 가져오기
test_data = cur.fetchall()

# DB 연결 해제
con.close()

# 조회 결과 출력
print("조회된 데이터:", test_data)
  • 조회 결과 가져오기:
    • cur.fetchall(): 조회된 모든 데이터를 리스트 형태로 반환합니다.
    • fetchone(): 첫 번째 결과만 반환.
    • fetchmany(size): 지정된 수의 결과를 반환.

0개의 댓글