시험 전 정리

sungsimdangmascot·2026년 4월 23일

1. 데이터베이스 및 테이블 기초 (생성과 구조)

가장 먼저 데이터를 저장할 공간을 만들고, 그 안에 데이터를 담을 표(테이블)의 뼈대를 세우는 과정이다.

  • 데이터베이스 조작
    • CREATE DATABASE 이름;: 새로운 데이터베이스를 생성한다.
    • DROP DATABASE IF EXISTS 이름;: 기존에 같은 이름의 데이터베이스가 있다면 충돌 방지를 위해 삭제한다.
    • USE 이름;: 작업할 데이터베이스를 선택한다.
  • 테이블 생성 (CREATE TABLE) 및 컬럼 규칙
    • 컬럼(Column): 테이블의 세로줄. 어떤 종류의 데이터를 담을지 결정하는 '제목' 역할을 한다.
    • INT UNSIGNED: 양수 전용 정수형 숫자.
    • CHAR(100): 최대 100글자까지 들어가는 문자열.
    • DATETIME: 날짜와 시간 정보.
    • NOT NULL: 데이터 비어있음(NULL)을 허용하지 않는다. 필수 입력값.
    • AUTO_INCREMENT: 데이터를 넣을 때마다 자동으로 1씩 증가하는 번호를 부여한다.
    • UNIQUE: 중복된 값이 들어오는 것을 막는다.
    • PRIMARY KEY: 해당 테이블에서 각 데이터를 고유하게 식별하는 핵심 기둥(기본키)으로 설정한다.

[예시 코드]

CREATE TABLE dept(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id),
    regDate DATETIME NOT NULL,
    `name` CHAR(100) NOT NULL UNIQUE
);

2. 데이터 조작 (삽입과 수정)

만들어진 빈 테이블(표)에 실제로 가로줄(Row, 데이터 1건)을 추가하거나 고치는 과정이다.

  • 데이터 삽입 (INSERT INTO)
    • 지정된 테이블에 새로운 데이터를 한 줄 추가한다.
    • NOW() 함수를 사용하면 현재 시스템의 날짜와 시간이 자동으로 입력된다.
  • 데이터 수정 (UPDATE)
    • 이미 들어있는 데이터를 변경한다.
    • 주의사항: 변경 대상을 콕 집어주는 WHERE 조건을 빼먹으면 테이블의 모든 데이터가 수정되는 대참사가 발생하므로 반드시 확인해야 한다.

[예시 코드]

-- 데이터 삽입
INSERT INTO dept SET regDate = NOW(), `name` = '홍보부서';

-- 데이터 수정 ('홍보부서'를 찾아 '마케팅부서'로 변경)
UPDATE dept SET `name` = '마케팅부서' WHERE `name` = '홍보부서';

3. 테이블 구조 변경과 정규화

테이블을 운영하다가 구조적 한계(문자열 중복 저장 등)를 느끼고 효율적으로 개선하는 과정이다. 데이터베이스에서는 중복 데이터를 최소화하기 위해 '이름' 대신 고유 '번호(ID)'로 연결하는 정규화 작업을 진행한다.

  • 컬럼 추가 (ALTER TABLE ... ADD COLUMN)
    • 기존 테이블에 새로운 세로줄(칸)을 추가한다.
  • 컬럼 삭제 (ALTER TABLE ... DROP COLUMN)
    • 더 이상 필요 없어진 세로줄(칸)을 완전히 삭제한다.

[예시 코드]

-- 사원 테이블에 부서 번호를 저장할 칸 추가
ALTER TABLE emp ADD COLUMN deptId INT UNSIGNED NOT NULL;

-- 부서 이름 문자열을 저장하던 칸은 삭제하여 정규화 완료
ALTER TABLE emp DROP COLUMN deptName;

4. 데이터 결합 및 조회 (JOIN과 SELECT)

정규화를 통해 쪼개진 테이블들(사원 테이블, 부서 테이블)을 보고서 작성을 위해 하나로 예쁘게 합쳐서 보여주는 과정이다.

  • 별칭 지정 (AS)
    • 테이블 이름 뒤에 짧은 알파벳(e, d)을 붙여 별명을 만들거나, 화면에 출력될 컬럼의 제목을 한글 등 보기 편한 이름으로 바꾼다.
  • 테이블 결합 (INNER JOIN ... ON ...)
    • 두 테이블을 나란히 이어 붙인다.
    • ON: 두 테이블을 합칠 때 사용하는 가장 중요한 연결 규칙이다. (예: 사원 테이블의 부서번호와 부서 테이블의 아이디가 같은 것끼리 연결해라)
  • 데이터 다듬기 (DATE())
    • DATETIME 데이터에서 시간은 버리고 연-월-일만 깔끔하게 추출한다.

[예시 코드]

SELECT 
    e.id AS `사원번호`,
    DATE(e.regDate) AS `입사일`,
    d.name AS `부서명`
FROM emp e
INNER JOIN dept d
ON e.deptId = d.id;

5. 데이터 집계 및 정렬 (통계 및 가독성)

단순 조회를 넘어 조건에 맞게 숫자를 세고, 보기 좋게 줄을 세우는 과정이다.

  • 개수 세기와 그룹화 (COUNT(), GROUP BY)
    • COUNT(): 조건에 맞는 데이터의 개수를 센다.
    • GROUP BY: 특정 기준(예: 부서명)으로 데이터를 묶어서 통계를 낸다.
  • 데이터 정렬 (ORDER BY)
    • ASC (오름차순): 1, 2, 3 / 가, 나, 다 / 과거 -> 최신 순으로 커지게 정렬한다. (생략 시 기본값)
    • DESC (내림차순): 3, 2, 1 / 다, 나, 가 / 최신 -> 과거 순으로 작아지게 정렬한다.

[예시 코드]

-- 1. 부서별 사원 수 집계
SELECT d.name AS `부서명`, COUNT(e.id) AS `사원수`
FROM emp e
INNER JOIN dept d ON e.deptId = d.id
GROUP BY d.name;

-- 2. 부서명 가나다순, 입사일 최신순으로 명부 정렬
SELECT e.name, d.name, e.regDate
FROM emp e
INNER JOIN dept d ON e.deptId = d.id
ORDER BY d.name ASC, e.regDate DESC;
profile
성심당마스코트

0개의 댓글