SQL Bootcamp
SQL Bootcamp: SQL 기본부터 고급까지의 학습 가이드
SQL Bootcamp는 SQL(Structured Query Language)의 기초부터 고급 기능까지 체계적으로 학습할 수 있는 집중 프로그램입니다. SQL은 관계형 데이터베이스에서 데이터를 관리하고 조작하는 데 필수적인 언어로, 데이터베이스 관리자(DBA), 데이터 분석가, 백엔드 개발자 등 다양한 직군에서 중요한 역할을 합니다.
이 가이드는 SQL Bootcamp에서 다룰 주요 개념과 실습 과제를 포함하며, 단계별로 학습할 수 있도록 구성되어 있습니다.
1. SQL 기초: 데이터베이스 개념과 구조
1.1 관계형 데이터베이스 개념
- 관계형 데이터베이스는 테이블 형태로 데이터를 저장하고, 각 테이블은 열(필드)과 행(레코드)으로 구성됩니다.
- 키(Key): 각 테이블에서 데이터를 고유하게 식별하기 위한 필드입니다. 주로 **기본 키(Primary Key)**와 **외래 키(Foreign Key)**가 사용됩니다.
1.2 데이터베이스와 테이블 생성
데이터베이스 생성:
CREATE DATABASE company;
USE company;
테이블 생성:
CREATE TABLE employees (
employee_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE,
salary DECIMAL(10, 2)
);
실습 과제:
school
데이터베이스를 생성하고,students
테이블을 만들어보세요.- 학생 이름, 학번, 등록일을 포함하는 필드를 구성하세요.
2. 데이터 조작 언어 (DML)
2.1 데이터 삽입 (INSERT)
데이터 삽입:
INSERT INTO employees (first_name, last_name, hire_date, salary)
VALUES ('John', 'Doe', '2022-05-15', 55000.00);
2.2 데이터 조회 (SELECT)
모든 데이터 조회:
SELECT * FROM employees;
조건부 데이터 조회:
SELECT first_name, last_name FROM employees WHERE salary > 50000;
2.3 데이터 수정 (UPDATE)
데이터 수정:
UPDATE employees SET salary = 60000 WHERE employee_id = 1;
2.4 데이터 삭제 (DELETE)
데이터 삭제:
DELETE FROM employees WHERE employee_id = 1;
실습 과제:
products
테이블을 생성하고, 제품 이름과 가격, 재고 수량을 저장하세요.- 제품 가격이 100달러 이상인 제품만 조회하는 쿼리를 작성하세요.
3. 고급 데이터 조회
3.1 정렬 (ORDER BY)
오름차순/내림차순 정렬:
SELECT * FROM employees ORDER BY salary ASC;
3.2 그룹화 (GROUP BY)
그룹별 집계 함수:
SELECT department, COUNT(*) AS total_employees FROM employees GROUP BY department;
3.3 집계 함수 (COUNT, SUM, AVG, MAX, MIN)
SELECT AVG(salary) AS average_salary FROM employees;
실습 과제:
sales
테이블에서 각 판매원이 기록한 총 판매 금액을SUM()
함수를 사용하여 계산하세요.GROUP BY
를 사용해 각 제품 카테고리별로 총 판매량을 계산하세요.
4. 관계형 데이터베이스
4.1 테이블 간의 관계
- *외래 키(Foreign Key)**는 두 테이블 간의 관계를 설정합니다. 예를 들어,
orders
테이블이customers
테이블을 참조할 수 있습니다.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
4.2 JOIN을 사용한 데이터 조회
INNER JOIN:
SELECT orders.order_id, customers.name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
LEFT JOIN:
SELECT orders.order_id, customers.name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;
실습 과제:
employees
와departments
테이블을 생성하고, 부서별 직원 수를 구하는JOIN
쿼리를 작성하세요.LEFT JOIN
을 사용해 부서에 속하지 않은 직원들을 조회하세요.
5. 뷰(Views)와 서브쿼리(Subqueries)
5.1 뷰 생성
- *뷰(View)**는 복잡한 쿼리 결과를 저장하고 재사용할 수 있는 가상의 테이블입니다.
CREATE VIEW high_salary_employees AS
SELECT first_name, last_name, salary
FROM employees
WHERE salary > 60000;
5.2 서브쿼리
서브쿼리는 다른 쿼리 내에 포함된 쿼리입니다.
SELECT first_name, last_name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
실습 과제:
- 급여가 평균 이상인 직원만 조회하는 뷰를 생성하세요.
- 부서별로 가장 높은 급여를 받는 직원을 조회하는 서브쿼리를 작성하세요.
6. 데이터베이스 설계와 제약 조건
6.1 기본 키와 제약 조건
- 기본 키(Primary Key): 테이블에서 각 행을 고유하게 식별하는 필드입니다.
- 제약 조건(Constraints): 데이터의 유효성을 보장하기 위해 설정됩니다. 예를 들어,
NOT NULL
,UNIQUE
,CHECK
등이 있습니다.
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
hire_date DATE CHECK (hire_date > '2000-01-01')
);
실습 과제:
students
테이블에 이메일 주소 필드를 추가하고, 중복되지 않도록UNIQUE
제약을 설정하세요.products
테이블에서 가격이 0보다 큰 값만 허용하는CHECK
제약을 추가하세요.
7. 트랜잭션 관리
7.1 트랜잭션과 롤백
트랜잭션은 여러 쿼리를 하나의 작업으로 묶어 실행합니다. 실패 시 트랜잭션을 **롤백(ROLLBACK)**하여 원래 상태로 되돌릴 수 있습니다.
START TRANSACTION;
UPDATE employees SET salary = salary + 1000 WHERE employee_id = 1;
COMMIT;
ROLLBACK:
ROLLBACK;
실습 과제:
- 직원의 급여를 인상하는 트랜잭션을 작성하고, 이를 롤백하는 과정을 실습하세요.
8. 스토어드 프로시저와 트리거
8.1 스토어드 프로시저
스토어드 프로시저는 자주 사용하는 SQL 쿼리를 저장하여 필요할 때 호출할 수 있는 기능입니다.
CREATE PROCEDURE UpdateSalary (IN emp_id INT, IN new_salary DECIMAL)
BEGIN
UPDATE employees SET salary = new_salary WHERE employee_id = emp_id;
END;
8.2 트리거
트리거는 특정 이벤트(예: INSERT, UPDATE)가 발생할 때 자동으로 실행되는 SQL 스크립트입니다.
CREATE TRIGGER after_employee_insert
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (action, employee_id)
VALUES ('Employee Inserted', NEW.employee_id);
END;
실습 과제:
- 직원의 급여가 수정될 때마다 로그를 남기는 트리거를 생성하세요.
- 스토어드 프로시저를 이용해 특정 직원의 급여를 자동으로 수정하는 코드를 작성하세요.
9. 백업 및 복구
9.1 데이터베이스 백업
SQL에서 데이터베이스 백업은 데이터 손실을 방지하기 위한 중요한 작업입니다.
BACKUP DATABASE company TO DISK = 'C:\\\\backups\\\\company_backup.bak';
9.2 데이터베이스 복구
RESTORE DATABASE company FROM DISK = 'C:\\\\backups\\\\company_backup.bak';
실습 과제:
school
데이터베이스를 백업하고, 이를 복구하는 실습을 진행하세요.
10. 성능 최적화 및 인덱스
10.1 인덱스 생성
인덱스는 테이블 조회 성능을 높이기 위해 자주 사용되는 컬럼에 대해
생성할 수 있습니다.
CREATE INDEX idx_salary ON employees (salary);
10.2 성능 모니터링
쿼리 성능을 모니터링하고 최적화하는 방법을 학습합니다. 예를 들어, EXPLAIN 명령어를 사용하여 쿼리 실행 계획을 분석할 수 있습니다.
EXPLAIN SELECT * FROM employees WHERE salary > 50000;
실습 과제:
- 직원의 급여를 기준으로 인덱스를 생성하고, 성능 차이를 확인해 보세요.
- 복잡한 쿼리에 대해 EXPLAIN 명령어를 사용하여 실행 계획을 분석하세요.
요약
이 SQL Bootcamp는 SQL의 기초 개념부터 고급 기능까지 체계적으로 학습할 수 있도록 구성되어 있습니다. 각 단계에서 실습 과제를 통해 직접 SQL을 작성하고 실행하면서 SQL에 대한 이해도를 높일 수 있습니다. SQL은 관계형 데이터베이스에서 데이터를 관리하고 분석하는 데 필수적인 언어이며, 이를 통해 데이터베이스 개발, 데이터 분석, 백엔드 개발 등의 분야에서 전문성을 갖출 수 있습니다.