본문 바로가기

Programming/데이터 베이스

SQL 개요와 데이터 정의어

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 구성 요소

  1. 데이터 정의어(DDL): 테이블/뷰/인덱스 생성 및 제거
  2. 데이터 조작어(DML): 데이터 검색, 삽입, 삭제, 갱신
  3. 데이터 제어어(DCL): 권한 부여, 트랜잭션 관리

SQL의 구성요소


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)
      );