컴퓨터공학 공부/SQLD (SQL 전문가 가이드)
SQLD 자격증 공부 SQL 기본-관계형 데이터베이스 개요, DDL (SQL 전문가 가이드)
개발학생
2024. 4. 23. 17:56
반응형
*본 게시물은 2013년도 SQL 전문가 가이드 교재(일명 '노랭이')를 참고하여 공부하고 정리한 게시물입니다
2과목 SQL 기본 및 활용: 제1장 SQL 기본
1. 관계형 데이터베이스(Relational Database) 개요
- DB: 데이터를 일정한 형태로 저장해 놓은 것, DBMS를 이용하여 효율적인 데이터 관리와 데이터 손상 복구 가능
- 관계형 DB(RDB; Relational Database)
: 정규화를 통해 이상현상 및 중복 데이터 제거, 동시성 관리와 병행 제어를 통해 데이터 동시 조작 가능 - 릴레이션에 데이터 저장, 집합 연산과 관계 연산 가능
1) SQL[Structured Query Language]
- RDB(관계형 DB)에서 사용하는 언어로, 데이터 조회 및 신규 데이터 입력/수정/삭제 기능 제공
(1) 테이블(Table)
- RDB의 기본 단위
- 데이터를 저장하는 객체
- 칼럼-행의 2차원 구조를 가진 데이터의 저장 장소
*테이블 관련 용어
용어 | 설명 |
칼럼(세로,열/Column) | 2차원 구조를 가진 테이블에서 세로 방향으로 이루어진 하나하나의 특정 속성 -> 더 이상 나눌 수 없는 특성 |
행(가로/Row) | 2차원 구조를 가진 테이블에서 가로 방향으로 이루어진 연결된 데이터 |
필드(Field) | 칼럼과 행이 겹치는 하나의 공간 |
정규화(Normalization) | 테이블을 분할하여, 데이터의 불필요한 중복을 줄여 무결성을 확보하는 프로세스 |
*ERD(Entity Relationship Diagram)
- 테이블 간 서로의 상관 관계를 그림으로 도식화한 것(E-R 다이어그램이라고 함)
- 구성 요소: 엔터티(Entity), 관계(Relationship), 속성(Attribute)
(2) SQL 명령어의 종류
명령어의 종류 | 명령어 | 설명 |
데이터 정의어(DDL) -Data Definition Language |
CREATE ALTER DROP RENAME |
- 테이블과 같은 데이터 구조를 정의하는데 사용 - 구조 생성/변경, 삭제, 이름 바꾸기 등 데이터 구조와 관련된 명령어 |
데이터 제어어(DCL) -Data Control Language |
GRANT REVOKE |
- 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어 |
트랜잭션 제어어(TCL) -Transaction Control language |
COMMIT ROLLBACK |
- 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션)별로 제어하는 명령어 |
2. DDL(Data Definition Language)
1) 데이터 타입
데이터 유형 | 설명 | Oracle | SQL Server |
고정 길이 문자열 | 할당된 변수 값의 길이가 s 이하면 차이 길이만큼 공간으로 채워짐 | CHAR(s) | CHAR(s) |
가변 길이 문자열 | 할당되는 변수 값의 길이의 최대값이 s이며, s 이하여도 해당 수치만큼의 공간만 채워짐 -> 가능한 최대 길이로 설정 |
VARCHAR2(s) | VARCHAR(s) |
숫자 | 정수, 실수 등 숫자 정보 | NUMBER (전체 자리 수, 소수 부분의 자리 수) |
NUMERIC DECIMAL FLOAT REAL 등 10가지 이상의 타입 |
DATE | 날짜와 시각 정보 | 1초 단위 관리 | 3.33ms(millisecond) 단위 관리 |
2) CREATE TABLE
(1) 테이블과 칼럼 명명
- 알파벳, 숫자, ‘_’(언더바), ‘$’(달러), ‘#’(샵) 사용 가능
-> 반드시 문자로 시작해야 함 - 알파벳 대소문자 구분하지 않음
- 테이블명은 단수형 권고, 중복 X
- 한 테이블 내에서는 칼럼명 중복 X
- 테이블 이름을 지정하고 각 칼럼들은 ( )로 묶어 지정
- 예약어(Reserved word)를 이름으로 사용 불가
(2) 테이블 생성 구문 형식
CREATE TABLE 테이블이름 (
칼럼명1 DATATYPE [DEFAULT 형식],
칼럼명2 DATATYPE [DEFAULT 형식],
칼럼명3 DATATYPE [DEFAULT 형식],
...
);
(3) 제약조건(CONSTRAINT)
구분 | 설명 |
PRIMARY KEY(기본키) | - 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키 - 한 테이블에 하나만 정의 가능 - 기본키 제약 설정 시 DBMS는 자동으로 UNIQUE 인덱스를 생성하며, 기본키를 구성하는 칼럼에는 NULL 입력 불가 |
UNIQUE KEY(고유키) | - 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키 - 단, 기본키와 다르게 NULL을 입력할 수 있음 |
NOT NULL | - NULL값 입력 금지(필수로 값을 입력해야 함) |
NULL | - 0이나 공백이 아닌, 아직 정의되지 않은 미지의 값 - 현재 데이터를 입력하지 못하는 경우 |
CHECK | - 입력할 수 있는 값의 범위 등을 제한 - TRUE or FALSE로 평가하는 논리식 지정 |
FOREIGN KEY(외래키) | - 관계형 데이터베이스에서 테이블 간 관계를 정의하기 위해, 기본키를 다른 테이블의 외래키로 복사하는 경우 생성됨 - 외래키 지정 시, 참조 무결성 제약 옵션 선택 가능 |
DEFAULT | - 데이터 입력 시 컬럼의 값이 지정되어 있지 않을 경우 기본값을 사전에 설정하는 것 |
3) ALTER TABLE
(1) ADD COLUMN
기존 테이블에 필요한 칼럼 추가
ALTER TABLE 테이블명
ADD 추가할 칼럼명 데이터 유형;
(2) DROP COLUMN
테이블에서 필요 없는 칼럼 삭제(한 번 삭제 후 복구 불가능)
ALTER TABLE 테이블명
DROP COLUMN 삭제할 칼럼명;
(3) MODIFY/ALTER COLUMN
칼럼의 데이터 유형, DEFAULT 값, NOT NULL 제약조건 변경
- 데이터가 테이블에 있는 상태에서는 칼럼의 크기를 줄일 수 없으며 데이터 유형 변경 불가
- 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 적용
- 해당 칼럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건 추가 가능
[Oracle]
ALTER TABLE 테이블명
MODIFY (칼럼명1 데이터 유형 [DEFAULT] [NOT NULL],
칼럼명2 데이터 유형 ...);
[SQL Server]
ALTER TABLE 테이블명
ALTER (칼럼명1 데이터 유형 [DEFAULT] [NOT NULL],
칼럼명2 데이터 유형 ...);
(4) RENAME COLUMN
Oracle 등 일부 DBMS에서만 지원하는 기능
ALTER TABLE 테이블명
RENAME COLUMN 변경해야 할 칼럼명 TO 새로운 칼럼명;
(5) DROP CONSTRAINT
테이블 생성 시 부여했던 제약조건 삭제
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;
(6) ADD CONSTRAINT
특정 칼럼에 제약조건 추가
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
4) RENAME TABLE
테이블 이름 변경
[Oracle]
RENAME 변경 전 테이블명 TO 변경 후 테이블명;
[SQL Server]
SP_RENAME 변경 전 테이블명, 변경 후 테이블명;
5) DROP TABLE
불필요한 테이블 삭제
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
[SQL Server]
CASCADE 옵션이 없으며,
테이블 삭제 전에 FOREIGN KEY 제약 조건을 삭제하거나 FOREIGN KEY를 참조하는 테이블을 먼저 삭제해야 함
DROP TABLE 테이블명;
6) TRUNCATE TABLE
테이블에 들어있던 데이터만 삭제됨(구조는 재생성함)
- 테이블 구조 변경이 없으므로 DML로 분류될 수도 있지만,
내부 처리 방식이나 Auto Commit 특성 등으로 인해 DDL로 분류됨
TRUNCATE TABLE 테이블명;
반응형