1. SQL 개요
1) SQL의 역사
- 유래: SEQUEL(Structured English Query Language) → SQL로 발전
- 연혁:
- 1974: IBM System R 관계형 DBMS 연구 중 개발
- 1986: ANSI에서 표준으로 채택(SQL-86)
- 1992~1999: 주요 개정 버전 등장 (SQL-92, SQL3 등)
- DBMS 호환성: Oracle, MySQL, MS SQL 등 다양한 DBMS에서 사용. 다소 차이 존재
2) SQL의 특징
- 자연어에 가까운 비절차적 언어
- 관계 대수와 해석보다 높은 표현력
- 표준화를 통해 DBMS 간 전환 용이
- 대화식 SQL과 내포된 SQL 지원
- 레코드 단위 처리
3) SQL의 수행
- SQL문 입력 → 관계 DBMS가 번역 후 처리 수행
- 데이터베이스 접근 인터페이스:
- 대화식 SQL: 최종 사용자 대상
- 내포된 SQL: 응용 프로그램에 삽입
4) SQL 구성 요소
- 데이터 정의어(DDL): 테이블/뷰/인덱스 생성 및 제거
- 데이터 조작어(DML): 데이터 검색, 삽입, 삭제, 갱신
- 데이터 제어어(DCL): 권한 부여, 트랜잭션 관리
2. 데이터 정의어(DDL)
1) 데이터 정의어의 종류
- CREATE: 테이블, 뷰, 도메인 생성
- DROP: 테이블, 뷰, 도메인 제거
- ALTER: 테이블 구조 변경
2) 스키마 생성 및 제거
- 스키마 생성:
CREATE SCHEMA MY_DB AUTHORIZATION KIM;
- 스키마 제거:
DROP SCHEMA MY_DB RESTRICT; DROP SCHEMA MY_DB CASCADE;
3) 테이블 생성
- 기본 형식:
CREATE TABLE 테이블_이름 ( 열_이름 데이터_형식 [NOT NULL | UNIQUE | DEFAULT | CHECK],
PRIMARY KEY (열_이름),
FOREIGN KEY (열_이름) REFERENCES 테이블_이름(열_이름)
); - 데이터 타입 (SQL-92):
- INTEGER, SMALLINT, REAL, FLOAT, CHAR, VARCHAR, DATE, BLOB 등
- 도메인 생성:
CREATE DOMAIN DEPTNAME CHAR(10) DEFAULT '개발' CONSTRAINT VALID_DEPT CHECK (VALUE IN ('영업', '총무', '기획', '개발'));
- 도메인 제거:
DROP DOMAIN DEPTNAME;
4) 테이블 제거(DROP)
- 형식:
DROP TABLE 테이블_이름 [RESTRICT | CASCADE];
5) 테이블 변경(ALTER)
- 열 추가:
ALTER TABLE 테이블_이름 ADD 열_이름 데이터_형식;
- 열 삭제:
ALTER TABLE 테이블_이름 DROP COLUMN 열_이름;
3. 무결성 제약조건
1) 주요 제약조건
- NOT NULL: 속성값이 반드시 존재해야 함.
- UNIQUE: 속성값이 유일하도록 보장.
- DEFAULT: 기본값 지정.
- CHECK: 속성값의 유효 범위 지정.
- PRIMARY KEY: 기본키 정의로 개체 무결성 보장.
- FOREIGN KEY: 참조 무결성 제약조건 정의.
2) 기본 예시
4. 테이블 생성 사례
- 학생, 과목, 수강 릴레이션:
- 학생 테이블:
CREATE TABLE STUDENT (
SNO INTEGER NOT NULL PRIMARY KEY,
SNAME CHAR(10)
); - 과목 테이블:
CREATE TABLE COURSE (
CNO CHAR(5) NOT NULL PRIMARY KEY,
CNAME CHAR(20)
); - 수강 테이블:
CREATE TABLE ENROLL (
SNO INTEGER,
CNO CHAR(5),
GRADE CHAR(2),
PRIMARY KEY (SNO, CNO),
FOREIGN KEY (SNO) REFERENCES STUDENT(SNO),
FOREIGN KEY (CNO) REFERENCES COURSE(CNO)
);
- 학생 테이블: