데이터베이스와 SQL

1. 데이터베이스(Database) 개요

데이터베이스(Database)는 데이터를 체계적으로 저장, 관리, 검색할 수 있도록 설계된 시스템입니다. 다양한 응용 프로그램에서 대량의 데이터를 효율적이고 영구적으로 저장하고, 쉽게 접근 및 관리할 수 있도록 구조화된 방식으로 설계된 것이 핵심입니다.

데이터베이스의 기본 구성 요소

데이터베이스 시스템은 단순히 데이터를 모아둔 저장소 이상의 의미를 가지며, 크게 네 가지 주요 요소로 구성됩니다.

  1. 데이터 (Data): 데이터베이스에 저장되는 모든 정보 자체를 의미합니다. (예: 사용자 정보, 제품 재고, 주문 내역, 로그 기록 등)

  2. DBMS (Database Management System): 데이터베이스를 효율적으로 관리하고 운영하는 전문 소프트웨어입니다. 사용자는 DBMS를 통해 데이터를 저장, 수정, 검색할 수 있으며 데이터의 일관성과 보안을 보장받습니다. (대표 예시: MySQL, PostgreSQL, SQLite, Oracle 등)

  3. 테이블 (Table): 데이터베이스 내에서 데이터를 저장하는 가장 기본적인 구조입니다.

    • 행 (Row / Record): 실제 개별 데이터를 나타냅니다.

    • 열 (Column / Field / Attribute): 데이터의 속성 또는 항목을 나타냅니다.

  4. 쿼리 (Query): 사용자나 응용 프로그램이 DBMS에 데이터 작업을 요청하는 명령어입니다. 주요 기능으로는 데이터 조회, 삽입, 수정, 삭제가 있으며, 주 사용 언어인 SQL (Structured Query Language)을 통해 상호작용합니다.

2. 데이터베이스의 주요 분류: RDBMS와 NoSQL

데이터베이스는 데이터를 저장하고 관리하는 방식에 따라 크게 두 가지 패러다임으로 나뉩니다.

관계형 데이터베이스 (RDBMS: Relational Database Management System) 🔗

가장 전통적이고 널리 사용되는 데이터 관리 시스템입니다.

  • 구조 및 관계: 엄격하게 정의된 테이블 형태로 저장되며, 테이블 간의 관계(Relationship)를 설정하여 데이터 연결성을 정의합니다.

  • 핵심 원칙: 데이터의 정합성과 무결성을 최우선으로 보장하며, ACID 속성(원자성, 일관성, 고립성, 지속성)을 엄격하게 준수합니다.

  • 장점: 스키마를 사전 정의하여 안전하고 일관되게 관리할 수 있으며, SQL을 통한 복잡한 검색 및 조인(Join) 연산이 용이합니다.

비관계형 데이터베이스 (NoSQL: Not Only SQL) 📂

RDBMS의 엄격한 구조와 확장성 한계를 극복하기 위해 등장한 시스템의 총칭입니다.

  • 핵심 원칙: ACID 속성 대신 BASE 속성(기본적 가용성, 부드러운 상태, 최종적 일관성)을 추구하며, 일관성보다 대규모 트래픽 분산과 가용성을 우선합니다.

  • 장점: 문서(Document), 키-값(Key-Value) 등 유연한 스키마를 사용하여 데이터 구조 변경에 빠르게 대응할 수 있습니다.

데이터 모델 특징 대표 DBMS
Key-Value 가장 단순한 형태. 고유한 키로 값에 접근 Redis, Memcached
Document 데이터를 JSON 또는 BSON 문서 형태로 저장 MongoDB, Couchbase
Wide-Column 테이블 형태이나 열(Column) 그룹으로 설계 Cassandra, HBase
Graph 데이터 간의 관계와 연결에 중점 Neo4j, ArangoDB

3. 핵심 데이터베이스 용어 정리

  • 테이블(Table): 행(Row)과 열(Column)로 이루어진 2차원 구조의 데이터 저장 기본 단위입니다.

  • 레코드(Record): 테이블의 하나의 행을 의미하며, 개별 데이터의 모든 필드 값을 포함합니다.

  • 필드(Field): 테이블의 각 열을 의미하며, 특정 데이터 타입과 속성을 가집니다.

  • 기본 키 (Primary Key, PK): 테이블 내에서 각 레코드를 유일하게 식별할 수 있는 고유 값입니다.

  • 외래 키 (Foreign Key, FK): 한 테이블에서 다른 테이블의 기본 키를 참조하여 테이블 간 관계를 정의하고 무결성을 유지하는 필드입니다.

4. SQL(Structured Query Language) 표준 언어 이해

SQL은 관계형 데이터베이스에서 데이터를 관리하고 조작하는 표준 언어로, 기능에 따라 네 가지 유형으로 분류됩니다.

  1. DDL (Data Definition Language): 데이터베이스 구조(테이블, 인덱스 등)를 정의 (CREATE, ALTER, DROP)

  2. DML (Data Manipulation Language): 데이터 조작 및 관리 (INSERT, UPDATE, DELETE, SELECT)

  3. DCL (Data Control Language): 데이터 접근 권한 관리 (GRANT, REVOKE)

  4. TCL (Transaction Control Language): 트랜잭션 단위 제어 (COMMIT, ROLLBACK, SAVEPOINT)

💡 주요 SQL 명령어 및 실습 예제

① DDL: 테이블 생성 (CREATE)

  • SQLite 예시


CREATE TABLE Departments (
    DepartmentID INTEGER PRIMARY KEY,
    DepartmentName TEXT NOT NULL UNIQUE,
    Location TEXT
);

CREATE TABLE Employees (
    EmployeeID INTEGER PRIMARY KEY,
    FirstName TEXT NOT NULL,
    LastName TEXT NOT NULL,
    HireDate TEXT DEFAULT CURRENT_DATE,
    Salary REAL NOT NULL,
    DepartmentID INTEGER,
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);
  • MariaDB 예시

CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY AUTO_INCREMENT,
    DepartmentName VARCHAR(50) NOT NULL UNIQUE, 
    Location VARCHAR(100)
) ENGINE=InnoDB;

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY AUTO_INCREMENT, 
    FirstName VARCHAR(50) NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    HireDate DATE DEFAULT (CURDATE()), 
    Salary DECIMAL(10, 2) NOT NULL, 
    DepartmentID INT,
    FOREIGN KEY (DepartmentID) 
        REFERENCES Departments(DepartmentID)
        ON DELETE SET NULL  
        ON UPDATE CASCADE
) ENGINE=InnoDB;

② DML: 데이터 조작 (INSERT, UPDATE, DELETE, SELECT)

  • 데이터 삽입 (INSERT)

INSERT INTO Departments (DepartmentID, DepartmentName, Location) VALUES
(10, 'Sales', 'New York'),
(20, 'IT', 'San Francisco'),
(30, 'HR', 'Chicago');

INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID, Salary, Age) VALUES
(101, 'Alice', 'Smith', 20, 75000.00, 25),
(102, 'Bob', 'Johnson', 10, 60000.00, 26);
  • 데이터 수정 (UPDATE)

-- 특정 직원 급여 및 나이 수정
UPDATE Employees
SET Salary = 80000.00, Age = 26
WHERE EmployeeID = 101;

-- IT 부서 직원 급여 10% 일괄 인상
UPDATE Employees
SET Salary = Salary * 1.10
WHERE DepartmentID = 20;
  • 데이터 삭제 (DELETE)

 
DELETE FROM Employees
WHERE EmployeeID = 104;

③ 데이터 조회 및 조건 검색 (SELECT)

기본적인 조회 구문과 조건절(WHERE), 정렬(ORDER BY), 제한(LIMIT) 활용 예시입니다.

 
-- 급여가 70,000 이상인 IT 부서 직원 조회
SELECT FirstName, LastName, Salary
FROM Employees
WHERE DepartmentID = 20 AND Salary >= 70000;

-- 급여가 높은 상위 3명 조회
SELECT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC
LIMIT 3;

④ 테이블 조인 (JOIN)

두 개 이상의 테이블을 연결하여 통합된 데이터를 조회할 때 사용합니다.

  • INNER JOIN: 양쪽 테이블 모두에 일치하는 행만 반환

  • LEFT JOIN: 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행 반환 (불일치 시 NULL)

SELECT
    E.FirstName,
    E.LastName,
    D.DepartmentName AS Department
FROM
    Employees AS E
INNER JOIN
    Departments AS D ON E.DepartmentID = D.DepartmentID;

⑤ 집계 함수와 그룹화 (GROUP BY, HAVING)

  • 부서별 평균 급여 및 직원 수 조회

SELECT
    D.DepartmentName,
    COUNT(E.EmployeeID) AS TotalEmployees,
    ROUND(AVG(E.Salary), 2) AS AverageSalary
FROM
    Employees AS E
JOIN
    Departments AS D ON E.DepartmentID = D.DepartmentID
GROUP BY
    D.DepartmentName
HAVING
    AVG(E.Salary) >= 70000;

답글 남기기