사용자가 정해진 방식으로 요청하고 행과 열의 2차원 관계로 정의된 데이터(테이블 형태)의 생성, 수정, 삭제, 조회 가능(=CRUD)
관계형 데이터베이스 관리 시스템(RDBMS)
RDBMS는 메타 데이터를 총관 관리할 수 있기 때문에 데이터의 성격, 속성 또는 표현 방법 등을 체계화할 수 있고, 데이터 표준화를 통해 데이터 품질 확보 가능
RDBMS는 인증된 사용자만이 참조할 수 있도록 보안 기능 제공, 사용자가 실수로 조건에 위배되는 행동을 할 경우 이를 방지하여 데이터 무결성 보장
RDBMS는 시스템의 갑작스러운 장애로부터 사용자가 입력, 수정, 삭제하던 데이터가 제대로 반영될 수 있도록 보장해 주는 기능과 시스템 다운, 재해 등의 상황에서도 데이터를 회복/복구할 수 있는 기능 제공
🌟 SQL 언어 분류
데이터 정의 언어(DDL : Data Definition Language)
관계형 데이터데이스 구조를 정의하는데 사용
데이터를 저장하기 위한 데이터베이스의 기본 구조를 잡는데 사용
데이터를 저장하는 테이블을 만들거나 수정
테이블 생성, 변경, 삭제 가능
데이터 조작 언어(DML : Data Manipulation Language)
테이블에 저장된 데이터를 조작하는 데 사용
데이터 정의 언어로 생성된 구조를 실제 데이터로 채우는데 사용
데이터 삽입, 조회, 수정, 삭제 가능
데이터 제어 언어(DCL : Data Control Language)
데이터베이스에 접근하여 이를 제어하기 위한 권한을 관리
특정한 사용자의 데이터베이스 사용 권한을 부여 or 박탈
트랜잭션 제어어(TCL : Transaction Control Language)
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 트랜잭션별로 제어
이때 COMMIT, ROLLBACK 등의 명령어 수행 가능
트랜잭션 특징(ACID)
원자성 : 하나의 논리적인 단위로 묶여있는 트랜잭션이 데이터베이스에 모두 적용되거나 아니거나 둘 중 하나의 선택지만 있어야 함
일관성 : 트랜잭션의 작업 처리 결과는 항상 일관되어야 함
독립성 : 둘 이상의 트랜잭션이 동시에 진행되고 있는 상황에서 하나의 트랜잭션 결과가 다른 트랜잭션 결과에 영향 X
지속성 : 트랜잭션을 통해 특정한 작업이 마무리된 경우 결과는 데이터베이스에 영구적으로 반영
SQL Syntax
모든 SQL문(Statement)은 SELECT, INSERT, UPDATE 등과 같은 키워드로 시작
하나의 Statement는 세미콜론(;)으로 끝남
세미콜론(;)은 각각의 SQL문을 구분하는 표준 방법
SQL 키워드는 대소문자를 구분하지 않지만 대문자로 작성하는 것을 권장
SELECT col_name FROM table_name;
문(Statement) : 독립적으로 실행할 수 있는 완전한 SQL 코드 조각, 문(Statement)은 절(Clause)로 구성
절(Clause) : 문(Statement)의 하위 단위
테이블 Table
관계형 데이터베이스에서 데이터를 저장하는 기본 단위
행과 열로 구성된 2차원의 데이터 저장 구조
세로 방향을 칼럼(Column), 가로 방향을 행(Row)라고 부르고 이들이 교차하는 하나의 공간을 필드(Field)라 부름
열(column, 속성) : 테이블에 저장되는 데이터의 특징, 더 이상 나눌 수 없는 하나하나의 속성
행(row, 레코드) : 테이블에 저장되는 실제 데이터(인스턴스)
ERD(Entity-Relationship Diagram)
테이블 간 상관 관계를 이미지로 도식화한 것
Entity(개체), Relationship(관계), Attribute(속성)으로 구성
바커 표기법(Baker Notation)
Entity(개체) : 데이터베이스를 사용하는 주체가 지속적으로 보관하고 관리하는 대상
Attribute(속성) : 하나의 Entity에 종속되는 명사적 단어 - * (Mandatory) : 어떤 속성에 특정한 값을 반드시 저장해야 하는 경우 - o (Optional) : 값이 존재할 수도 아닐 수도 있는 경우
Relationship(관계) : 두 개의 Entity 간의 조건 관계를 표기한 후 해당하는 Entity의 가까운 위치에 관계 명칭 표기
I/E 표기법(Information Engineering Notation)
Entity(개체) : 바커 표기법과 마찬가지로 사용자가 추적하고자 하는 어떤 대상 의미
Attribute(속성) : 또한 바커 표기법과 마찬가지로 Entity의 특징을 기술해 주는 여러 개의 속성을 가질 수 있음
Relationship(관계) : 까마귀 발 부호를 통해 나타낼 수 있다.
Indentifying(식별관계) - 식별 관계의 경우 A 개체의 기본키가 B 개체의 외래키면서 동시에 기본키가 되는 관계 - 비식별 관계의 경우 A 개체의 기본키가 B 개체의 비기본키 영역에서 외래키가 되는 관계
DDL
주로 데이터를 저장하는 데이터베이스의 골격인 테이블을 다루는 언어로 구성
테이블의 구성 요소 중 가장 중요한 것은 칼럼을 정의하는 일
데이터 유형
데이터베이스에 데이터를 저장할 때 어떠한 데이터를 받을지 결정하는 기준
숫자, 문자열, 참/거짓 등의 자료형이 있음
데이터 크기
특정 칼럼을 설정할 때 데이터 종류를 설정하면서 크기 지정 가능
사전에 지정한 데이터 크기를 넘어서는 자료가 입력될 경우 에러 발생 or 의도하지 않은 데이터 저장
NUMERIC Type
숫자형 타입은 DB를 제공하는 회사별로 다른 기준 제공
SQL Server의 경우 ISO/ANSI 기준에 맞춰 작은 정수, 정수, 큰 정수, 실수 등으로 제공
Oracle의 경우 숫자형 타입은 NUMBER 타입이 대표적
NUMERIC.DECIMAL : 고정 소수점 숫자를 나타내는 데 사용
SMALLINT : 2Byte로 표현되는 작은 범위 정수
BIGINT : 4Byte로 표현되는 큰 범위 정수
FLOAT : 부동 소수점 숫자를 나타내는 데 사용
REAL : 4Byte 부동 소수점 숫자를 나타내는 데 사용
저장하고자 하는 숫자의 크기와 정밀도를 고려하여 선택
대표적인 데이터 유형
CHARACTER(S)
고정 길이의 문자열 정보이며 CHAR로 표현
기본 길이 1 Byte로 설정
최대 길이 Oracle 2,000 Bytes, SQL Server 8,000 Bytes
고정된 길이를 갖기 때문에 입력되는 값의 길이가 해당 길이보다 작은 경우 남은 부분 차이만큼 공백으로 채워짐
VARCHAR(S)
가변 길이의 문자열 정보이며 VARCHAR로 표현, Oracle의 경우 VARCHAR2로 표현
기본 길이 1 Byte로 설정
최대 길이 Oracle 4,000 Bytes, SQL Server 8,000 Bytes
최대 길이만큼의 크기를 가질 수 있지만 길이는 가변적으로 조정되기 때문에 입력되는 값의 Byte만큼만 적용
NUMERIC
정수, 실수 등의 숫자 정보
SQL Server의 경우 다양한 숫자 타입을 사용하지만, Oracle의 경우 NUMBER 숫자 타입이 대표적
DATETIME
날짜, 시각 등과 관련된 정보
SQL Server의 경우 DATETIME으로 표현하고, Oracle의 경우 DATE로 표현
문자열 비교
제약 조건
테이블에 부적절한 값이 들어오지 않도록 하는 규칙
마치 칼럼의 속성처럼 사용하지만 데이터베이스 입장에서는 각각의 개체이므로 고유의 이름(제약조건 명) 지정해주어야 함. 지정하지 않을 경우 DBMS가 자동으로 부여
NOT NULL - 필수로 데이터가 입력되어야 하는 칼럼에 설정
UNIQUE - 해당 컬럼에 들어가는 값이 테이블 전체에서 유일해야 함 ➡️ 중복값 허용 X - NOT NULL과 함께 사용 가능
PRIMARY KEY - 테이블 기본키 설정 - 기본적으로 NOT NULL + UNIQUE 제약조건을 함께 갖으며 테이블당 1개의 기본키만 설정 가능 - 여러 칼럼을 묶어 하나의 기본키로 사용 가능