Chapter 8: SQL 소개

SQL을 데이터베이스를 위한 수식으로 생각하기

엑셀(Excel)에 익숙하다면, 이미 수식의 강력함을 잘 알고 있을 것입니다. 엑셀 수식은 데이터를 변환하고 계산하며 인사이트를 도출하는 데 사용됩니다. SQL은 데이터베이스에서 비슷한 역할을 하지만, 훨씬 더 강력하고 유연합니다.

엑셀 수식이 특정한 문법(등호로 시작하고, 특정 함수명을 사용하는 등)을 따르듯이, SQL도 고유한 문법을 가지고 있습니다. 예를 들어 엑셀에서 =SUM(B2:B10)을 사용해 값을 더하듯이, SQL에서는 SELECT SUM(salary) FROM employees를 사용해 같은 작업을 수행할 수 있습니다.

핵심적인 차이점은 SQL은 개별 셀이 아닌 전체 테이블 단위로 작동한다는 점입니다. 이 덕분에 대용량 데이터셋을 처리할 때 매우 효율적입니다.

SQL이란?

SQL(발음은 "시퀄" 또는 알파벳 S-Q-L)은 Structured Query Language의 약자입니다. 관계형 데이터베이스(Relational Database)와 상호작용하기 위한 표준 언어로, 1970년대부터 사용되어 왔습니다.

SQL은 다음과 같은 특징을 가집니다:

  • 선언형(Declarative): 어떻게가 아닌 무엇을 원하는지 기술합니다
  • 표준화됨(Standardized): 기본 명령어는 다양한 데이터베이스 시스템 간에 비슷하게 작동합니다
  • 강력함(Powerful): 간결한 명령어로 복잡한 데이터 작업을 수행할 수 있습니다
  • 특화됨(Specialized): 관계형 데이터베이스를 위한 전용 언어입니다

SQL에는 여러 가지 "방언"(예: MySQL, PostgreSQL, Microsoft SQL Server, Oracle 등)이 있지만, 기본적인 명령어와 구조는 공통적입니다. 한 시스템에서 기본기를 익히면 다른 시스템으로의 전환도 수월합니다.

SQL 명령어의 기본 구조

대부분의 SQL 명령어는 사용자가 원하는 작업을 논리적으로 표현합니다. 가장 일반적인 명령어는 데이터를 조회하는 SELECT입니다. 기본적인 SELECT 문은 다음과 같습니다:

SELECT column1, column2
FROM table_name
WHERE condition
ORDER BY column1;

각 구성 요소를 살펴보면 다음과 같습니다:

  • SELECT: 조회하고자 하는 컬럼을 지정합니다
  • FROM: 해당 컬럼이 속한 테이블을 지정합니다
  • WHERE: 조건에 따라 행을 필터링합니다 (선택 사항)
  • ORDER BY: 결과를 정렬합니다 (선택 사항)

이 구조는 마치 자연어로 데이터를 요청하는 방식과 유사합니다: "이 테이블에서 이런 조건에 맞는 행의 이 컬럼들을 이 순서로 보여줘."

주요 SQL 명령어와 엑셀의 대응 기능

SELECT = 컬럼 선택

SQL의 SELECT 문은 보고 싶은 컬럼을 지정합니다:

SELECT first_name, last_name, salary
FROM employees;

엑셀에서 불필요한 컬럼을 숨기고 원하는 데이터만 보는 것과 비슷합니다.

WHERE = 필터 적용

SQL의 WHERE 절은 조건에 따라 행을 필터링합니다:

SELECT *
FROM employees
WHERE department = 'Sales';

엑셀의 필터 기능을 사용해 Department 컬럼이 "Sales"인 행만 표시하는 것과 동일합니다.

GROUP BY = 피벗 테이블

SQL의 GROUP BY 절은 데이터를 집계합니다. 이는 엑셀의 피벗 테이블 기능과 유사합니다:

SELECT department, AVG(salary) as average_salary
FROM employees
GROUP BY department;

각 부서별 평균 급여를 계산하며, 엑셀에서 범주별 평균값을 피벗 테이블로 계산하는 방식과 비슷합니다.

JOIN = 다른 시트에서 VLOOKUP이나 INDEX/MATCH 사용

SQL의 JOIN은 여러 테이블의 데이터를 조합합니다:

SELECT e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

엑셀에서 VLOOKUP이나 INDEX/MATCH로 다른 시트에서 데이터를 가져오는 것과 유사합니다.

ORDER BY = 데이터 정렬

ORDER BY 절은 결과를 정렬합니다:

SELECT *
FROM employees
ORDER BY salary DESC;

엑셀에서 열을 높은 값에서 낮은 값으로 정렬하는 것과 같습니다.

SQL 데이터 타입

엑셀에서 텍스트, 숫자, 날짜 등 다양한 데이터 타입이 존재하듯, SQL에서도 각 컬럼에 대해 명시적인 데이터 타입을 지정합니다. 주요 SQL 데이터 타입은 다음과 같습니다:

  • INTEGER: 정수 (예: 1, 42, -99)
  • DECIMAL 또는 NUMERIC: 소수점을 포함한 숫자 (예: 10.5, 3.14159)
  • VARCHAR: 가변 길이 텍스트 (예: 이름, 주소 등)
  • DATE: 날짜 (예: 2025-04-07)
  • BOOLEAN: 참/거짓 값

테이블을 생성할 때 각 컬럼의 데이터 타입을 지정하면 데이터의 일관성을 유지하고 적절한 연산이 가능해집니다.

기본 SQL 연산

SQL 초보자가 꼭 알아야 할 기본 연산들을 알아봅시다.

데이터 조회

가장 기본적인 SQL 연산은 SELECT 문을 이용한 데이터 조회입니다:

-- 모든 컬럼과 행 조회
SELECT * FROM customers;

-- 특정 컬럼만 조회
SELECT first_name, last_name, email FROM customers;

-- 중복 제거된 값 조회
SELECT DISTINCT city FROM customers;

데이터 필터링

데이터를 필터링하려면 WHERE 절을 사용합니다:

-- 조건 일치
SELECT * FROM products WHERE category = 'Electronics';

-- 숫자 비교
SELECT * FROM products WHERE price > 100;

-- 복수 조건
SELECT * FROM products 
WHERE category = 'Electronics' AND price < 500;

-- 패턴 매칭
SELECT * FROM customers WHERE email LIKE '%gmail.com';

LIKE 연산자는 와일드카드를 이용한 패턴 매칭을 지원합니다:

  • %: 임의 개수의 문자
  • _: 임의의 한 문자

데이터 정렬

결과를 정렬하려면 ORDER BY를 사용합니다:

-- 기본 오름차순 정렬
SELECT * FROM products ORDER BY price;

-- 내림차순 정렬
SELECT * FROM products ORDER BY price DESC;

-- 복수 기준 정렬
SELECT * FROM customers ORDER BY state, city;

결과 수 제한

많은 SQL 방언에서 결과 행 수를 제한할 수 있습니다:

-- 상위 10개 행만 조회
SELECT * FROM products LIMIT 10;

계산 및 변환

SQL은 계산과 데이터 변환을 위한 함수들을 제공합니다:

-- 집계 함수
SELECT 
    COUNT(*) as total_customers,
    AVG(age) as average_age,
    MIN(age) as youngest,
    MAX(age) as oldest
FROM customers;

-- 문자열 함수
SELECT 
    first_name,
    last_name,
    CONCAT(first_name, ' ', last_name) as full_name,
    UPPER(email) as email_uppercase
FROM customers;

-- 날짜 함수
SELECT 
    order_date,
    YEAR(order_date) as order_year,
    MONTH(order_date) as order_month
FROM orders;

데이터 그룹화

카테고리별로 데이터를 집계하려면 GROUP BY를 사용합니다:

-- 주(state)별 고객 수
SELECT state, COUNT(*) as customer_count
FROM customers
GROUP BY state
ORDER BY customer_count DESC;

-- 제품 카테고리별 매출 합계
SELECT 
    category,
    SUM(price * quantity) as total_sales
FROM order_items
JOIN products ON order_items.product_id = products.id
GROUP BY category;

GROUP BY를 사용할 때 HAVING 절로 그룹을 필터링할 수 있습니다:

-- 총 매출이 $10,000를 초과하는 제품 카테고리
SELECT 
    category,
    SUM(price * quantity) as total_sales
FROM order_items
JOIN products ON order_items.product_id = products.id
GROUP BY category
HAVING SUM(price * quantity) > 10000;

SQL vs. 엑셀: 실용적 비교

SQL이 엑셀과 어떻게 다른지 이해하기 위해 공통적인 데이터 작업을 비교해봅시다:

예제: 부서별 평균 급여 찾기

엑셀:

  1. 데이터 범위 선택
  2. 삽입 > 피벗 테이블
  3. "Department"를 행으로 드래그
  4. "Salary"를 값으로 드래그
  5. 값 필드 설정을 "평균"으로 변경

SQL:

SELECT department, AVG(salary) as average_salary
FROM employees
GROUP BY department;

예제: 상위 5명 고액 연봉자 찾기

엑셀:

  1. 데이터 범위 선택
  2. 데이터 > 정렬
  3. Salary 기준 내림차순 정렬
  4. 상위 5행 확인

SQL:

SELECT first_name, last_name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5;

예제: 부서별 직원 수 세기

엑셀:

  1. 데이터 범위 선택
  2. 삽입 > 피벗 테이블
  3. "Department"를 행으로 드래그
  4. "Name"을 값으로 드래그 (기본 Count로 설정됨)

SQL:

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department;

예제: 2024년에 채용된 직원 찾기

엑셀:

  1. 데이터 범위 선택
  2. 필터 버튼 클릭
  3. "Hire Date" 컬럼을 2024년으로 필터

SQL:

SELECT *
FROM employees
WHERE YEAR(hire_date) = 2024;

자주 발생하는 SQL 실수

SQL을 처음 접할 때 주의해야 할 일반적인 실수들입니다:

  1. 세미콜론(;) 누락: 대부분의 SQL 문장은 세미콜론으로 끝나야 합니다

  2. 잘못된 따옴표 사용: 대부분의 SQL에서는 텍스트는 작은 따옴표('), 컬럼/테이블 이름은 큰 따옴표(")를 사용합니다 (필요한 경우)

  3. 컬럼/테이블 이름 오타: SQL 키워드는 보통 대소문자를 구분하지 않지만, 테이블과 컬럼 이름의 대소문자 구분 여부는 DBMS에 따라 다릅니다

  4. WHERE 절 생략: WHERE 없이 전체 테이블을 조회하면 큰 테이블에서는 비효율적일 수 있습니다

  5. = NULL 사용: NULL 값을 비교할 때는 IS NULL을 사용해야 합니다:

    -- 잘못된 예
    SELECT * FROM customers WHERE phone = NULL;
    
    -- 올바른 예
    SELECT * FROM customers WHERE phone IS NULL;
    
  6. JOIN의 동작 방식 오해: INNER, LEFT, RIGHT JOIN은 테이블 간 매칭되지 않는 행에 대해 다른 결과를 반환합니다

결론

SQL은 데이터베이스를 다루기 위한 강력한 언어이며, 그 개념 대부분은 엑셀에서 이미 익숙한 작업들과 평행을 이룹니다. SQL을 "데이터베이스를 위한 수식"이라고 생각하면, 엑셀에서의 경험을 기반으로 SQL을 더 쉽게 이해하고 활용할 수 있습니다.

다음 장에서는 실제 SQL 쿼리를 작성하며, 엑셀의 일반 작업들을 SQL로 어떻게 변환하는지를 단계별 예제를 통해 실습해보겠습니다.