
💡 1분 핵심 요약 (TL;DR)
- ✅ INSERT — 테이블에 새로운 튜플(행)을 삽입하는 명령어, 직접 삽입과 SELECT문을 이용한 삽입이 있음
- ✅ UPDATE / DELETE — SET·WHERE 절로 원하는 튜플만 골라 수정하거나 삭제
- ✅ View(뷰) — 실제 데이터를 저장하지 않는 가상 테이블, CREATE VIEW로 생성하고 DROP VIEW로 삭제
- ✅ DB 설계 5단계 — 요구사항 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현
데이터베이스(DB)를 실제로 다루려면 테이블에 데이터를 넣고, 바꾸고, 지우는 SQL(Structured Query Language, 구조화 질의어) 기본 명령어를 알아야 합니다. 여기에 더해 데이터를 안전하고 편리하게 다루기 위한 뷰(View), 그리고 데이터베이스 자체를 어떻게 설계하는지도 함께 정리해봤습니다. 이번 포스팅에서는 데이터 삽입·수정·삭제, 뷰의 개념과 활용, DB 설계 5단계까지 한 번에 훑어보겠습니다.
01 데이터 삽입 (INSERT)
테이블에 새로운 튜플을 넣는 두 가지 방법
데이터를 삽입하는 방법은 크게 두 가지입니다. 값을 직접 나열해서 넣는 직접 삽입과, 다른 테이블에서 검색한 결과를 그대로 넣는 부속 질의문을 이용한 삽입입니다.
1) 테이블에 튜플 직접 삽입
INSERT 기본 문법
INSERT
INTO 테이블_이름[(속성_리스트)]
VALUES (속성값_리스트);
📖 문법 포인트
· INTO 키워드와 함께 삽입할 테이블 이름·속성 이름을 나열
· VALUES 키워드와 함께 삽입할 값들을 나열
· INTO 절의 속성 이름과 VALUES 절의 값은 순서대로 일대일 대응
예제) 고객 아이디 strawberry, 이름 최유경, 나이 30, 등급 vip, 직업 공무원, 적립금 100원인 고객을 삽입해보겠습니다.
고객 테이블에 신규 고객 삽입
INSERT
INTO 고객(고객아이디, 고객이름, 나이, 등급, 직업, 적립금)
VALUES ('strawberry', '최유경', 30, 'vip', '공무원', 100);
SELECT * FROM 고객;
| 고객아이디 | 고객이름 | 나이 | 등급 | 직업 | 적립금 |
| apple | 정소화 | 20 | gold | 학생 | 1000 |
| banana | 김선우 | 25 | vip | 간호사 | 2500 |
| carrot | 고명석 | 28 | gold | 교사 | 4500 |
| orange | 김용욱 | 22 | silver | 학생 | 0 |
| melon | 성원용 | 35 | gold | 회사원 | 5000 |
| peach | 오형준 | (null) | silver | 의사 | 300 |
| pear | 채광주 | 31 | silver | 회사원 | 500 |
| strawberry | 최유경 | 30 | vip | 공무원 | 100 |
✅ 맨 아래 strawberry 행이 새로 삽입된 결과입니다.
2) 부속 질의문을 이용한 삽입
값을 하나하나 나열하지 않고, SELECT문으로 다른 테이블에서 검색한 결과를 그대로 삽입할 수도 있습니다. 예를 들어 한빛제과에서 만든 제품만 골라 별도 테이블로 옮기고 싶을 때 사용합니다.
SELECT문을 이용한 삽입 (한빛제과 제품만 이동)
INSERT
INTO 한빛제품(제품명, 재고량, 단가)
SELECT 제품명, 재고량, 단가
FROM 제품
WHERE 제조업체 = '한빛제과';
✓ 핵심
INTO 절에는 삽입될 테이블과 속성을, SELECT~WHERE 절에는 데이터를 가져올 원본 테이블과 조건을 지정합니다. 두 문법을 조합해 조건에 맞는 데이터만 골라 다른 테이블로 옮길 수 있습니다.

02 데이터 수정 (UPDATE)
SET·WHERE로 원하는 값만 골라 바꾸기
UPDATE 기본 문법
UPDATE 테이블_이름
SET 속성_이름1 = 값1, 속성_이름2 = 값2, …
[WHERE 조건];
📖 문법 포인트
· SET 키워드 다음에 값을 어떻게 수정할지 지정
· WHERE 절에 제시된 조건을 만족하는 튜플만 값을 수정 (WHERE를 생략하면 전체 튜플이 수정됨)
예제 1) 특정 제품명 수정
제품번호가 p03인 제품의 제품명을 통큰파이로 수정해봅니다.
제품명 수정 (p03 → 통큰파이)
UPDATE 제품
SET 제품명 = '통큰파이'
WHERE 제품번호 = 'p03';
| 제품번호 | 제품명 | 재고량 | 단가 | 제조업체 |
| p01 | 그냥만두 | 5000 | 4500 | 대한식품 |
| p02 | 매운쫄면 | 2500 | 5500 | 민국푸드 |
| p03 | 통큰파이 | 3600 | 2600 | 한빛제과 |
| p04 | 맛난초콜릿 | 1250 | 2500 | 한빛제과 |
| p05 | 얼큰라면 | 2200 | 1200 | 대한식품 |
| p06 | 통통우동 | 1000 | 1550 | 민국푸드 |
| p07 | 달콤비스킷 | 1650 | 1500 | 한빛제과 |
예제 2) 전체 단가 10% 인상
WHERE 절을 생략하면 모든 튜플이 대상이 됩니다. 제품 테이블의 모든 단가를 10% 인상해보겠습니다.
전체 단가 10% 인상
UPDATE 제품
SET 단가 = 단가*1.1;
▶ 실행 결과 (WHERE 없이 전체 대상 실행)
p01 4500 → 4950 | p02 5500 → 6050
p03 2600 → 2860 | p04 2500 → 2750
p05 1200 → 1320 | p06 1550 → 1705
p07 1500 → 1650 (7개 행 전부 10%씩 인상됨)
📖 심화) WHERE에 다른 테이블 조건을 걸고 싶다면?
예를 들어 "정소화 고객이 주문한 제품의 수량을 5개로 수정"처럼 다른 테이블의 조건이 필요할 땐 부속 질의문(서브쿼리)을 WHERE에 활용합니다.
UPDATE 주문
SET 수량 = 5
WHERE 주문고객 = (SELECT 고객아이디 FROM 고객 WHERE 고객이름 = '정소화');
03 데이터 삭제 (DELETE)
조건에 맞는 튜플만, 혹은 전체 튜플을 삭제
DELETE 기본 문법
DELETE
FROM 테이블_이름
[WHERE 조건];
예제) 주문일자가 2022년 5월 22일인 주문 내역을 삭제해보겠습니다.
특정 주문일자의 튜플만 삭제
DELETE
FROM 주문
WHERE 주문일자 = '22/05/22';
▶ 실행 결과 (삭제 후 SELECT * FROM 주문)
o01~o09 총 9건 유지
o10 (carrot, p03, 22/05/22) 삭제됨
WHERE 절 없이 DELETE FROM 주문;을 실행하면 테이블의 모든 튜플이 삭제됩니다.
⚠️ 전공·면접 단골 비교 — DELETE vs TRUNCATE vs DROP
셋 다 데이터를 지운다는 점은 같지만 지우는 범위, 속도, 롤백 가능 여부가 완전히 다릅니다. 아래 표로 한 번에 정리했습니다.
| 명령어 | 분류 | 삭제 범위 / 특징 | 롤백 |
| DELETE | DML | 한 줄씩 지우며 로그를 남김. 테이블 구조는 남고 데이터(조건에 맞는 튜플 또는 전체)만 삭제. 속도는 느림 | 가능 |
| TRUNCATE | DDL | 테이블 구조는 남기고 데이터만 한 번에 통째로 삭제. 로그를 최소화해 속도가 매우 빠름 | 불가 |
| DROP | DDL | 테이블의 구조(껍데기) 자체를 데이터와 함께 완전히 삭제 | 불가 |
💡 DML과 트랜잭션 (COMMIT / ROLLBACK)
INSERT, UPDATE, DELETE는 모두 데이터 조작어(DML)입니다. DROP·TRUNCATE 같은 데이터 정의어(DDL)는 실행 즉시 DB에 영구 반영되지만, DML은 실행했다고 해서 곧바로 완전하게 저장되는 것이 아닙니다. 이 작업을 데이터베이스에 영구히 반영할지(COMMIT), 아니면 실수로 지웠거나 오류가 나서 실행 전 상태로 되돌릴지(ROLLBACK)를 결정해야 합니다. (단, 일부 DBMS 도구는 Auto-Commit이 기본으로 설정되어 있어 별도 COMMIT 없이도 즉시 반영되기도 합니다.)
04 View (뷰)
데이터를 저장하지 않는 가상 테이블
📖 뷰(View)란?
다른 테이블(기본 테이블)을 기반으로 만들어진 가상 테이블입니다. 데이터를 실제로 저장하지 않고 논리적으로만 존재하며, 일반 테이블과 똑같은 방법으로 SELECT할 수 있습니다. 단, 뷰를 통해 기본 테이블의 내용을 바꾸는 작업은 제한적입니다.

뷰 생성 : CREATE VIEW
CREATE VIEW 기본 문법
CREATE VIEW 뷰_이름[(속성_리스트)]
AS SELECT 문
[WITH CHECK OPTION];
📖 문법 포인트
· 속성 리스트를 생략하면 SELECT 절에 나열된 속성명을 그대로 사용
· SELECT 문은 뷰의 정의를 표현하며 ORDER BY는 사용 불가
· WITH CHECK OPTION : 뷰에 삽입·수정 연산을 할 때 뷰의 정의 조건을 위반하면 실행되지 않도록 막는 제약조건
예제 1) 등급이 vip인 고객만 모은 '우수고객' 뷰를 만들어보겠습니다.
우수고객 뷰 생성
CREATE VIEW 우수고객(고객아이디, 고객이름, 나이, 등급)
AS SELECT 고객아이디, 고객이름, 나이, 등급
FROM 고객
WHERE 등급 = 'vip'
WITH CHECK OPTION;
SELECT * FROM 우수고객;
| 고객아이디 | 고객이름 | 나이 | 등급 |
| banana | 김선우 | 25 | vip |
✓ WITH CHECK OPTION의 힘
뷰가 만들어진 뒤 우수고객 뷰에 'vip' 등급이 아닌 고객 데이터를 삽입하거나, 뷰의 정의 조건(등급 = 'vip')을 위반하는 수정·삭제를 시도하면 실행이 거부됩니다.
예제 2) 제조업체별 제품 수를 보여주는 '업체별제품수' 뷰도 만들어봅니다. GROUP BY와 집계 함수를 미리 뷰에 담아두면 매번 복잡한 질의를 다시 쓸 필요가 없습니다.
업체별제품수 뷰 생성
CREATE VIEW 업체별제품수(제조업체, 제품수)
AS SELECT 제조업체, COUNT(*)
FROM 제품
GROUP BY 제조업체;
| 제조업체 | 제품수 |
| 대한식품 | 2 |
| 민국푸드 | 2 |
| 한빛제과 | 3 |
※ '제품수'는 기본 테이블에 원래 있던 속성이 아니라 집계 함수로 새로 계산된 값이므로, 속성 이름을 반드시 명확히 지정해야 합니다.
뷰 활용 : SELECT / INSERT / UPDATE / DELETE
뷰에 대한 SELECT는 내부적으로 기본 테이블에 대한 SELECT로 변환되어 수행되기 때문에 검색 연산은 모든 뷰에 항상 가능합니다. 반면 삽입·수정·삭제는 실제로 기본 테이블에 반영되는 작업이라 제한적으로만 허용됩니다.
❌ 변경이 불가능한 뷰의 특징
· 기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰
· 기본 테이블에서 NOT NULL로 지정된 속성이 빠진 뷰
· 집계 함수로 새로 계산된 내용을 포함하는 뷰
· DISTINCT 키워드를 포함하여 정의한 뷰
· GROUP BY 절을 포함하여 정의한 뷰
· 여러 테이블을 조인하여 정의한 뷰 (대부분 변경 불가능)
뷰의 장점
| 장점 | 설명 |
| 질의문 작성이 쉬워짐 | GROUP BY·집계 함수·조인을 미리 뷰로 만들어두면 복잡한 SQL 대신 SELECT~FROM만으로 원하는 데이터 검색 가능 |
| 데이터 보안 유지 | 자신에게 제공된 뷰를 통해서만 데이터에 접근하도록 권한 설정 가능 |
| 데이터 관리가 편리 | 제공된 뷰와 관련 없는 다른 내용은 사용자가 신경 쓸 필요 없음 |
뷰 삭제 : DROP VIEW
DROP VIEW 문법
DROP VIEW 뷰_이름;
⚠️ 주의
뷰를 삭제해도 기본 테이블은 영향을 받지 않습니다. 다만 삭제할 뷰를 참조하는 제약조건(예: 그 뷰를 기반으로 만든 다른 뷰)이 존재하면 삭제가 수행되지 않으며, 관련된 제약조건을 먼저 삭제해야 합니다.
05 데이터베이스 설계 5단계
요구사항 분석부터 구현까지
데이터베이스 설계는 사용자의 다양한 요구 사항을 고려해 데이터베이스를 생성하는 과정입니다. 대표적인 방법은 E-R 모델과 릴레이션 변환 규칙을 이용한 설계이며, 아래 5단계를 거칩니다.
| ① 요구사항 분석 | → | ② 개념적 설계 | → | ③ 논리적 설계 | → | ④ 물리적 설계 | → | ⑤ 구현 |
※ 설계 중 오류를 발견하면 이전 단계로 되돌아가 내용을 변경할 수 있습니다.

| 단계 | 목적 | 결과물 |
| ① 요구사항 분석 | 데이터베이스의 용도 파악 | 요구사항 명세서 |
| ② 개념적 설계 | DBMS에 독립적인 개념적 구조 설계 | 개념적 스키마 (E-R 다이어그램) |
| ③ 논리적 설계 | DBMS에 적합한 논리적 구조 설계 | 논리적 스키마 |
| ④ 물리적 설계 | DBMS로 구현 가능한 물리적 구조 설계 | 물리적 스키마 |
| ⑤ 구현 | SQL 작성 후 DBMS에서 실행해 DB 생성 | 실제 데이터베이스 |
1단계 : 요구사항 분석
사용자의 요구 사항을 수집·분석해 개발할 데이터베이스의 용도를 파악하는 단계입니다. 데이터베이스를 실제로 사용할 주요 사용자 범위 결정, 업무 분석, 면담·설문·문서 분석을 통한 요구 사항 수집이 주요 작업이며, 결과물로 요구사항 명세서를 작성합니다.
2단계 : 개념적 설계 (개체·속성 추출)
DBMS에 독립적인 개념적 구조를 설계하는 단계로, 결과물은 E-R 다이어그램입니다. 작업 순서는 ① 개체와 속성 추출 → ② 개체 간 관계 결정 → ③ E-R 다이어그램 작성 3단계로 진행됩니다.
📖 개체 추출 방법 (요구사항 문장에서 명사 찾기)
· 요구 사항 문장에서 업무와 관련이 깊은 의미 있는 명사를 찾음
· 업무와 관련이 적은 일반적·광범위한 명사는 제외
· 의미가 같은 명사가 여러 개면 대표 명사 하나만 선택
· 찾아낸 명사를 개체와 속성으로 분류
예를 들어 "한빛 마트에 회원으로 가입하려면 회원아이디, 비밀번호, 이름, 나이, 직업을 입력해야 한다"라는 요구사항 문장에서 '한빛 마트'는 광범위한 의미이므로 제외하고, '회원'을 개체로, 나머지 명사들을 속성으로 분류합니다. 이런 방식으로 14개 요구 사항 문장을 분석하면 아래와 같은 개체·속성이 추출됩니다.
| 개체 | 주요 속성 | 키 속성 |
| 회원 | 회원아이디, 비밀번호, 이름, 나이, 직업, 등급, 적립금 | 회원아이디 |
| 상품 | 상품번호, 상품명, 재고량, 단가 | 상품번호 |
| 주문 | 주문번호, 주문수량, 배송지, 주문일자 | 주문번호 |
| 제조업체 | 제조업체명, 전화번호, 위치, 담당자 | 제조업체명 |
| 게시글 | 글번호, 글제목, 글내용, 작성일자 | 글번호 |
개체 간 관계도 요구사항 문장 속에 이미 드러나 있습니다. "회원은 여러 상품을 주문할 수 있고, 하나의 상품을 여러 회원이 주문할 수 있다"는 회원과 상품이 N:M 관계임을, "각 상품은 한 제조업체가 공급하고, 제조업체 하나는 여러 상품을 공급할 수 있다"는 제조업체와 상품이 1:N 관계임을 보여줍니다. 이렇게 추출된 개체·속성·관계를 다음 단계에서 E-R 다이어그램으로 표현하게 됩니다.
📖 심화) 3단계 : 논리적 설계 (릴레이션 변환)
2단계에서 만든 E-R 다이어그램을 실제 DBMS가 이해할 수 있는 테이블(릴레이션) 구조로 변환하는 단계입니다. 이때 1:N 관계는 외래키(Foreign Key)로 연결하고, M:N 관계는 새로운 교차 테이블을 만들어 해소하는 등의 '릴레이션 변환 규칙(Mapping Rule)'이 적용됩니다. 예를 들어 앞서 살펴본 회원-상품의 N:M 관계는 '주문'이라는 교차 테이블로, 제조업체-상품의 1:N 관계는 상품 테이블에 제조업체명을 외래키로 넣는 방식으로 풀어낼 수 있습니다.

📌 핵심 정리
· INSERT : INTO(테이블·속성) + VALUES(값) 순으로 튜플 삽입, SELECT문으로 다른 테이블 데이터도 삽입 가능
· UPDATE : SET으로 값을 지정하고 WHERE로 대상 튜플을 한정 (WHERE 생략 시 전체 수정)
· DELETE : WHERE 조건에 맞는 튜플만 삭제, WHERE 없으면 전체 삭제 (DML, 롤백 가능)
· TRUNCATE : 테이블 구조는 유지, 데이터만 한 번에 통째로 삭제 (DDL, 롤백 불가, 속도 빠름)
· DROP : 테이블 구조 자체를 데이터와 함께 완전히 삭제 (DDL, 롤백 불가)
· COMMIT / ROLLBACK : DML 실행 결과를 영구 반영(COMMIT)하거나 실행 전으로 되돌림(ROLLBACK)
· View : 기본 테이블 기반의 가상 테이블, CREATE VIEW로 생성·DROP VIEW로 삭제, 검색은 항상 가능하나 삽입·수정·삭제는 제한적
· DB 설계 5단계 : 요구사항 분석 → 개념적 설계(E-R 다이어그램) → 논리적 설계(릴레이션 변환) → 물리적 설계 → 구현
태그 : SQL INSERT UPDATE DELETE 차이데이터 삽입 삭제 갱신View란뷰 생성 CREATE VIEW 문법WITH CHECK OPTION변경 불가능한 뷰DELETE DROP TABLE 차이데이터베이스 설계 5단계개체 관계 모델 E-R 다이어그램요구사항 분석 개체 추출
'이전 수업 노트 > 데이터베이스 개론' 카테고리의 다른 글
| 10. 정규화 - 이상 현상, 함수적 종속성, 정규화 단계 (0) | 2026.07.08 |
|---|---|
| 9. 데이터베이스 설계 - 관계 추출, 논리적 설계 규칙, 테이블 명세서 (0) | 2026.07.07 |
| 7. 데이터베이스 언어 - DDL, DML, DCL, CREATE, ALTER, DROP (0) | 2026.06.18 |
| 6. 관계 데이터 연산 (2) - 셀렉트, 프로젝트, 조인, 디비전, 관계 해석 (0) | 2026.06.17 |
| 5. 관계 데이터 연산 (1) - 데이터 모델, 관계 대수, 카티션 프로덕트 (0) | 2026.06.16 |

