Search

[데이터베이스 시스템] SQL - DDL & DML

제목
Tag
작성일

SQL(Structed Query Language)

관계대수에 기초해 RDBMS의 데이터 관리를 위해 1970년대 초 IBM에서 설계
비 절차적 (선언형) 언어, 필요한 데이터만 기술하는 간단 명료한 언어

데이터 정의 언어(DDL: Data Definition Language)

데이터베이스 내의 객체를 생성 및 삭제하고 그 구조를 조작하는 명령어 집합
데이터가 준수해야 하는 제약 조건 기술

데이터베이스 객체의 종류

데이터 저장: 스키마, 테이블, 인덱스, 뷰
데이터 조작: 트리거, 프로시저, 함수 등

데이터 정의 명령어 종류

CREATE: 객체 생성
ALTER: 객체 수정
DROP: 객체 삭제

릴레이션과 테이블

RDBMS의 기본적 데이터 저장구조로 2차원 형태
릴레이션
데이터를 구성하는 추상적인 개념
레코드의 순서와 중복된 레코드 없음
테이블
물리적으로 데이터를 저장하는 구체적인 개념
레코드의 순서가 있고 키 제약에 따라 중복된 레코드 존재 가능

데이터 타입

컬럼이 가질수 있는 값의 범위 (도메인)
정수 데이터 타입
TINYINT: 1바이트 정수 (-128~127)
SAMLLINT: 2바이트 정수(-32768~32767)
INT: 4바이트 정수(약 -20억 ~ 약 20억)
BIGINT: 8바이트 정수(약 9000경 ~ 약9000경)
실수 데이터 타입
부동 소수형
FLOAT: 4바이트 크기 부동 소수
DOUBLE: 8바이트 크기 부동 소수
고정 소수형
DECIMAL(M, N): 전체 M자리 소수점 이하 N자리 소수점 저장
날짜 및 시간 데이터 타입
DATE: 'YYYY-MM-DD' 형식의 시간
YEAR: 'YYYY' 형식의 연도
TIME: 'HH:MI:SS' 형식의 시간
DATETIME: 'YYYY-MM-DD HH:MI:SS' 형식의 날짜 및 시간
TIMESTAMP: DATETIME과 유사하지만 유닉스 시간 기반 1970년 ~ 2038년까지만 표현 가능, DBMS 서버의 시간대에 따라 시간 변경
문자 데이터 타입
CHAR: 고정된 길이의 문자열
VARCHAR: 가변 문자열
TEXT: 길이 2~4GB인 가변길이 문자열
CLOB: 수 GB 데이터 저장을 위한 타입, 레코드 단위가 아닌 별도의 저장공간을 부여하는 외부 저장방식
ENUM: 유한개의 문자열 집합 중 하나의 값 선택

제약 조건

데이터를 무결하고 세밀하게 관리하기 위한 목적으로 사용하며, DBMS는 테이블 조작 시 테이블에 정의된 제약조건을 만족시키는지 지속적으로 검사

제약조건 종류

PRIMARY KEY: 기본키 지정 (UNIQUE & NOT NULL)
FOREIGN KEY: 외래키 지정, 참조 컬럼 정의
NOT NULL: NULL이 될 수 없음
UNIQUE: 동일 컬럼값 가질 수 없음
AUTO\_INCREMENT: 레코드가 추가될때 자동으로 속성값이 1부터 1씩 증가
CHECK: 컬럼 값이 특정 조건을 준수 여부 지정
테이블 수정: CREATE 문에 의해 생성된 테이블에 컬럼을 추가, 수정 또는 삭제
테이블 삭제: 존재하는 테이블을 스키마에서 삭제
→ 테이블 수정과 삭제는 데이터가 소실되는 행동이므로 신중하게 적용해야함

데이터 조작 언어(DML: Data Manipulation Language)

DDL에 의해 정의된 테이블에 데이터를 조작하는 명령어의 집합
데이터에 대한 CRUD 명령을 포함
영구적 변경이 아닌 복구가 가능한 점이 DDL과의 차이점

INSERT

테이블에 새로운 레코드 삽입하는 명령어
모든 컬럼이나 부분 컬럼에 대한 컬럼값 입력
NOT NULL 제약 조건이 있는 컬럼은 반드시 컬럼값 입력
문자와 날짜 값은 따옴표(') 처리
테이블에서 검색의 결과를 새로운 레코드로 삽입할 때도 사용가능
-- 모든 컬럼에 값을 삽입 INSERT INTO 학생 (학번, 이름, 전공) VALUES (2023001, '김철수', '컴퓨터공학'); -- 일부 컬럼만 값 삽입 (전공은 NULL 처리됨) INSERT INTO 학생 (학번, 이름) VALUES (2023002, '이영희'); -- 다른 테이블에서 SELECT한 데이터를 삽입 INSERT INTO 학생 (학번, 이름, 전공) SELECT 신입학번, 신입이름, 신입전공 FROM 신입생;
SQL
복사

UPDATE

조건을 만족하는 레코드의 특정 컬럼값을 수정
-- 특정 학생의 전공을 변경 UPDATE 학생 SET 전공 = '데이터사이언스' WHERE 학번 = 2023001; -- 여러 개의 컬럼을 동시에 수정 UPDATE 학생 SET 전공 = '경영학', 이름 = '박영수' WHERE 학번 = 2023002;
SQL
복사

DELETE

조건에 일치하는 레코드 집합을 테이블에서 삭제할때 사용하는 명령어
-- 특정 학생 정보 삭제 DELETE FROM 학생 WHERE 학번 = 2023002; -- 모든 학생 데이터를 삭제 (테이블은 유지됨) DELETE FROM 학생; -- 특정 조건을 만족하는 학생 삭제 DELETE FROM 학생 WHERE 전공 = '화학';
SQL
복사

SELECT

한개 이상의 테이블에서 주어진 조건에 만족하는 레코드를 출력하는 명령문

SELECT의 구문형식

SELECT 절: 조회할 컬럼(속성)을 지정
FROM 절: 데이터를 조회할 테이블을 지정
ON 절: JOIN을 통해 여러 테이블을 연결할 때 연결 조건을 정의
WHERE 절: 조건을 지정하여 원하는 데이터만 필터링
GROUP BY 절: 특정 컬럼 기준으로 데이터를 그룹화
HAVING 절: 그룹화된 데이터에 대해 조건을 적용할 때 사용
ORDER BY 절: 결과를 특정 컬럼 기준으로 정렬하여 출력

조건 SELECT

조건에 따라 원하는 데이터를 추출할 때 WHERE 절을 사용하여 구체적인 조건을 설정. 비교 연산자, 산술 연산자, 논리 연산자를 이용하여 복잡한 조건 표현이 가능함
비교 연산자
= : 같다
<> 또는 != : 같지 않다
> : 크다
< : 작다
>= : 크거나 같다
<= : 작거나 같다
산술 연산자
+: 덧셈
- : 뺄셈
* : 곱셈
/ : 나눗셈
논리 연산자
AND : 모든 조건이 참일 때 참
OR : 하나의 조건이라도 참이면 참
NOT : 조건의 결과를 반전
-- 모든 학생 정보 조회 SELECT * FROM 학생; -- 특정 컬럼(이름, 전공)만 조회 SELECT 이름, 전공 FROM 학생; -- 특정 조건(전공이 '컴퓨터공학'인 학생) 조회 SELECT 이름, 학번 FROM 학생 WHERE 전공 = '컴퓨터공학'; -- 정렬 (ORDER BY) - 학번 오름차순 조회 SELECT * FROM 학생 ORDER BY 학번 ASC; -- 그룹화 (GROUP BY) - 각 전공별 학생 수 조회 SELECT 전공, COUNT(*) AS 학생수 FROM 학생 GROUP BY 전공; -- 그룹화 후 특정 조건 필터링 (HAVING) - 학생이 3명 이상인 전공만 조회 SELECT 전공, COUNT(*) AS 학생수 FROM 학생 GROUP BY 전공 HAVING COUNT(*) >= 3;
SQL
복사