Skip to content

SQL 개요

  • **SQL(Structured Query Language)**은 관계대수에 기반한 RDBMS의 데이터 관리를 위해 1970년대 초 IBM의 System R 프로젝트에서 연구된 데이터베이스 언어
  • 1986년 ANSI, 1987년 ISO에서 표준으로 제정 SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003/2006/2011/2019/2023 등
  • 상용 DBMS의 특성에 맞게 국제표준을 확장한 독자적 버전이 존재
  • SQL의 특징 비절차적(선언형) 언어, 필요한 데이터만 기술
    인간의 언어와 매우 유사하고 간단, 명료
  • 데이터 정의 언어(DDL: Data Definition Language) 데이터베이스 내의 객체를 생성 및 삭제하고 그 구조를 변형하는 명령어의 집합
    데이터가 준수해야 하는 제약조건을 기술
  • 데이터 조작 언어(DML: Data Manipulation Language)
    DDL에 의해 정의된 테이블에 데이터를 조작하는 명령어의 집합
    데이터에 대한 CRUD(생성, 수정, 삭제, 검색) 명령을 포함
  • 데이터 제어 언어(DCL: Data Control Language) DBMS의 동작, 접근 권한 등을 관리하는 명령어의 집합
    사용자 및 비밀번호 관리, 권한 부여 및 회수 명령의 포함
  • 데이터베이스 객체를 생성, 수정 또는 삭제 하는 명령어의 집합
  • 데이터베이스 객체의 종류 데이터 저장 : 데이터베이스, 테이블, 인덱스, 뷰
    데이터 조작: 트리거, 프로시저, 함수 등
  • 데이터 정의 명령어의 종류 CREATE: 객체 생성 / ALTER: 객체 수정 / DROP: 객체 삭제
  • 기본적 데이터 저장구조 2차원 형태의 데이터 저장 구조인 점에서 유사
  • 릴레이션 관계형 모델에서의 추상적, 논리적 개념
    집합론에 기반한 여러 속성을 갖는 레코드의 집합
    레코드의 순서가 없으며 중복된 레코드가 존재하지 않음
  • 테이블 RDBMS에서의 물리적인 데이터 저장 개념
    레코드의 순서가 존재 가능
    키 제약에 따라 중복된 레코드가 존재 가능
  • 컬럼이 가질 수 있는 값의 범위, 즉 도메인을 결정
  • 프로그래밍 언어의 변수 선언 시 사용하는 데이터 타입의 사용목적과 방법이 매우 유사
  • 기본 데이터 타입 문자 : CHAR(n), VARCHAR(n), CLOB
    숫자 : INT, FLOAT, DOUBLE, DECIMAL(m, n)
    날짜/시간 : DATE, TIME, DATETIME, TIMESTAMP
    기타 : BOOLEAN, ENUM, BLOB
  • SMALLINT : 2바이트 정수(-32,768~32,767) Ex) 나이, 학년, 물품번호, 인원 등 작은 크기의 정수
  • INT : 4바이트 정수(약 -20억 ~ 20억) Ex) 물품의 금액, 전화번호 등의 일반 크기의 정수
  • BIGINT : 8바이트 정수(-약 9,000경 ~ 9,000경) Ex) 계좌의 잔고, 과학 데이터 등 천문학적인 크기의 정수
  • 부동 소수형 FLOAT : 4바이트 크기 부동 소수
    FLOAT(P) : 소수점 이하 P개 자리의 부동 소수
    DOUBLE : 8바이트 크기 부동 소수
  • 고정 소수형 DECIMAL(M, N) : 전체 M 자리, 소수점 이하 N자리의 소수를 저장
    예) DECIMAL(5,2)는 -999.99~999.99
    NUMERIC : DECIMAL과 유사
  • 날짜 데이터 타입 DATE : ‘YYYY-MM-DD’ 형식의 날짜
    YEAR : ‘YYYY’ 형식의 연도
  • 시간 데이터 타입 TIME : ‘HH:MI:SS’ 형식의 시간
  • 날짜 및 시간 데이터 타입 TIMESTAMP : ‘YYYY-MM-DD HH:MI:SS’ 형식의 날짜 및 시간
    유효하지 않은 날짜 및 시간 입력 시 오류 발생
  • CHAR(N): 최대 길이가 N인 고정길이 문자열
  • VARCHAR(N): 최대 길이가 N인 가변길이 문자열 관리적 측면에서는 불리

사용자요구사항분석을 통해 컬럼 내 값의 특성을 이해하고 어떤 값을 쓸 것인지 판단

  • CLOB(Character Large OBject) 수백 MB ~ 수 GB 길이의 문자열 데이터 저장을 위한 타입
    레코드 단위가 아닌 별도의 저장 공간을 부여하는 외부 저장 방식
  • ENUM : 유한개의 문자열 집합 중 하나의 값을 선택
    효율적인 저장 및 처리를 위해 내부적으로 숫자로 저장
  • 성별 : ENUM(‘남자’, ‘여자’)
    혈액형 : ENUM(‘A’, ‘B’, ‘O’, ‘AB’)
  • 테이블에 존재하는 데이터를 무결하고 세밀하게 관리하기 위한 목적으로 사용
  • DBMS는 테이블 조작 시 테이블에 정의된 제약조건을 만족시키는지 지속적으로 검사 레코드의 입력, 수정, 삭제 요청 시 정의된 제약조건의 준수여부를 먼저 검사한 후 실행여부 결정
    데이터의 일관성과 무결성 훼손을 방지
  • DBMS는 적용하려는 제약의 유형에 따라 다양한 제약 조건을 지원

PRIMARY KEY : 기본키 지정, UNIQUE와 NOT NULL 특성
FOREIGN KEY : 외래키 지정, 참조 컬럼 정의
NOT NULL : NULL이 될 수 없는 컬럼에 지정
UNIQUE : 동일한 컬럼값을 가질 수 없음을 지정
DEFAULT : 컬럼값 미지정 시, 기본값 저장
GENERATED ALWAYS AS IDENTITY : 레코드가 추가될 때 자동적으로 속성값이 증가
CHECK : 컬럼값이 특정 조건 준수 여부 지정

생성된 테이블에 컬럼을 추가, 수정(이름, 데이터 타입, 제약조건) 또는 삭제하는 작업
컬럼 삭제 또는 데이터 타입 수정 시 데이터 소실 위험이 있으므로 많은 주의가 요구

ALTER TABLE 테이블이름
[ADD COLUMN 컬럼 데이터타입 [제약조건]]
[DROP COLUMN 컬럼이름]
[CHANGE COLUMN 수정 전 컬럼 수정 후 컬럼]
[MODIFY COLUMN 컬럼 데이터타입]

존재하는 테이블을 데이터베이스에서 삭제. 삭제된 테이블에 저장된 모든 데이터가 소실, 복구가 불가능한 연산이므로 각별한 주의가 요구

DROP TABLE 테이블이름