SQL(Structed Query Language)
SQL이란
- 관계대수에 기초해 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 신입생;
UPDATE
- 조건을 만족하는 레코드의 특정 컬럼값을 수정
-- 특정 학생의 전공을 변경
UPDATE 학생
SET 전공 = '데이터사이언스'
WHERE 학번 = 2023001;
-- 여러 개의 컬럼을 동시에 수정
UPDATE 학생
SET 전공 = '경영학', 이름 = '박영수'
WHERE 학번 = 2023002;
DELETE
- 조건에 일치하는 레코드 집합을 테이블에서 삭제할때 사용하는 명령어
SELECT
- 한개 이상의 테이블에서 주어진 조건에 만족하는 레코드를 출력하는 명령문
-- 특정 학생 정보 삭제
DELETE FROM 학생
WHERE 학번 = 2023002;
-- 모든 학생 데이터를 삭제 (테이블은 유지됨)
DELETE FROM 학생;
-- 특정 조건을 만족하는 학생 삭제
DELETE FROM 학생
WHERE 전공 = '화학';
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;
'CS > 데이터베이스시스템' 카테고리의 다른 글
저장 객체 - 저장 프로시저/함수/트리거 (0) | 2025.04.27 |
---|---|
정규화 (0) | 2025.04.27 |
SQL - 특수 연산자, 함수, 조인, 뷰 (0) | 2025.03.31 |
3강 관계형 모델 (0) | 2025.03.16 |
1강 데이터베이스의 이해 & 2강 데이터베이스의 모델 (0) | 2025.03.04 |