데이터베이스: 구조화된 데이터의 집합
DBMS: DB에 데이터 삽입, 조회, 수정, 삭제가 가능한 시스템
데이터베이스 = 테이블의 집합
테이블 = 행의 집합
행: 한 단위의 데이터 기록 = record
열: 데이터의 항목 = field
클라이언트 -SQL→ 서버(DBMS)
클라이언트 ←응답- 서버
데이터타입: integer, real(실수), text, null
데이터 정의 언어
CREATE TABLE 테이블명(컬럼명1 데이터타입, 컬럼명2 데이터타입);
데이터 뒤에 붙을 수 있는 제약조건
① primary key (기본키): 레코드를 구분짓는 값
② not null
③ default CREATE TABLE post(title text default('제목없음'))
④ unique: 중복 X
DROP TABLE 테이블명
ALTER TABLE 테이블명 RENAME TO 테이블명2
ALTER TABLE 테이블명 ADD COLUMN 컬럼명
RENAME COLUMN
DROP COLUMN
데이터 조작 언어
INSERT INTO 테이블명 (컬럼명1, 컬럼명2) VALUES (값1, 값2);
SELECT 컬럼명1, 컬럼명2 FROM 테이블명;
SELECT title, content FROM post WHERE id=3;
SELECT * FROM post WHERE title LIKE 'start%'
WHERE 뒤에
BETWEEN
IN
정렬
ORDER BY [ACS|DESC]
수정
UPDATE 테이블명 SET 컬럼명 = 값, … WHERE 조건식;
삭제
DELETE FROM 테이블명 WHERE 조건식;
COUNT()
AVG()
INNER JOIN
은 ,
로 쓸 수 있음
import sqlite3
# 데이터베이스 열기
conn = sqlite3.connect('a.db')
# 커서 생성
cur = conn.cursor()
# SQL 명령 작성
CREATE_SQL = """
CREATE TABLE IF NOT EXISTS Item(
id integer primary key autoincrement,
code text not null,
name text not null,
price integer not null
)
"""
# SQL 명령 실행
cur.execute(CREATE_SQL)
# 데이터베이스 닫기
conn.close()
conn = sqlite3.connect('a.db')
cur = conn.cursor()
INSERT_SQL = "INSERT INTO Item(code, name, price) VALUES (?, ?, ?)"
# 1개
cur.execute(INSERT_SQL, ('A00001', '가위', 3000))
# 여러개
data = {('A00002', '게이밍 마우스', 30000), ('A00003', '스마트폰', 900000)}
cur.executemany(INSERT_SQL, data)
conn.commit()
conn.close()
INSERT, UPDATE, DELETE는 commit 필요
conn = sqlite3.connect('a.db')
cur = conn.cursor()
SELECT_SQL = "SELECT * FROM Item LIMIT 2"
cur.execute(SELECT_SQL)
rows = cur.fetchall()
for row in rows:
print(row)
conn.close()