## 🗄️ 데이터베이스, 질문하며 배우기

MariaDB / MySQL · SQL · 선행: 파이썬 또는 자바 · HeidiSQL로 실습

## 수업 진행

🤖

### 질문

SQL·개념을 LLM에 물어보기

💾

### 실행

HeidiSQL / MariaDB에서 직접 실행

👩‍🏫

### 리뷰

화상으로 JOIN·정규화 등 핵심 정리

앞: CRUD·제약 · 중간: JOIN·집계 · 뒤: 정규화·트랜잭션·프로시저

### 1-1. 데이터베이스가 필요한 이유

🤖 AI에게 물어보자

    엑셀·메모장과 비교해 관계형 데이터베이스가 필요한 이유를 크기·정확성·보안·검색·중복 측면에서 설명해줘. 테이블·행·열·PK·FK도 초보자용으로 알려줘.

👩‍🏫 선생님 리뷰

1. 테이블 = 표, 행 = 레코드, 열 = 필드
2. PK는 행을 유일하게 식별, FK는 다른 테이블 PK를 참조

### 1-2. MariaDB · HeidiSQL 설치

🤖 AI에게 물어보자

    Windows에 MariaDB와 HeidiSQL을 설치하고 로컬 root로 접속하는 절차를 단계별로 알려줘.

다운로드: mariadb.org · heidisql.com

### 1-3. CREATE · INSERT

🤖 AI에게 물어보자

    MariaDB에서 데이터베이스와 students(id PK, name, age) 테이블을 만들고 샘플 3행을 INSERT하는 SQL을 보여줘.

    CREATE DATABASE school;
    USE school;

    CREATE TABLE students (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(50) NOT NULL,
      age INT
    );

    INSERT INTO students (name, age) VALUES
    ('철수', 17),
    ('영희', 16),
    ('민수', 18);

### 1-4. SELECT · UPDATE

    SELECT * FROM students;
    SELECT name FROM students WHERE age >= 17;
    UPDATE students SET age = 18 WHERE name = '영희';
    SELECT * FROM students ORDER BY age DESC;

🤖 AI에게 물어보자

    SQL WHERE, AND/OR, LIKE, ORDER BY, LIMIT 사용 예를 students 테이블 기준으로 보여줘.

### 1-5. 데이터 타입 · 제약조건

🤖 AI에게 물어보자

    MySQL/MariaDB에서 INT, VARCHAR, DATE, DECIMAL과 NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, DEFAULT 제약을 예제 CREATE TABLE로 설명해줘.

### 1-6. 언어와의 연동 (Python / Java)

🤖 AI에게 물어보자

    파이썬 mysql-connector 또는 pymysql로 MariaDB에 접속해 SELECT 결과를 출력하는 최소 예제를 보여줘. 비밀번호는 코드에 하드코딩하지 말고 설명만 해줘.

날씨예보·블로그 검색 등 실습은 “수집 → DB 저장 → 조회” 흐름으로 이어집니다.

### 2-1. JOIN · UNION

🤖 AI에게 물어보자

    INNER JOIN, LEFT JOIN 차이를 주문(orders)·고객(customers) 예제로 설명해줘. UNION과 UNION ALL 차이도 알려줘.

    SELECT c.name, o.total
    FROM customers c
    INNER JOIN orders o ON c.id = o.customer_id;

### 2-2. 함수 · GROUP BY · VIEW

    SELECT employee_id, COUNT(*) AS cnt
    FROM sales
    GROUP BY employee_id
    HAVING cnt >= 15
    ORDER BY employee_id;

    CREATE VIEW v_student_adult AS
    SELECT * FROM students WHERE age >= 18;

🤖 AI에게 물어보자

    COUNT SUM AVG MIN MAX와 GROUP BY, HAVING 차이를 WHERE와 비교해 설명해줘.

### 2-3. DELETE · DROP

    DELETE FROM students WHERE age < 15;
    -- 테이블 구조 유지, 데이터만 삭제

    DROP TABLE students;
    DROP DATABASE school;

DELETE vs TRUNCATE vs DROP — AI에게 차이를 물어보세요. 실습 DB에서만 연습!

### 3-1. 정규화 (1NF · 2NF · 3NF) 고급

🤖 AI에게 물어보자

    제1·제2·제3 정규형을 중복 데이터가 있는 수강신청 표 예시로 단계별로 분해해 설명해줘.

### 3-2. 인덱스 · 트랜잭션 (ACID) 고급

🤖 AI에게 물어보자

    클러스터드 인덱스와 논클러스터드 인덱스 차이, 트랜잭션의 ACID(원자성·일관성·격리·지속성)를 초보자용으로 설명해줘. BEGIN COMMIT ROLLBACK 예제도 보여줘.

### 3-3. 저장 프로시저 · 트리거 고급

🤖 AI에게 물어보자

    MariaDB 저장 프로시저와 트리거를 아주 짧은 예제로 보여줘. 각각 언제 쓰면 좋은지 한 줄로 설명해줘.

### 4-1. SQL 퀴즈 (샘플 스키마)

#### 연습 문제 예시

1. employee_id < 5 인 행
2. name만 조회
3. id가 1,2,4 인 행 (IN)
4. hourly_pay 수정
5. LIKE로 이름 검색
6. GROUP BY로 직원별 판매 수
7. HAVING으로 15개 이상만

🤖 AI에게 물어보자

    employees(id, name, hourly_pay), items(item_id, item_name, price), sales(employee_id, item_id) 테이블이 있다고 가정하고, 직원별 판매 아이템 수가 15개 이상인 employee_id를 오름차순으로 구하는 SQL을 짜줘.

### 4-2. 영화순위 → DB 저장

🤖 AI에게 물어보자

    영화 순위 사이트에서 제목·예매율·개봉일을 수집했다고 가정하고, movies 테이블 설계(CREATE)와 INSERT 후 예매율 상위 5편 SELECT 쿼리를 제안해줘.

### 4-3. 4대질병 데이터 → DB

🤖 AI에게 물어보자

    지역·날짜·질병·환자수 컬럼을 가진 illness 테이블을 설계하고, 지역·날짜·질병 조건으로 조회하는 SELECT를 작성해줘. 파이썬에서 파일 읽어 bulk INSERT하는 흐름도 설명해줘.

### 4-4. 뉴스 수집 · 감성분석

🤖 AI에게 물어보자

    news(id, date, category, title, body) 테이블과 감성사전 테이블을 가정하고, 특정 날짜·카테고리 뉴스를 조회한 뒤 본문과 사전을 매칭해 점수 합을 구하는 처리 흐름을 의사코드로 설명해줘.

감성사전·크롤링 세부 규칙은 오픈소스 교안과 함께 진행합니다.