IT/개발 가이드 25 min read

SQL 기초: 데이터베이스에서 원하는 정보만 골라내는 핵심 쿼리문 가이드

Author

데이터 분석 에디터

12월 31일 발행

복잡한 데이터 그리드와 코드 화면

데이터가 곧 자산인 시대입니다. 기업은 매일 수조 바이트의 데이터를 생성하고, 우리는 그 안에서 의미 있는 통찰을 얻기 위해 고군분투합니다. 이 방대한 데이터의 바다에서 우리가 원하는 정보만 정확하게 낚아 올릴 수 있는 도구가 바로 SQL(Structured Query Language)입니다.

SQL은 복잡한 프로그래밍 언어라기보다, 데이터베이스와 대화하는 언어에 가깝습니다. "사용자 테이블에서 서울에 사는 20대 회원들의 이메일만 보여줘"라고 요청하면, SQL은 즉시 그 결과를 보여줍니다. 오늘 우리는 SQL의 가장 기초적이면서도 가장 강력한 기능인 '데이터 추출'의 모든 것을 심도 있게 다뤄보겠습니다.

1. SQL의 심장: SELECT와 FROM

모든 데이터 추출의 시작은 SELECT와 FROM입니다. 이 두 단어는 "무엇을(SELECT)" "어디서(FROM)" 가져올지를 결정합니다.

예를 들어, 회사의 전체 직원 목록이 담긴 employees 테이블이 있다고 가정해 봅시다. 모든 직원의 정보를 보고 싶을 때는 와일드카드(*)를 사용합니다.

SELECT * FROM employees;

하지만 실무에서 모든 정보를 한꺼번에 불러오는 것은 매우 비효율적입니다. 수백만 명의 데이터가 있다면 시스템에 과부하가 걸릴 수 있죠. 그래서 우리는 필요한 열(Column)만 지정해서 불러오는 습관을 들여야 합니다. 특정 항목만 선택하여 조회하는 것이 최적화의 첫걸음입니다.

SELECT first_name, last_name, email FROM employees;

위의 코드는 성과 이름, 그리고 이메일 주소만 골라냅니다. 훨씬 깔끔하고 속도도 빠릅니다. 공식 문서에 따르면 이러한 명시적 선언은 쿼리의 가독성과 성능을 동시에 높여준다고 합니다. 관련 상세 문법은 W3Schools SQL Tutorial에서 더 자세히 확인할 수 있습니다.

데이터 분석 대시보드 그래픽

2. 원하는 조건만 필터링하기: WHERE 절

단순히 열을 고르는 것을 넘어, 특정 조건을 만족하는 행(Row)만 골라내고 싶을 때 사용하는 것이 바로 WHERE 절입니다. WHERE 절은 SQL의 꽃이라고 불릴 정도로 데이터 필터링에서 가장 핵심적인 역할을 수행합니다.

기본 비교 연산자 활용

가장 기본적인 필터링은 숫자나 문자를 직접 비교하는 것입니다. 비교 연산자를 사용하여 데이터를 정교하게 걸러낼 수 있습니다.

  • =
    같음: 특정 값과 정확히 일치하는 데이터를 찾습니다. (예: WHERE department = 'Sales')
  • != 또는 <>
    같지 않음: 특정 값을 제외한 나머지 데이터를 조회합니다.
  • >, <, >=, <=
    대소 비교: 숫자나 날짜의 범위를 지정할 때 사용합니다. (예: WHERE salary > 50000)
"조건을 잘 설정하는 쿼리 작성자는 데이터베이스의 부하를 줄이고 조직에 신속한 의사결정을 지원합니다."

3. 복합 조건의 완성: AND, OR, NOT

현실의 비즈니스 질문은 그리 단순하지 않습니다. "서울에 살면서(조건1), 작년에 물건을 3번 이상 구매한(조건2), VIP 회원(조건3)"을 찾아야 할 때가 많습니다. 이때 논리 연산자를 결합합니다.

논리 연산자 활용법

  • ✅
    AND: 모든 조건을 동시에 만족해야 합니다. 가장 좁은 범위를 검색할 때 유리합니다.
  • ➕
    OR: 여러 조건 중 하나만 만족해도 결과를 반환합니다. 검색 범위를 넓힐 때 사용합니다.
  • 🚫
    NOT: 특정 조건에 해당하지 않는 데이터만 골라냅니다.

복합 조건을 사용할 때는 괄호()의 사용이 매우 중요합니다. 수학의 사칙연산처럼 SQL도 연산자 우선순위가 있기 때문에, AND가 OR보다 먼저 계산됩니다. 따라서 의도한 대로 필터링하려면 괄호를 적절히 배치하여 가독성과 정확성을 확보해야 합니다.

4. 문자열 패턴 탐색: LIKE와 와일드카드

정확한 값을 모를 때, 혹은 비슷한 패턴의 텍스트를 찾고 싶을 때는 LIKE 연산자를 사용합니다. 이는 검색 엔진의 검색 기능과 유사하게 작동합니다.

와일드카드의 마법

% (퍼센트 기호)는 글자 수와 상관없는 모든 문자를 의미합니다. _ (언더바 기호)는 딱 한 글자를 의미합니다.

  • 'Kim%': 'Kim'으로 시작하는 모든 문자열 (Kim, Kim-chi, Kim-pro 등)
  • '%son': 'son'으로 끝나는 모든 문자열 (Johnson, Harrison 등)
  • '%data%': 'data'라는 단어를 포함하는 모든 문자열
  • 'A_': 'A'로 시작하는 딱 두 글자의 문자열

이 기능은 특히 고객의 주소지 검색, 상품명 키워드 검색 등에서 엄청난 위력을 발휘합니다. 다만, 와일드카드를 문자열 앞부분에 붙이는 방식('%keyword')은 인덱스를 타지 못해 검색 속도가 현저히 느려질 수 있으니 대용량 데이터 처리 시 주의가 필요합니다.

서버와 데이터 통신을 표현한 추상적 이미지

5. 범위와 목록 검색: BETWEEN과 IN

가독성 높은 쿼리를 작성하는 것은 협업의 기본입니다. BETWEEN과 IN은 복잡한 논리 구조를 심플하게 만들어줍니다.

BETWEEN: 범위 검색의 최적화

특정 날짜 사이의 매출이나 특정 점수대의 학생을 찾을 때 유용합니다.

SELECT * FROM orders WHERE order_date BETWEEN '2025-01-01' AND '2025-12-31';

이는 order_date >= '2025-01-01' AND order_date <= '2025-12-31'와 완전히 동일하게 작동하지만, 훨씬 읽기 편합니다.

IN: 여러 값을 동시에 비교하기

여러 지역이나 여러 등급을 한 번에 조회하고 싶을 때 OR를 남발하는 대신 IN을 사용하세요.

SELECT * FROM customers WHERE city IN ('Seoul', 'Busan', 'Incheon');

코드가 간결해지면 실수할 확률이 줄어들고, 다른 사람이 쿼리를 분석하기에도 매우 용이합니다.

6. 비어있는 정보 처리하기: IS NULL

데이터베이스에는 정보가 누락된 경우가 허다합니다. 이를 NULL이라고 부릅니다. 중요한 점은 NULL은 0도 아니고 공백 문자('')도 아니라는 것입니다. "값이 존재하지 않음" 그 자체를 의미합니다.

따라서 WHERE column = NULL과 같은 식은 작동하지 않습니다. 대신 IS NULL 혹은 IS NOT NULL을 사용해야 합니다.

SELECT * FROM members WHERE phone_number IS NULL;

연락처가 등록되지 않은 회원들을 골라내어 마케팅 수단 등록을 유도하는 쿼리를 짤 때 필수적인 문법입니다. 데이터 품질 관리(Data Quality Management) 측면에서 NULL 데이터의 적절한 처리는 분석의 신뢰도를 결정짓는 중요한 요소입니다.

7. 데이터의 중복 제거와 제한: DISTINCT와 LIMIT

원하는 열을 선택한 뒤, 결과값이 너무 방대하거나 중복된 결과가 많다면 DISTINCT와 LIMIT을 활용하세요.

DISTINCT (중복 제거)

조회된 결과에서 중복된 행을 하나만 남기고 제거합니다. 우리 서비스의 고객들이 거주하는 '도시 종류'만 알고 싶을 때 유용합니다.

LIMIT (결과 수 제한)

상위 N개의 데이터만 가져옵니다. "최근 가입자 5명"이나 "매출 상위 10개 상품"을 볼 때 사용하며, 불필요한 데이터 로딩을 방지합니다.

8. 결과의 가독성을 높이는 정렬: ORDER BY

데이터를 골라내는 마지막 단계는 보기 좋게 정렬하는 것입니다. ORDER BY는 기본적으로 오름차순(ASC)으로 정렬하며, 필요에 따라 내림차순(DESC)을 지정할 수 있습니다.

SELECT product_name, price FROM products ORDER BY price DESC LIMIT 5;

가장 비싼 상품 5개를 순서대로 보여주는 쿼리입니다. 정렬 기준을 여러 개 설정할 수도 있습니다. 예를 들어 ORDER BY category ASC, price DESC라고 하면 카테고리별로 묶은 뒤 그 안에서 가격이 높은 순으로 보여줍니다.

마치며: 데이터 분석의 언어, SQL

지금까지 데이터베이스에서 원하는 정보를 정확하게 골라내는 기초 쿼리문들을 살펴보았습니다. SELECT, WHERE, LIKE, BETWEEN, IN, IS NULL 그리고 ORDER BY까지. 이 몇 가지 도구만 익숙해져도 기업의 수많은 데이터 속에서 보물 같은 인사이트를 스스로 찾아낼 수 있습니다.

중요한 것은 이론을 아는 것을 넘어 직접 쿼리를 실행해 보는 것입니다. 데이터베이스와의 대화는 연습할수록 정교해지며, 이는 여러분의 업무 생산성을 비약적으로 향상시켜 줄 것입니다. 더 전문적인 기술이 궁금하다면 MySQL 공식 문서를 참고하며 깊이를 더해 보시기 바랍니다.

FreeImgFix.com과 함께 데이터 전문가로 거듭나세요!