01. 데이터베이스 언어
데이터베이스에게 일을 시키고 그 결과를 얻기 위해서는 의사소통할 언어가 필요하다. 그 언어 = SQL.
데이터베이스 언어의 필요

DBMS의 역할은 데이터의 사용과 관리를 분리하여 데이터 사용과정에서 발생 가능한 문제를 원천적으로 차단하는 것. 분리로 인해 매개체가 필요하게 되었는데, DBMS가 이를 수행한다. 사용자는 데이터를 사용하기 위해 DBMS에게 데이터 입력, 수정, 삭제 등의 의뢰를 해야 한다. 이 의뢰를 위해 데이터베이스 언어가 만들어 졌다!
SQL의 개요
DBMS의 언어로 많은 것이 제안되었으나, SQL이 가장 보편적으로 사용되고 있다!
-
SQL(Structured Query Languange: 구조화되어 질문하는 언어)은 관계대수에 기초하여 RDBMS의 데이터 관리를 위해 설계된 언어
-
1986년 ANSI, 1987년 ISO에서 표준으로 제정
- SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003,SQL:2008
출시 이후에 지속적으로 기능, 문법적으로 확장되어옴
- 상용 DBMS의 특성에 맞게 국제표준을 확장한 독자적 버전이 존재
-
특징
- 비절차적(선언형) 언어, 필요한 데이터만 기술.
비절차적: 복잡한 연산관계를 기술하지 않고, 필요한 것만 가져오라고 하면 가져온다!
- 인간의 언어와 매우 유사하고 간단, 명료
SQL만 잘 알아두면 어떤 DBMS도 기본적인 DBMS의 기능은 이용가능. 새로운 DBMS도 특징적 문법만 익히면 금방 사용할 수 있다!
SQL의 구성
1. 데이터 정의 언어(DDL: Data Definition Language)
데이터자체가 아니라, 데이터를 관리할 수 있는 데이터베이스 객체 자체를 생성 수정 삭제.
- 데이터베이스 내의 객체를 생성 및 삭제하고 그 구조를 조작하는 명령어의 집합
- 데이터가 준수해야 하는 제약조건을 기술
- CREATE, ALTER, DROP 문 등
2. 데이터 조작 언어(DML: Data Manipulation Language)
DDL에 의해 만들어진 객체 내부에 대이터를 저장, 수정, 삭제. 데이터를 빠르고 효율적으로 검색할 수 있는 문법구조 제공.
- DDL에 의해 정의된 데이터를 조작하는 명령어의 집합
- 데이터에 대한 CRUD(생성, 검색, 삭제, 수정) 명령을 포함
- INSERT, UPDATE, DELETE, SELECT 문 등
02. 데이터 정의 언어
데이터 정의 언어의 개념
- 데이터베이스의 객체를 생성, 삭제 또는 구조를 수정하는 명령어의 집합
- 데이터베이스 객체의 종류
- 데이터 저장 - 테이블, 인덱스, 뷰
- 데이터 조작 - 트리거, 프로시저, 함수 등
- 데이터 정의 명령어의 종류
- CREATE: 객체 생성
- ALTER: 객체 수정
- DROP: 객체 삭제
데이터 정의 언어의 구문 형식
명령어 + 객체(조작하려고 하는 객체 지목): 간단한 영문장 형태
=> 쉽고 효율적!

스키마 정의
- 스키마 = 데이터베이스(데이터의 집합)
- 한 조직의 데이터베이스 시스템의 운영에 필요한 테이블, 인덱스, 뷰 등의 데이터베이스 객체의 집합
- 스키마 관리 방법
- Forward Engineer
- SQL 에디터
- 내비게이터 패널
스키마 관리 구문 형식
- 스키마 생성
CREATE "SCHEMA" 스키마이름
~~이름의 "스키마"를 생성해줘
데이터를 집어넣을 수 있는 원론적인 큰 통이 생성됨.
- 스키마 삭제
DROP SCHEMA 스키마이름
일반적으로 수정은 잘 안하고 삭제를 주로함.
테이블 정의, 수정, 삭제
테이블 정의
테이블 = 릴레이션에 동일하게 상응. 스키마 내부에 존재 가능하므로, 스키마를 먼저 생성해야 함!
- 새로운 2차원 형태의 테이블을 생성

테이블 생성의 예

- CREATE TABLE 릴레이션명(=테이블명)
- 괄호 사이에 한줄마다 각각의 컬럼에 대한 정의가 들어감
- (컬럼의 이름 + 데이터 타입(유형) + 컬럼의 특징...) = 하나의 컬럼
- 각각의 컬럼들은 콤마(,)로 구분한다.
테이블 수정
- 생성된 테이블에 컬럼을 추가, 수정(이름, 데이터 타입, 제약조건) 또는 삭제하는 명령
- 컬럼 삭제 또는 컬럼의 데이터 타입 수정 시 데이터에 대한 소실이 발생하므로 많은 주의
- 테이블 수정 방법
테이블 수정 구문 형식
- 새로운 컬럼을 추가, 삭제 및 수정하는 등의 테이블 구조를 변경

테이블 수정 질의의 사용
질의문 Q. 교수테이블에 데이터타입이 INT인 나이 컬럼을 추가하시오.
SQL
ALERT TABLE 교수
ADD COLUMN 나이 INT
컬럼을 새롭게 추가할때는 기본적으로 NULL이 입력된다!

테이블 삭제
- 존재하는 테이블을 스키마에서 삭제
- 삭제할 테이블의 모든 데이터가 소실, 복구가 불가능 연산이므로 각별하 주의가 요구.
- 테이블 삭제 방법
SQL
DROP TABLE 테이블이름
ex)교수 테이블 삭제: DROP TABLE 교수
데이터 타입의 개념
- 컬럼이 가질 수 있는 값의 범위, 즉 도메인을 결정
- 프로그래밍 언어에서의 변수를 생성하는 데이터타입의 사용 목적과 방법이 매우 유사
- 기본 데이터 타입

+) 이것 외에 다른 데이터타입도 있으니 따로 찾아보는것도 좋다!
정수 데이터 타입
- TINYINT : 1바이트 정수, -128~127
- SMALLINT : 2바이트 정수, -32768~32767
- INT : 4바이트 정수, 약 -20억 ~ 20억
- 물품의 금액, 전화번호 등의 일반 크기의 정수
- BIGINT : 8바이트 정수
공간 효율성을 고려하여 데이터타입 나눠서 사용 가능
실수 데이터 타입
- 고정 소수형
- DECIMAL(M,N): 전체 M자리, 소수점이하 N자리의 숫자
ex. DECIMAL(5,2)는 -999.99~999.99
- NUMERIC : DECIMAL과 동일
정수부분의 자릿수와 소숫점 부분의 자릿수를 구분해서 사용
- 부동 소수형
- FLOAT: 4바이트 크기 부동 소수
- FLOAT(P): 소수점 이하 P개 자리의 부동 소수
- DOUBLE: 8바이트 크기 부동 소수형
날짜 및 시간 데이터 타입
- 날짜 데이터 타입
- DATE: 'YYYY-MM-DD' 형식의 시간
- YEAR: 'YYYY' 형식의 연도 (년도만 저장)
- 시간 데이터 타입
- 날짜 및 시간 데이터 타입
- DATETIME: 'YYYY-MM-DD HH:MI:SS' 형식의 날짜 및 시간
- TIMESTAMP: DATETIME과 동일(거의 기능적으로 유사)
문자 데이터 타입
- CHAR(N): 최대 길이가 N인 고정길이 문자열 N만큼의 공간을 확보해!라는 의미
- VARCHAR(N): 최대 길이가 N인 가변길이 문자열
- 'DATABASE'문자열 저장시
VARCHAR이 더 좋아보이지만, DBMS입장에서는 컬럼 길이가 레코드마다 다르면 검색 속도가 느려진다는 단점이 있음
CHAR와 VARCHAR

+) 홍: 2칸 차치.
VARCHAR 사용
1. 레코드마다 길이가 달라져 관리에 어려움이 있음.
2. "홍길동"이름을 "가나다라"로 수정 시, 뒤의 데이터들을 하나씩 밀어내고 값을 입력해야 함. 다시 이름을 "최영"으로 변경 시, 이번엔 데이터를 앞으로 하나씩 밀어야 함.
cf. CHAR는 이런 부수적 작업이 필요 없다!
문자 데이터 타입
CHAR, VARCHAR는 일반적으로 4천자까지 MAXIMUM. 4천자 이상을 원하는 경우, TEXT나 CLOB을 사용한다.
- TEXT, CLOB: 길이가 최대 2~4GB인 가변길이 문자열
- ENUM: 유한개의 문자열 집합 중 하나의 값을 선택
- 성별: ENUM('남', '여')
- 혈액형: ENUM('A','B','O','AB')
예상하지 못한 값이 들어가지 않도록 값의 저장 범위를 제한할 수 있다.
제약조건
- 테이블과 테이블에 존재하는 데이터를 보다 무결하게 관리하기 위한 목적으로 사용
- DBMS는 테이블 조작 시 테이블에 정의된 제약조건을 만족시키는지 지속적으로 검사
- DBMS는 적용하려는 제약의 유형에 따라 다양한 제약 조건을 지원
제약 조건의 종류
- PRIMARY KEY: 기본키 지정, UNIQUE + NOT NULL 특성 (기본키와 완전히 동일. 테이블의 레코드 구분을 위함)
- FOREIGN KEY: 외래키 지정, 참조 컬럼 정의
- NOT NULL: NULL이 될 수 없는 컬럼에 지정
- UNIQUE: 동일한 컬럼값을 가질 수 없음을 지정 (중복될 수 없을 때)
- AUTO_INCREMENT: 레코드가 추가될 때 자동적으로 속성값이 1부터 1씩 증가되어 입력
- CHECK: 컬럼값이 특정 조건 준수 여부 지정
제약 조건의 사용
- 교수번호 PK, 소속학과 FK(학과 테이블의 PK가 참초되어 들어옴)

PRIMARY KEY(교수번호) :교수번호가 PK.
FOREIGN KEY(소속학과) REFERENCES 학과(학과이름) : 소속학과라는 컬럼이, 학과 테이블의 학과 이름이라는 컬럼을 참조하고 있다는 의미.
제약 조건의 응용

이 틀을 통해 회원이라는 테이블에 값을 넣으려고 할때, 어떻게 설정해야 할까?
