SQL

SQL 소개

SQL 은 Structured Query Language 의 약자로, RDBMS 데이터 관리를 위해 관계대수에 이론적 기초를 두고 설계된 언어이다. 한글로 하면 “구조적 질의 언어” 정도로 번역할 수 있다.

번거로운 절차를 명시하지 않는 비절차적(선언형) 언어이기 때문에 명료하고 읽기 쉽다. 더불어 인간의 언어와 유사한 구조 덕분에 작성하기도 쉽다는 특징을 가지고 있다.

SQL은 ISO에서 제정된 표준이 있으며, 여러 상용 DBMS들은 이러한 표준에 더해 자신들만의 기능을 확장해왔다. 바꿔 말하면 상용 DBMS의 종류는 다양하지만, 표준을 잘 알고 있다면 종류에 상관 없이 사용법을 빠르게 익힐 수 있다.

SQL 의 세부 종류

SQL의 종류 Full Name 설명
DDL Data Definition Language 데이터 정의 언어
- 데이터베이스 내의 객체를 생성, 수정, 삭제하고 그 구조를 조작하는 명령어들의 집합
- 데이터베이스의 구조와 데이터가 준수해야 하는 제약조건을 기술한다.
- CREATE, ALTER, DROP 등이 있다.
DML Data Manipulation Language 데이터 조작 언어
- 데이터에 대한 CRUD(생성, 검색, 삭제, 수정) 등 실제적인 데이터 조작과 관련된 명령어들의 집합
- INSERT, UPDATE, DELETE, SELECT 등의 명령이 있다.
- DML을 실행하기 위해서는 DDL문에 의해 데이터베이스 내 객체들이 생성되고 구조화 되어있어야 한다.
DCL Data Control Language 데이터 제어 언어
- DBMS의 동작 설정, DBMS 접근에 대한 사용자 권한 관리 명령어 등의 집합
- GRANT, REVOKE, BEGIN 등이 있다.
- 주로 데이터베이스 관리자(DBA)가 사용한다.

DDL

DDL 의 개념

데이터 정의 언어로, 데이터베이스 내의 객체를 생성, 수정, 삭제하고 그 구조를 조작하는 명령어들의 집합을 뜻한다. DDL에서는 데이터베이스의 구조와 데이터가 준수해야 하는 제약조건을 기술한다. CREATE(생성), ALTER(수정), DROP(삭제) 등이 있다.

데이터베이스 객체의 종류

데이터 저장과 관련된 객체

객체 설명
SCHEMA / DATABASE 스키마란 데이터베이스의 구조를 정의하는 청사진이라고 할 수 있다.<br스키마는 데이터의 실제 값이 아니라, 데이터베이스의 논리적인 설계를 나타내는 것이며,
RDBMS 상에서는 테이블, 뷰 등의 데이터베이스 객체를 저장하기 위한 영역을 지칭한다.
스키마에서 정의되는 것들은 다음과 같다.
- 테이블의 구조 (컬럼 이름, 데이터타입 등)
- 제약조건 (기본 키, 외래 키, 유니크 등)
- 뷰
- 인덱스
- 트리거
- 저장 프로시저
TABLE 테이블은 관계형 모델의 릴레이션을 RDBMS에서 구현한 것으로, 구조적으로는 컬럼들의 집합으로 이루어진다.
테이블 생성 및 수정시에는 컬럼의 이름과 데이터 타입, 그리고 제약조건을 기술한다.
INDEX 데이터 검색 속도를 높이기 위한 구조
VIEW 특정 쿼리의 결과를 저장하여 재사용할 수 있는 논리적 테이블

데이터 조작과 관련된 객체

객체 설명
트리거 특정 이벤트가 발생할 때 자동으로 실행되는 동작
프로시저 재사용 가능한 SQL 코드 블록

DDL 명령어의 종류

명령어 설명 SCHEMA
DATABASE
TABLE INDEX VIEW
CREATE 객체 생성 스키마 생성
데이터베이스 생성
테이블 생성 인덱스 생성 뷰 생성
ALTER 객체 수정 스키마 수정
데이터베이스 수정
테이블(및 컬럼) 수정 - -
DROP 객체 삭제 스키마 삭제
데이터베이스 삭제
테이블 삭제 인덱스 삭제 뷰 삭제

DDL 사용 방법

스키마의 생성과 삭제

1
2
-- 스키마 생성
CREATE SCHEMA 스키마이름;

1
2
-- 스키마 삭제
CREATE SCHEMA 스키마이름;

스키마의 수정
스키마의 생성, 삭제는 잘 사용되지만, 스키마의 수정 기능은 잘 사용되지 않는다.
그 이유는 스키마는 데이터베이스 설계의 핵심적인 구조를 정의하므로, 이를 수정할 경우 데이터베이스의 안정성에 영향을 미칠 수 있기 때문이다.
더불어 데이터베이스 객체의 수정은 일반적으로 스키마 전체의 수정보다는 테이블 수준의 수정이 대부분이므로, 스키마 수정 기능을 사용할 일이 많지 않다.
그래도 스키마의 수정이 필요할 경우엔, 데이터베이스의 일관성 유지를 위해, 수정보다는 기존 스키마를 삭제하고 재생성 하는 게 권장된다.

테이블과 컬럼의 생성과 수정, 삭제

(1) 테이블과 컬럼의 생성

테이블의 생성에서는 2차원 관계형 모델을 담는 구조를 생성한다. 컬럼이름, 데이터타입 등 물리적인 저장방법 또한 정의한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 테이블 생성  
CREATE TABLE 테이블이름(
    
    -- 컬럼 정의
    컬럼1 데이터타입1 제약조건1, 제약조건2...   -- 제약조건들 : 키, NOT NULL, DEFAULT 등
    , 컬럼2 데이터타입2 제약조건1, 제약조건2... -- 선택사항. 테이블에는 최소 하나 이상의 컬럼이 있어야 한다.
    , ...
    , 컬럼n 데이터타입n 제약조건1, 제약조건2...

    -- 키 제약조건 정의 (선택사항)
    , PRIMARY KEY (컬럼명) -- 레코드를 유일하게 식별할 수 있는 컬럼 혹은 컬럼들의 결합이어야 한다.
    , UNIQUE (컬럼명)
    , FOREIGN KEY (컬럼명) REFERENCES 참조테이블(참조컬럼명) -- 참조컬럼은 반드시 존재해야 하고, 해당 테이블의 기본키 혹은 유니크키여야 한다.
)

(2)(3) 테이블과 컬럼의 수정

1
2
3
4
5
6
7
8
9
-- 테이블 내 컬럼 수정

ALTER TABLE 테이블이름(
    -- 컬럼 수정 (컬럼 추가, 수정, 삭제)
    ADD COLUMN 컬럼명 데이터타입 제약조건1, 제약조건2... -- 컬럼 추가
    , DROP COLUMN 컬럼명                          -- 컬럼 삭제
    , CHANGE COLUMN 수정전컬럼, 수정후컬럼            -- 컬럼의 이름, 데이터타입, 제약조건 변경
    , MODIFY COLUMN 컬럼명 새로운 데이터타입          -- 컬럼의 데이터타입 변경
)
1
2
3
4
5
6
7
8
9
10
11
12
-- 제약조건 수정

-- 제약조건 수정은 한 줄로, 한 번에 하나의 요청만을 수행할 수 있다. 또한 테이블명 다음에 괄호를 붙이지 않는다.
-- 기본키 수정
ALTER TABLE 테이블이름 ADD PRIMARY KEY (컬럼명);    -- 기본키 추가
ALTER TABLE 테이블이름 DROP PRIMARY KEY;          -- 기본키 삭제
-- 외래키 수정
ALTER TABLE 테이블이름 ADD CONSTRAINT 외래키이름 FOREIGN KEY (컬럼명) REFERENCES 참조테이블(참조컬럼명);  -- 외래키 추가 (외래키 이름 미지정시 RDBMS가 자동으로 이름 생성)
ALTER TABLE 테이블이름 DROP FOREIGN KEY 외래키이름;                                                -- 외래키 삭제
-- 유니크키 수정
ALTER TABLE 테이블이름 ADD CONSTRAINT 고유키이름 UNIQUE (컬럼명);  -- 유니크키 추가 (유니크키 이름 미지정시 RDBMS가 자동으로 이름 생성)
ALTER TABLE 테이블이름 DROP INDEX 고유키이름;                    -- 유니크키 삭제 (추가시에는 제약조건 관점, 삭제시에는 인덱스 관점)

(3) 테이블의 삭제

테이블 삭제시에는 모든 데이터가 소실되고 복구가 불가능하므로 각별히 주의해야 한다.
또한 다른 테이블에서 삭제하려는 테이블을 참조하는 등의 제약조건이 있는 경우, 테이블 삭제가 불가능하다.

1
DROP TABLE 테이블이름;

Reference

데이터베이스시스템 (정재화 저)