All
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
복사