학습(공부)하는 블로그 :: 7. 데이터베이스 언어 - DDL, DML, DCL, CREATE, ALTER, DROP
 

 
반응형
블로그 이미지
학습하고 공부한 것을 보고 싶을때 다시 볼려고 요약해서 정리한 블로그입니다. 좋은 정보는 서로 공유합시다. 깨비형
« 2026/7 »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Archive»


Category»

Notice»

Recent Post»

Recent Comment»

Recent Trackback»

07-17 09:10

반응형

 

📋 이 글의 핵심 요약 (TL;DR)

  • SQL = 관계 데이터베이스를 위한 표준 질의어 / 비절차 언어 / SEQUEL에서 유래
  • SQL 3대 분류 : DDL(테이블 정의) · DML(데이터 조작) · DCL(권한 제어)
  • CREATE TABLE : 속성 이름+타입, NOT NULL, DEFAULT, PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK 지정
  • ALTER TABLE : ADD(속성 추가) · DROP COLUMN(속성 삭제) · ADD/DROP CONSTRAINT(제약조건)
  • DROP TABLE : 참조하는 외래키 제약조건을 먼저 삭제해야 함
  • SELECT : ALL(중복 허용, 기본값) / DISTINCT(중복 제거) / *(전체 속성) / AS(별칭) / 산술식 사용 가능
  • WHERE : 비교·논리 연산자로 조건 필터링 / LIKE : %(0개 이상 문자) · _(1개 문자) 와일드카드

 

 

 

01 SQL이란? — 개요와 역사

 

SQL(Structured Query Language)은 관계 데이터베이스를 다루기 위한 표준 질의어입니다. 앞서 배운 관계 해석처럼 비절차 언어(Non-Procedural)로, "어떻게(How)"가 아닌 "무엇을(What) 가져올지"만 기술하면 됩니다.

 

항목 내용
유래 SEQUEL(Structured English QUEry Language)에서 발전 — IBM의 연구용 RDBMS인 SYSTEM R을 위해 개발
표준화 미국 표준 연구소 ANSI + 국제 표준화 기구 ISO에서 표준화 진행
대화식 SQL DBMS에 직접 접근해 질의를 작성하고 즉시 실행
삽입 SQL Java, Python 등 프로그래밍 언어로 작성한 응용 프로그램에 삽입하여 사용

 

 

 

02 SQL 3대 분류 — DDL · DML · DCL

 

분류 Full Name 대표 명령어 역할
DDL Data Definition Language CREATE / ALTER / DROP 테이블 생성·변경·삭제 등 구조 정의
DML Data Manipulation Language SELECT / INSERT / UPDATE / DELETE 데이터 검색·삽입·수정·삭제
DCL Data Control Language GRANT / REVOKE 사용자별 데이터 접근·사용 권한 부여·취소

 

⚠️ 시험 단골 함정 — DDL vs DML 구분

CREATE · ALTER · DROP → DDL (데이터 정의어)
SELECT · INSERT · UPDATE · DELETE → DML (데이터 조작어)

→ "다음 중 성격이 다른 명령어는?" 유형에서 INSERT를 DDL로 착각하기 쉬우니 주의!

 

 

 

03 DDL ① — CREATE TABLE (테이블 생성)

 

CREATE TABLE의 기본 구조는 아래와 같습니다. [ ]로 표시된 항목은 생략 가능하며, SQL 문은 세미콜론(;)으로 끝내고 대소문자를 구분하지 않습니다.

 

CREATE TABLE 테이블_이름 (
    ❶ 속성_이름  데이터_타입  [NOT NULL]  [DEFAULT 기본_값]
    ❷ [PRIMARY KEY (속성_리스트)]
    ❸ [UNIQUE (속성_리스트)]
    ❹ [FOREIGN KEY (속성_리스트) REFERENCES 테이블_이름(속성_리스트)]
         [ON DELETE 옵션]  [ON UPDATE 옵션]
    ❺ [CONSTRAINT 이름]  [CHECK(조건)]
);

 

 

▶ SQL 주요 데이터 타입

 

데이터 타입 의미
INT 또는 INTEGER 정수
SMALLINT INT보다 작은 정수
CHAR(n) 또는 CHARACTER(n) 길이가 n인 고정 길이 문자열
VARCHAR(n) 또는 CHARACTER VARYING(n) 최대 길이가 n인 가변 길이 문자열
NUMERIC(p,s) 또는 DECIMAL(p,s) 고정 소수점 실수 (p: 전체 자릿수, s: 소수점 이하 자릿수)
FLOAT(n) 길이가 n인 부동 소수점 실수
DATE / TIME / DATETIME 날짜(연·월·일) / 시간(시·분·초) / 날짜와 시간

 

💡 실무 팁 — CHAR vs VARCHAR 선택 기준

CHAR(n) : 입력값이 n보다 짧아도 남은 자리를 공백으로 채워 항상 n바이트를 사용합니다. 저장 길이가 고정되어 있어 검색·비교 속도가 빠릅니다.
주민등록번호(13자리), 사번, 제품번호처럼 길이가 항상 일정한 데이터에 적합

VARCHAR(n) : 입력값 길이만큼만 저장하므로 저장 공간을 낭비하지 않습니다. 대신 길이 정보를 별도로 관리해 CHAR보다 약간 느릴 수 있습니다.
주소, 이메일, 자기소개처럼 길이가 불규칙한 데이터에 적합

→ 면접 단골 질문 : "주민번호와 이름 중 어떤 타입을 써야 할까?" — 주민번호는 CHAR(13), 이름은 VARCHAR(n)이 정답입니다.

 

▶ 속성 제약 키워드

 

키워드 의미 및 예시
NOT NULL 널 값 비허용
고객아이디 VARCHAR(20) NOT NULL
DEFAULT 속성의 기본값 지정 (값 미입력 시 자동 삽입)
적립금 INT DEFAULT 0
PRIMARY KEY 기본키 지정 (유일 + NOT NULL 자동 적용)
PRIMARY KEY(고객아이디)
UNIQUE 대체키 지정 (유일성 보장 + NULL 허용, 기본키와 다름)
UNIQUE(고객이름)
FOREIGN KEY 외래키 지정 + REFERENCES로 참조 테이블·속성 명시
FOREIGN KEY(주문고객) REFERENCES 고객(고객아이디)
CHECK 데이터 무결성을 위한 값 범위 제약
CHECK(재고량 >= 0 AND 재고량 <= 10000)

 

▶ ON DELETE 옵션 (참조 무결성 유지)

 

옵션 동작 (부서 테이블의 홍보부 튜플 삭제 시)
ON DELETE NO ACTION 부서 테이블의 튜플을 삭제하지 못하게 막음
ON DELETE CASCADE 사원 테이블의 관련 튜플(정소화)도 함께 삭제
ON DELETE SET NULL 관련 튜플의 외래키 값을 NULL로 변경
ON DELETE SET DEFAULT 관련 튜플의 외래키 값을 미리 지정한 기본값으로 변경

 

 

※ ON UPDATE 옵션 : 부모 테이블의 기본키 값이 수정될 때 외래키를 가진 자식 테이블의 처리 방식을 정의합니다. ON DELETE와 동일한 4가지 옵션(NO ACTION · CASCADE · SET NULL · SET DEFAULT)을 사용하며, 같은 FOREIGN KEY 절 안에 함께 명시할 수 있습니다.

FOREIGN KEY(주문고객) REFERENCES 고객(고객아이디)
    ON DELETE CASCADE ON UPDATE SET NULL

 

 

 

04 CREATE TABLE 실전 예제

 

▶ 예제 1 — 고객 테이블

고객아이디·고객이름·나이·등급·직업·적립금 속성 / 고객이름·등급 NOT NULL / 적립금 기본값 0 / 고객아이디 기본키

 

CREATE TABLE 고객 (
    고객아이디  VARCHAR(20)   NOT NULL,
    고객이름    VARCHAR(10)   NOT NULL,
    나이        INT,
    등급        VARCHAR(10)   NOT NULL,
    직업        VARCHAR(20),
    적립금      INT           DEFAULT 0,
    PRIMARY KEY(고객아이디)
);

 

▶ 예제 2 — 제품 테이블 (CHECK 제약조건 포함)

재고량 0 이상 10,000 이하 유지 조건

 

CREATE TABLE 제품 (
    제품번호    CHAR(3)       NOT NULL,
    제품명      VARCHAR(20),
    재고량      INT,
    단가        INT,
    제조업체    VARCHAR(20),
    PRIMARY KEY(제품번호),
    CHECK (재고량 >= 0 AND 재고량 <= 10000)
);

 

▶ 예제 3 — 주문 테이블 (외래키 2개)

주문고객 → 고객(고객아이디) 참조 / 주문제품 → 제품(제품번호) 참조

 

CREATE TABLE 주문 (
    주문번호    CHAR(3)       NOT NULL,
    주문고객    VARCHAR(20),
    주문제품    CHAR(3),
    수량        INT,
    배송지      VARCHAR(30),
    주문일자    DATE,
    PRIMARY KEY(주문번호),
    FOREIGN KEY(주문고객) REFERENCES 고객(고객아이디),
    FOREIGN KEY(주문제품) REFERENCES 제품(제품번호)
);
-- MS SQL에서는 주문일자 데이터 타입을 DATETIME으로 지정

 

 

 

05 DDL ② — ALTER TABLE (테이블 변경)

 

▶ 속성 추가 — ADD

 

ALTER TABLE 테이블_이름
    ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값];

-- 예제 7-5: 고객 테이블에 가입날짜 속성 추가
ALTER TABLE 고객 ADD 가입날짜 DATE;

 

▶ 속성 삭제 — DROP COLUMN

 

ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름;

-- 예제 7-6: 고객 테이블에서 가입날짜 속성 삭제
ALTER TABLE 고객 DROP COLUMN 가입날짜;

 

⚠️ 속성 삭제 주의사항
삭제할 속성과 관련된 제약조건이나 다른 속성이 참조하고 있다면 삭제 불가합니다.
먼저 관련 제약조건 또는 참조하는 속성을 삭제한 후에 해당 속성을 삭제해야 합니다.

 

▶ 제약조건 추가 / 삭제 — ADD CONSTRAINT · DROP CONSTRAINT

 

-- 제약조건 추가
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 제약조건_내용;

-- 예제 7-7: 고객 나이 20세 이상 제약조건 추가
ALTER TABLE 고객 ADD CONSTRAINT CHK_AGE CHECK(나이 >= 20);

-- 제약조건 삭제
ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약조건_이름;

-- 예제 7-8: CHK_AGE 제약조건 삭제
ALTER TABLE 고객 DROP CONSTRAINT CHK_AGE;

 

 

 

06 DDL ③ — DROP TABLE (테이블 삭제)

 

-- 기본 문법
DROP TABLE 테이블_이름 [CASCADE | RESTRICT];

-- 예제 7-9: 배송업체 테이블 삭제
DROP TABLE 배송업체;

 

옵션 동작
RESTRICT
(기본값, 생략 시 적용)
삭제할 테이블을 다른 테이블이 참조하고 있으면 삭제를 취소
→ 먼저 참조하는 외래키 제약조건을 직접 삭제한 후 DROP 수행
CASCADE 해당 테이블을 참조하는 다른 테이블의 외래키 제약조건까지 연쇄적으로 함께 삭제
→ 연관된 테이블 구조가 의도치 않게 변경될 수 있으므로 주의 필요

 

⚠️ DROP TABLE 실전 주의사항
옵션 미지정 시 RESTRICT가 기본 적용됩니다. 예를 들어 주문 테이블이 고객 테이블의 고객아이디를 외래키로 참조 중이라면, 고객 테이블을 바로 DROP할 수 없습니다.

· RESTRICT 방식 : 주문 테이블의 외래키 제약조건을 ALTER TABLE로 먼저 삭제 → 고객 테이블 DROP
· CASCADE 방식 : DROP TABLE 고객 CASCADE; 한 줄로 고객 테이블 + 주문 테이블의 외래키 제약조건이 연쇄 삭제

→ 시험 포인트 : "DROP TABLE 시 참조 무결성 처리 옵션 2가지는?" → RESTRICT(기본), CASCADE

 

 

 

07 DML — SELECT 기본 검색

 

SELECT 기본 구조

SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블_리스트
[WHERE 조건];


· ALL : 중복 튜플 허용 (기본값, 생략 가능)
· DISTINCT : 중복 튜플 제거
· * : 모든 속성 선택 (속성 이름 전부 나열 대신 사용)
· AS : 결과 테이블에서 속성 이름을 별칭으로 출력

 

 

▶ 기본 검색 예제

 

-- 예제 7-10: 고객 테이블에서 고객아이디, 고객이름, 등급 검색
SELECT 고객아이디, 고객이름, 등급
FROM 고객;

-- 예제 7-11 / 7-12: 모든 속성 검색 (두 가지 방법)
SELECT 고객아이디, 고객이름, 나이, 등급, 직업, 적립금
FROM 고객;

SELECT *
FROM 고객;

-- 예제 7-15: 제조업체 중복 없이 검색
SELECT DISTINCT 제조업체
FROM 제품;

 

▶ AS 별칭 + 산술식 예제

 

-- 예제 7-16: 단가를 '가격'이라는 별칭으로 출력
SELECT 제품명, 단가 AS 가격
FROM 제품;

-- 예제 7-17: 단가에 500 더한 값을 '조정 단가'로 출력
SELECT 제품명, 단가 + 500 AS "조정 단가"
FROM 제품;

 

 

 

08 WHERE 조건 검색 + LIKE 패턴 검색

 

▶ WHERE 비교·논리 연산자

 

연산자 의미 연산자 의미
= 같다 AND 모든 조건 만족
<> 다르다 OR 하나 이상 만족
< / > / <= / >= 작다/크다/작거나같다/크거나같다 NOT 조건 불만족인 것만

 

-- 예제 7-18: 한빛제과가 제조한 제품의 제품명, 재고량, 단가 검색
SELECT 제품명, 재고량, 단가
FROM 제품
WHERE 제조업체 = '한빛제과';

-- 예제 7-21: 단가 2,000원 이상 3,000원 이하인 제품 검색
SELECT 제품명, 단가, 제조업체
FROM 제품
WHERE 단가 >= 2000 AND 단가 <= 3000;

 

▶ LIKE 패턴 검색

 

기호 의미 사용 예 매칭되는 문자열 예
% 0개 이상의 문자
(내용·개수 상관없음)
LIKE '데이터%'
LIKE '%데이터'
LIKE '%데이터%'
데이터로 시작하는 문자열
데이터로 끝나는 문자열
데이터가 포함된 문자열
_ 1개의 문자
(내용 상관없음)
LIKE '데이터___'
LIKE '__한%'
데이터로 시작하는 6자 문자열
세 번째 글자가 '한'인 문자열

 

 

💡 LIKE 사용 시 주의사항

LIKE는 문자열(텍스트) 조건에만 사용 가능합니다. 숫자형 속성에는 사용할 수 없습니다.
또한 조건에서 문자나 날짜 값은 반드시 작은따옴표(' ')로 묶어야 합니다.

 

 

 

📌 핵심 정리

· SQL 분류 : DDL(CREATE·ALTER·DROP) / DML(SELECT·INSERT·UPDATE·DELETE) / DCL(GRANT·REVOKE)
· CREATE TABLE : 속성·타입·NOT NULL·DEFAULT·PRIMARY KEY·UNIQUE·FOREIGN KEY·CHECK 지정
· ON DELETE 옵션 : NO ACTION / CASCADE / SET NULL / SET DEFAULT
· ALTER TABLE : ADD(속성 추가) · DROP COLUMN(속성 삭제) · ADD/DROP CONSTRAINT(제약조건)
· DROP TABLE : 참조 외래키 제약조건 먼저 삭제 필수
· SELECT : DISTINCT(중복 제거) / *(전체) / AS(별칭) / 산술식 / WHERE(조건)
· LIKE : %(0개 이상 문자) / _(1개 문자) — 문자열 조건에만 사용 가능

 

 

 

태그 : SQL이란DDL DML DCL 차이CREATE TABLE 문법FOREIGN KEY 참조 무결성ON DELETE CASCADEALTER TABLE 사용법SELECT DISTINCT 차이SQL WHERE 조건 검색SQL LIKE 와일드카드데이터베이스 언어

반응형
: