코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

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;

실습 과제:

  • employeesdepartments 테이블을 생성하고, 부서별 직원 수를 구하는 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은 관계형 데이터베이스에서 데이터를 관리하고 분석하는 데 필수적인 언어이며, 이를 통해 데이터베이스 개발, 데이터 분석, 백엔드 개발 등의 분야에서 전문성을 갖출 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com