-
[데이터베이스] 데이터베이스 언어 SQL (1/3)IT/데이터베이스 2022. 10. 10. 18:44
본 포스팅은 "데이터베이스 개론 [2판]" 도서로 공부한 내용을 요약하기 위한 포스팅입니다.
1. SQL의 소개 (Structured Query Language)
SQL은 관계 데이터베이스를 위한 표준 질의어로 많이 사용되는 언어.
SQL은 사용자가 처리를 원하는 데이터가 무엇인지만 제시하고 데이터를 어떻게 처리해야 하는지를 언급할 필요가 없어 비절자척 데이터 언어의 특징을 띤다.SQL은 데이터베이스 관리 시스템에 직접 접근하여 대화식으로 질의를 작성해 사용할 수도 있고,
C나 C++ 또는 Java 같은 언어로 작성한 응용 프로그램에 삽입하여 사용할 수도 있다.
SQL은 기능에 따라 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 나눈다.
- 데이터 정의어 : 테이블을 생성하고 변경 제어하는 기능을 제공·
- 데이터 조작어 : 테이블에 새 데이터를 삽입하거나, 테이블에 저장된 데이터를 수정·삭제·검색하는 기능을 제공
- 데이터 제어어 : 보안을 위해 데이터에 대한 접근 및 사용 권한을 사용자별로 부여하거나 취소하는 기능을 제공
2. SQL을 이용한 데이터 정의 (데이터 정의어)
SQL의 데이터 정의 기능은 테이블 생성, 생성된 테이블 구조의 변경, 테이블 삭제로 분류할 수 있다.
2-1. 테이블의 생성
테이블을 생성하는 SQL 명령어는 CREATE TABLE이다.
CREATE TABLE문은 생성할 테이블을 구성하는 속성들의 이름과 데이터 타입 및 제약사항에 대한정의,
기본키·대체키·외래키의 정의, 데이터 무결성을 위한 제약조건의 정의 등을 포함한다.모든 SQL문은 세미콜론(;)으로 문장 끝을 표시하며, CREATE TABEL, NOT NULL과 같은 키워드는 대소문자를 구분하지 않는다. "[ ]"로 표시한 항목은 생략이 가능하다.
CREATE TABLE 테이블_이름( #1 속성 정의, 테이블을 구성하는 속성의 이름과 데이터 타입, 기본적인 제약사항을 정의 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값] #2 기본키 정의, 테이블에 하나만 존재 [PRIMARY KEY (속성_리스트) #3 대체키 정의, 테이블에 여러개 존재 가능 [UNIQUE (속성_리스트)] #4 외래키 정의, 테이블에 여러개 존재 가능 [FOREIGN KEY (속성_리스트) REFERENCES 테이블_이름(속성_리스트)] [ON DELETE 옵션] [ON UPDATE 옵션] #5 외래키 설정 시 데이터 삭제 및 갱신 시 옵션 정의 #6 데이터 무결성을 위한 제약 조건 설정 [CONSTRAINT 이름] [CHECK(조건)] );
1) 속성의 정의 (#1)
테이블을 구성하는 각 속성의 데이터 타입을 선택한 후에는 속성의 널 값 허용여부와 기본 값 필요 여부를 결정해야 한다.
CREATE TABLE 문으로 생성되는 테이블을 구성하는 속성은 기본적으로 널 값이 허용된다.
그러므로 널 값을 허용하지 않으려면 속성을 정의할 때 속성의 이름과 데이터 타입 다음에 NOT NULL 키워드를 표기한다.
아래의 예시는 학번과 이름 속성을 가지는 학생 테이블을 정의한 예시이다.
CREATE TABEL 학생(
학번 INT NOT NULL DEFAULT 0
이름 CHAR(10) DEFAULT 'A0'
);2) 키의 정의 (#2~4)
기본키는 PRIMARY KEY 키워드를 사용해 지정한다.
기본키가 없어도 테이블을 정의할 수 있지만 각 튜플을 식별할 수 있는 기본키는 가능한 선택하는 것이 좋다.
모든 테이블에서 기본키는 반드시 하나만 지정할 수 있고, 여러 개의 속성으로 구성할 수 있다.
대체키는 UNIQUE 키워드를 사용해 지정한다. 대체키로 지정된 속성의 값은 테이블에서 중복되면 안 되고 유일성을 가져야 한다. 하지만 기본키로 지정된 속성과 달리 널 값을 가질 수 있다. 대체키는 한 테이블에서 여러 개 지정할 수 있다.
외래키는 FOREIGN KEY 키워드를 사용해 지정한다. 외래키를 지정할 때는 출처를 분명히 밝혀야 한다.
즉, 외래키가 어떤 테이블의 무슨 속성을 참조하는지 REFERENCES 키워드 다음에 명확히 제시해야 한다.
아래의 그림에서 고객 테이블은 이미 존재할 때, 주문 테이블을 생성하는 SQL 구문을 예시로 작성해보자.
CREATE TABLE 주문( 주문번호 INT NOT NULL, 주문고객 CHAR(10) NOT NULL, 주문제품 CHAR(10) NOT NULL, 주문수량 INT NOT NULL, PRIMARY KEY(주문번호), UNIQUE(주문제품), FOREIGN KEY(주문고객) REFERENCES 고객(고객아이디) ON DELETE NO ACTION ON UPDATE NO ACTION );
외래키 지정 시 참조되는 테이블(외래키의 원래 위치 : 위 예시에서 고객테이블)에서 튜플을 함부로 삭제하거나 변경하지 못한다. 그리고 참조되는 테이블에서 튜플을 삭제하거나 변경할 때 처리하는 방법을 다양하게 선택할 수 있다.
외래키 참조 튜플 삭제 관련 옵션
- ON DELETE NO ACTION : 튜플을 삭제하지 못하게 한다.
- ON DELETE CASCADE : 관련 튜플을 함께 삭제한다.
- ON DELETE SET NULL : 관련 튜플의 외래키 값을 NULL로 변경한다.
- ON DELETE SET DEFAULT : 관련 튜플의 외래키 값을 미리 지정한 기본값으로 변경한다.
외래키 참조 튜플 변경 관련 옵션
- ON UPDATE NO ACTION : 튜플을 변경하지 못하도록 한다.
- ON UPDATE CASCADE : 관련 튜플에서 외래키 값을 함께 변경한다.
- ON UPDATE SET NULL : 관련 튜플의 외래키 값을 NULL로 변경한다.
- ON UPDATE SET DEFAULT : 관련 튜플의 외래키 값을 미리 지정한 기본 값으로 변경한다.
3) 데이터 무결성 제약조건의 정의
CREATE TABEL 문으로 테이블을 정의할 때 CHECK 키워드를 사용해 특정 속성에 대한 제약조건을 지정할 수 있다.
# CHECK 키워드 사용 예시 # 모든 주문은 2~10개까지만 허용된다는 제약조건 설정 CHECK(주문수량 >=2 AND 주문수량 <= 10) # CONSTARINT 키워드 사용 예시 # 위의 CHECK 제약조건에 고유의 이름을 부여 CONSTRAINT CHK1 CHECK(주문수량 >=2 AND 주문수량 <= 10)
2-2 테이블의 변경
테이블은 ALTER TABLE 문으로 변경할 수 있다.
ALTER TABLE문을 이용해 새로운 속성 추가, 기존 속성 삭제, 새로운 제약조건 추가, 기존 제약조건 삭제 등이
가능하다.ALTER TABLE문을 기본형식은 아래와 같다.
# 새로운 속성의 추가 ALTER TABEL 테이블_이름 ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본값]; # 기존 속성의 삭제 ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름 # 새로운 제약조건의 추가 ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 제약조건_내용; # 기존 제약조건의 삭제 ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약조건_이름;
위에서 생성한 주문 테이블에 가입날짜 속성을 추가·삭제, 제약조건 추가·삭제를 진행해보자.
# 예시 ALTER TABLE 주문 ADD 가입날짜 DATE; ALTER TABLE 주문 DROP COLUMN 가입날짜; ALTER TABLE 주문 ADD CONSTRAINT CHK1 CHECK(주문수량 >= 2 AND 주문수량 <=10); ALTER TABLE 주문 DROP CONSTRAINT CHK1;
2-3 테이블의 삭제
CREATE TABLE 문으로 생성한 테이블은 DROP TABLE 명령어로 삭제할 수 있다.
하지만 삭제할 테이블을 참조하는 테이블이 있다면 삭제가 수행되지 않는다.
DROP TABLE 테이블_이름;
'IT > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 데이터베이스 언어 SQL (3/3) (0) 2022.10.10 [데이터베이스] 데이터베이스 언어 SQL (2/3) (0) 2022.10.10 [데이터베이스] 관계 데이터 모델의 개념 (논리적 모델) (1) 2022.10.07 [데이터베이스] 데이터 모델링 (개념적 모델) (1) 2022.10.06 [데이터베이스] 데이터베이스 시스템 (DBS) (0) 2022.10.06