방송대/데이터베이스 시스템
4강. SQL ( 1 )
monimoni
2025. 3. 10. 20:01
1. 데이터베이스 사용의 의미
- 데이터 사용과 데이터 관리 영역 구분
- 이 두 영역을 연결하는 것이 데이터베이스
2. SQL의 개념
- SQL ( Structured Query Language ) : 구조화된 질문하는 언어
- SQL은 관계대수에 기초해 RDBMS의 데이터 관리를 위해 1970년대 초 IBM에서 설계
- 1986년 ANSI, 1987년 ISO에서 표준으로 재정
- SQL-86, SQL-89, SQL-92, SQL : 1999, SQL : 2003, SQL : 2008
- 상용 DBMS의 특성에 맞게 국제표준을 확장한 독자적 버전이 존재
- SQL의 특징
- 비절차적( 선언형 ) 언어, 필요한 데이터만 기술
- 선언형 언어란?
- 프로그램이 어떤 방법으로 해야 하는지를 나타내기 보다 ‘무엇을’에 집중하는 언어
- 선언형 언어란?
- 편리하게 데이터를 저장, 수정, 삭제, 검색을 가능하게 하는 선언형 언어 SQL
- 인간의 언어와 매우 유사하고 간단, 명료
- 비절차적( 선언형 ) 언어, 필요한 데이터만 기술
3. SQL의 구성
- 데이터 정의 언어 ( DDL : Data Definition Language )
- 데이터베이스 내의 객체를 생성 및 삭제하고 그 구조를 조작하는 명령어의 집합
- 데이터를 저장할 수 있는 구조를 정의
- 데이터가 준수해야 하는 제약조건 기술
- 데이터 조작 언어 ( DML : Data Manipulation Language )
- DDL에 의해 정의된 테이블에 데이터를 조작하는 명령어의 집합
- 데이터에 대한 CRUD( 생성, 검색, 삭제, 수정 ) 명령을 포함
- 데이터 제어 언어 ( DCL : Data Control Language )
- DBMS의 동작, 접근 권한 등을 관리하는 SQL 명령어의 집합
4. 데이터 정의 언어의 개념 ( DDL )
- 데이터베이스 객체를 생성, 삭제 또는 구조를 수정하는 명령어의 집합
- 데이터베이스 객체의 종류
- 데이터 저장 : 스키마( 데이터베이스 ), 테이블, 인덱스, 뷰
- 데이터 조작 : 트리거, 프로시저, 함수 등
- 데이터 정의 명령어의 종류
- CREATE : 객체 생성
- ALTER : 객체 수정
- DROP : 객체 삭제
5. 데이터 정의 언어의 구문 형식
- 명령어 + 객체타입 + 객체 이름
- 명령어 : CREATE, ALTER, DROP
- 객체 : TABLE, INDEX, VIEW, SCHEMA
6. 스키마 정의 ( Schema )
- 스키마( Schema ) = 데이터베이스 ( Database )
- 테이블은 데이터베이스 또는 스키마를 먼저 생성해야 만들 수 있다.
- 한 조직의 데이터베이스 시스템의 운영에 필요한 테이블, 인덱스, 뷰 등의 데이터베이스 객체의 집합
- 스키마 관리 구문 형식
- 스키마 생성
- CREATE SCHEMA 스키마 이름
- CREATE DATABASE 스키마 이름
- 스키마 삭제
- DROP SCHEMA 스키마 이름
- DROP DATABASE 스키마 이름
- 스키마 생성
7. 릴레이션과 테이블
- RDBMS의 기본적 데이터 저장 구조
- 2차원 형태의 저장 구조인 점에서 유사
- 릴레이션 ( 이론적 )
- 데이터를 구성하는 추상적인 개념
- 집합론에 기반한 여러 속성을 갖는 레코드의 집합
- 레코드의 순서가 없으며 중복된 레코드가 존재하지 않음
- 테이블 ( 물리적 )
- 물리적으로 데이터를 저장하는 구체적인 개념
- 레코드의 순서가 존재 가능
- 키 제약에 따라 중복된 레코드가 존재 가능
8. 테이블 정의
- 새로운 2차원 형태의 테이블을 생성
CREATE TABLE 테이블이름 (
<컬럼1><데이터 타입1>[제약조건1][...
<컬럼2><데이터 타입2>[제약조건2][...
[PRIMARY KEY 컬럼명]
[UNIQUE 컬럼명]
[FOREIGN KEY 컬럼 PEFERENCES 테이블이름(컬럼)]
)
- 예시
CREATE TABLE 교수 (
교수번호 CHAR(13),
교수이름 CHAR(30),
직위 CHAR(10),
소속학과 CHAR(50),
연봉 INT
)
9. 데이터 타입의 개념
- 컬럼이 가질 수 있는 값의 범위, 즉 도메인을 결정
- 프로그래밍 언어에서의 변수를 생성 시 사용하는 데이터 타입의 사용목적과 방법이 매우 유사
- 기본 데이터 타입
- 문자
- CHAR, VARCHAR, TEXT
- 숫자
- INT, FLOAT, DOUBLE, DECIMAL
- 날짜 / 시간
- DATE, TIME, DATETIME, TIMESTAMP
- 문자
10. 정수 데이터 타입
- TINYINT : 1바이트 정수 ( -128 ~ 127 )
- ex ) 나이, 학년 등의 크기가 작은 정수
- SMALLINT : 2바이트 정수 ( -32768 ~ 32767 )
- ex ) 물품번호, 인원 등 중간 크기의 정수
- INT : 4바이트 정수 ( 약 -20억 ~ 20억 )
- ex ) 물품의 금액, 전화번호 등의 일반 크기의 정수
- BIGINT : 8바이트 정수 ( -9000경 ~ 9000경 )
- ex ) 계좌의 잔고, 천문학적인 크기의 정수
11. 실수 데이터 타입
- 부동 소수형 ( 정수와 소수의 자리수가 고정 X )
- FLOAT : 4바이트 크기 부동 소수
- FLOAT(P) : 소수점 이하 P개 자리의 부동 소수
- DOUBLE : 8바이트 크기 부동 소수
- 고정 소수형 ( 정수와 소수의 자리수가 고정 O )
- DECIMAL(M,N) : 전체 M자리, 소수점 이하 N자리의 소수를 저장
- NUMERIC : DECIMAL과 유사
12. 날짜 및 시간 데이터 타입
- 날짜 데이터 타입
- DATE : ‘YYYY-MM-DD’형식의 개념
- YEAR : ‘YYYY’ 형식의 연도
- 시간 데이터 타입
- TIME : ‘HH:MI:SS’형식의 시간
- 날짜 및 시간 데이터 타입
- DATETIME : ‘YYYY-MM-DD HH:MI:SS’ 형식의 날짜 및 시간
- TIMESTAMP : DATETIME과 유사
- 유닉스 시간(UTC) 기반 1970년 ~ 2038년 표현 가능
- DBMS 서버의 시간대에 따라 시간 변경
13. 문자 데이터 타입 1
- CHAR(N) : 최대 길이가 N인 고정 길이 문자열
- VARCHAR(N) : 최대 길이가 N인 가변길이 문자열
- ex ) ‘DATABASE’ 문자열 저장시
- CHAR(10) : 길이가 10으로 고정, 남은 2자리를 빈칸으로 둠
- VARCHAR(10) : 길이가 가변적이기에 길이가 8로 됨
- 데이터 수정으로 길이 변동이 일어나면 실행시간이 길어짐
- 권장 사항
- 글자의 수가 일정하고 길이의 변화가 크지 않으면 CHAR
- 레코드마다 글자 길이에 큰 편자가 있으면 VARCHAR
- 레코드마다 글자 길이에 큰 편차가 있고, 변화의 빈도가 크다면 CHAR
14. 문자 데이터 타입 2
- TEXT
- 길이가 최대 2~4GB인 가변길이 문자열
- 레코드 단위가 아닌 별도의 저장 공간을 부여하는 외부 저장 방식
- CLOB ( Character Large Object )
- 수백 MB ~ 수 GB의 데이터 저장을 위한 타입
- 레코드 단위가 아닌 별도의 저장 공간을 부여하는 외부 저장 방식
- ENUM
- 유한개의 문자열 집합 중 하나의 값을 선택
- 효율적인 저장 및 처리를 위해 내부적으로 숫자 저장
- ex ) 성별 : ENUM(’남’, ’여’)
15. 제약 조건
- 테이블에 존재하는 데이터를 무결하고 세밀하게 관리하기 위한 목적으로 사용
- DBMS는 테이블 조작 시 테이블에 정의된 제약조건을 만족시키는지 지속적으로 검사
- 레코드의 입력, 수정, 삭제 요청 시 정의된 제약조건의 준수 여부를 검사한 후 실행
- 데이터의 일관성과 무결성 훼손을 방지
- DBMS는 적용하려는 제약의 유형에 따라 다양한 제약 조건을 지원
16. 제약조건의 종류
- PRIMARY KEY ( PK )
- 기본키 지정, UNIQUE와 NOT NULL 특성
- FOREIGN KEY ( FK )
- 외래키 지정, 참조 컬럼 정의
- NOT NULL
- NULL이 될 수 없는 컬럼에 지정
- UNIQUE
- 동일한 컬럼값을 가질 수 없음을 지정
- AUTO_INCREMENT
- 레코드가 추가될 때, 자동적으로 속성값이 1부터 1씩 증가되어 입력
- CHECK
- 컬럼값이 특성 조건 준수 여부 지정
17. 제약조건 사용
CREATE TABLE 교수 (
교수번호 CHAR(13) NOT NULL,
교수이름 CHAR(30) NOT NULL,
직위 ENUM('조교수', '부교수', '정교수'),
소속학과 CHAR(50) NOT NULL,
연봉 INT. NOT NULL,
PRIMARY KEY(교수번호),
FOREIGN KEY(소속학과) PEFERENCES 학과(학과이름)
)
18. 테이블 수정
- CREATE문에 의해 생성된 테이블에 컬럼을 추가, 수정( 이름, 데이터 타입, 제약조건 ) 또는 삭제
- 컬럼 삭제 또는 데이터 타입 수정 시 데이터에 대한 소실이 발생하기에 많은 주의가 요구
- DDL을 삭제한 데이터는 복구가 불가능
- 예시
ALTER TABLE 테이블이름
[ADD COLUMN 컬럼 데이터타입[제약조건]]
[DROP COLUMN 컬럼이름]
[CHANGE COLUMN 수정전컬럼 수정후컬럼]
[MODIFY COLUMN 컬럼 데이터타입]
19. 데이터 수정 질의 사용
- 교수 Table에 데이터 타입이 VARCHAR(100)인 전공 컬럼 추가
- ALTER TABLE 교수 ADD COLUMN 전공 VARCHAR(100)
- 교수 Table에서 직위 컬럼 삭제
- ALTER TABLE 교수 DROP COLUMN 직위
20. 테이블 삭제
- 존재하는 테이블을 스키마에서 삭제
- 삭제된 테이블에 저장된 모든 데이터가 소실, 복구가 불가능한 연산이므로 각별한 주의가 요구
- 삭제할 테이블을 참조하는 다른 테이블이 존재하는 경우, 이는 참조 무결성 제약조건 위반
- 삭제하는 방법
- 참조를 해지 후 삭제 진행
- 참조되는 FK를 모두 NULL로 바꾼 후 테이블 삭제
- 삭제하는 방법
- ex ) DROP TABLR 테이블이름
728x90