Skip to main content

개발자를 위한 데이터베이스 및 SQL 기본 가이드: 핵심 개념, 예제 및 연습 문제 포함

데이터베이스(DB)는 일반적으로 데이터를 저장하고 쉽게 액세스, 관리 및 업데이트 되도록 설계된 구조화된 데이터의 모음입니다. 그리고 데이터베이스를 관리 해주는 시스템을 DBMS라고 합니다. 그리고 데이터베이스를 관리 하고 데이터를 추가, 조회, 업데이트, 삭제하기 위한 언어를 SQL이라고 하고 쿼리(Query) 라고 합니다. 오늘은 데이터베이스의 기본 개념과 SQL에 대해서 알아보겠습니다.

1. MySQL 데이터베이스의 기본 개념

데이터베이스의 기본 개념을 살펴 보기 위해 가장 널리 쓰이는 오픈 소스인 MySQL을 기반으로 기본 개념을 알아보겠습니다. 데이터베이스를 이해 하기 위해서는 다음 용어들을 이해해야 합니다.

  • 테이블: 테이블은 데이터를 저장하는 기본 빌딩 블록입니다. 각 테이블은 행(레코드)과 열(필드)로 구성되며 각 행은 단일 데이터 항목을 나타내고 각 열은 특정 속성을 나타냅니다.
  • 열: 데이터의 특정 속성을 나타내는 테이블 내의 개별 필드입니다. 예를 들어 "Users" 테이블에는 "ID", "Name", "Email" 및 "Phone"과 같은 열이 있을 수 있습니다.
  • 행: 행은 실제 데이터를 포함하는 테이블 내의 개별 레코드입니다. 각 행은 고유한 항목 또는 항목을 나타냅니다.
  • 기본 키: 테이블의 각 레코드에 대한 고유 식별자입니다. 기본 키는 테이블에 중복 레코드가 없도록 하며 테이블 간의 관계를 설정하는 데 자주 사용됩니다.
  • 외래 키: 외래 키는 다른 테이블의 기본 키를 참조하는 열 또는 열 집합입니다. 테이블 간의 관계를 설정하고 참조 무결성을 유지하는 데 사용됩니다.
  • 인덱스: 인덱스는 속도를 높이는 데 도움이 되는 데이터베이스 개체입니다. 테이블에서 데이터 검색 및 검색. 쿼리 성능을 향상시키기 위해 하나 이상의 열에 인덱스를 만들 수 있습니다.

2. SQL 쿼리의 기본 개념 및 예제

SQL(Structured Query Language)은 MySQL과 같은 관계형 데이터베이스와 상호 작용하는 데 사용되는 표준 언어입니다. 테이블 생성(Create Table), 데이터 삽입(Insert), 검색(Select), 수정(Update) 및 삭제(Delete)와 같은 다양한 작업을 수행할 수 있습니다.

SQL 을 연습 하기 위해서는 아래와 같은 온라인 리소스를 사용하여 별도의 SQL 설치 없이 SQL 쿼리를 연습할 수 있습니다.

다음은 MySQL 데이터베이스에 대한 몇 가지 기본 SQL 쿼리 예입니다.

2.1 테이블 생성

CREATE TABLE Users (
ID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
Phone VARCHAR(15)
);

이 쿼리는 "ID", "이름", "이메일" 및 "전화" 열이 있는 "사용자"라는 테이블을 만듭니다. "ID" 열은 기본 키이며 각각의 새 행에 대해 자동 증가시킵니다.

2.2 데이터 삽입

INSERT INTO Users (Name, Email, Phone)
VALUES ('John Doe', 'john.doe@example.com', '555-1234');

이 쿼리는 "이름", "이메일" 및 "전화"에 대해 지정된 값을 사용하여 "사용자" 테이블에 새 행을 삽입합니다.

2.3 데이터 검색

SELECT * FROM Users WHERE Email='john.doe@example.com';

이 쿼리는 "Email" 열이 'john.doe@example.com'과 일치하는 "Users" 테이블에서 모든 열(*)을 검색합니다.

2.4 데이터 수정

UPDATE Users
SET Phone='555-6789'
WHERE Email='john.doe@example.com';

이 쿼리는 "Email" 열이 'john.doe@example.com'과 일치하는 "Users" 테이블의 행에 대한 "Phone" 열을 업데이트합니다.

2.5 데이터 삭제

DELETE FROM Users WHERE Email='john.doe@example.com';

2.6 테이블 조인

"OrderID"(기본 키), "UserID"(외래 키) 및 "OrderDate" 열이 있는 "Orders"라는 또 다른 테이블이 있다고 가정합니다.

SELECT Users.Name, Users.Email, Orders.OrderID, Orders.OrderDate
FROM Users
JOIN Orders ON Users.ID = Orders.UserID;

2.7 GROUP BY

GROUP BY 절은 집계 함수와 함께 사용되어 지정된 열에서 동일한 값을 가진 행을 하나의 행으로 그룹화합니다. 각 그룹에 대한 계산을 수행하기 위해 COUNT, SUM, AVG, MIN 및 MAX와 함께 자주 사용됩니다.

예: "ProductID", "ProductName", "SaleDate" 및 "SaleAmount" 열이 있는 "Sales"라는 테이블이 있다고 가정합니다.

SELECT ProductName, SUM(SaleAmount) as TotalSales
FROM Sales
GROUP BY ProductName;

이 쿼리는 "ProductName"으로 행을 그룹화하여 각 제품의 총 매출을 계산합니다.

2.7 ORDER BY

'ORDER BY' 절은 SQL에서 쿼리 결과를 하나 이상의 지정된 열을 기준으로 오름차순(ASC) 또는 내림차순(DESC)으로 정렬하는 데 사용됩니다.

다음은 ORDER BY 절을 사용하는 방법의 예입니다.

"EmployeeID", "FirstName", "LastName", "Department" 및 "Salary" 열이 있는 "Employees"라는 테이블이 있다고 가정합니다.

SELECT FirstName, LastName, Department, Salary
FROM Employees
ORDER BY Department ASC, Salary DESC;

이 쿼리에서는 먼저 "Department" 열별로 결과를 오름차순으로 정렬합니다. 그런 다음 각 부서 내에서 결과를 "급여" 열별로 내림차순으로 정렬합니다. 이렇게 하면 먼저 부서별로 정렬된 직원 목록이 제공되고 각 부서 내 급여별로 정렬됩니다.

열에 대해 ASC 또는 DESC를 지정하지 않으면 기본 정렬 순서는 오름차순(ASC)입니다. ORDER BY 절은 쿼리 결과를 구성하고 데이터를 보다 쉽게 ​​분석할 수 있도록 하는 데 매우 유용합니다.

3. SQL 쿼리 집계 함수

위의 Group by 쿼리 예제에서 사용된 SUM과 같은 쿼리를 집계 함수라고 합니다. 다음은 COUNT, SUM, AVG, MIN 및 MAX 등 집계 함수의 몇 가지 예를 설명 하도록 하겠습니다.

3.1 COUNT

COUNT 함수는 지정된 조건과 일치하는 행의 수를 반환합니다.

SELECT COUNT(*) as NumberOfSales
FROM Sales;

이 쿼리는 "Sales" 테이블의 총 판매 수를 계산합니다.

3.2 SUM

SUM 함수는 지정된 열에 있는 모든 값의 합계를 반환합니다.

SELECT SUM(SaleAmount) as TotalSales
FROM Sales;

3.3 AVG

AVG 함수는 지정된 열의 평균 값을 반환합니다.

SELECT AVG(SaleAmount) as AverageSale
FROM Sales;

이 쿼리는 "Sales" 테이블의 평균 판매 금액을 계산합니다.

3.4 MIN

MIN 함수는 지정된 열의 가장 작은 값을 반환합니다.

SELECT MIN(SaleAmount) as LowestSale
FROM Sales;

이 쿼리는 "Sales" 테이블에서 가장 낮은 판매 금액을 찾습니다.

3.5 MAX

MAX 함수는 지정된 열의 가장 큰 값을 반환합니다.

SELECT MAX(SaleAmount) as HighestSale
FROM Sales;

이 쿼리는 "Sales" 테이블에서 가장 높은 판매 금액을 찾습니다.

SQL 쿼리에서 이러한 집계 함수를 사용하여 관계형 데이터베이스 내의 데이터를 효율적으로 요약하고 분석할 수 있습니다. 이러한 함수는 'WHERE', 'HAVING' 및 'ORDER BY'와 같은 다른 SQL 절과 결합하여 더 복잡한 쿼리를 만들고 데이터를 필터링하고 정렬할 수 있습니다.

4. SQL 쿼리 연습 문제

다음은 질문 및 해당 답변이 포함된 SQL 쿼리 연습 문제 입니다. 다음 두 테이블이 있다고 가정합니다.

EmployeeID, FirstName, LastName, DepartmentID, Salary 및 HireDate 열이 있는 Employees 테이블. DepartmentID, DepartmentName 및 Location 열이 있는 테이블 Departments.

연습 1

질문: Employees 테이블에서 모든 열을 선택하십시오.

답변:

SELECT * FROM Employees;

연습 2

질문: Employees 테이블에서 FirstName, LastName 및 Salary 열만 선택합니다.

답변:

SELECT FirstName, LastName, Salary
FROM Employees;

### 연습 3:

질문: 급여가 50,000 이상인 직원을 모두 선택하십시오.

답변:

```sql
SELECT * FROM Employees
WHERE Salary > 50000;

연습 4

질문: 각 부서의 직원 수를 세십시오.

답변:

SELECT DepartmentID, COUNT(*) as NumberOfEmployees
FROM Employees
GROUP BY DepartmentID;

연습 5

질문: 각 부서에서 가장 높은 급여를 찾으십시오.

답변:

SELECT DepartmentID, MAX(Salary) as HighestSalary
FROM Employees
GROUP BY DepartmentID;

연습 6

질문: DepartmentName 순으로 모든 직원의 FirstName, LastName 및 DepartmentName을 검색합니다.

답변:

SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID
ORDER BY d.DepartmentName;

연습 7

질문: 'IT' 부서의 모든 직원의 현재 급여에 5,000을 더하여 급여를 업데이트하십시오.

답변:

UPDATE Employees
SET Salary = Salary + 5000
WHERE DepartmentID = (SELECT DepartmentID FROM Departments WHERE DepartmentName = 'IT');

연습 8

질문: 급여가 30,000 미만인 모든 직원을 삭제하십시오.

답변:

DELETE FROM Employees
WHERE Salary < 30000;

연습 9:

질문: 각 부서 직원의 평균 급여를 구하고 평균 급여와 함께 'DepartmentName'을 표시하십시오.

답변:

SELECT d.DepartmentName, AVG(e.Salary) as AverageSalary
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID
GROUP BY d.DepartmentName;

연습 10

질문: 'FirstName', 'LastName', 'DepartmentName' 및 'Salary'와 함께 급여가 가장 높은 상위 5명의 직원을 급여 내림차순으로 정렬합니다.

답변:

SELECT e.FirstName, e.LastName, d.DepartmentName, e.Salary
FROM Employees e
JOIN Departments d ON e.DepartmentID = d.DepartmentID
ORDER BY e.Salary DESC
LIMIT 5;

지금까지 연습 문제 까지 확인해보며 SQL 쿼리를 사용하여 데이터베이스에서 데이터를 검색하는 방법을 배웠습니다. 보다 많은 SQL 쿼리 연습 문제를 풀고 싶다면 아래 링크를 참고하시기 바랍니다.

마지막으로 백엔드 개발자 뿐만 아니라 개발자에게는 기초가 되는 데이터베이스의 개념과 SQL 쿼리를 이해하는데 도움이 되셨으면 좋겠습니다.

본 포스팅은 ChatGPT의 도움을 받아 작성 되었으며 개인 적인 개발 경험을 바탕으로 작성되었습니다.