데이타베이스/SQL

데이터 검색과 정렬: SQL SELECT 문의 모든 것

shimdh 2025. 1. 28. 11:37
728x90

SELECT 문이란?

SELECT 문의 기본 구조

SELECT 문은 데이터베이스에서 원하는 데이터를 조회하는 데 사용됩니다. 기본 구조는 다음과 같습니다:

SELECT 열1, 열2, ...
FROM 테이블명
WHERE 조건
ORDER BY 열1 [ASC|DESC]
LIMIT 숫자;

주요 구성 요소

  • SELECT: 조회할 열(컬럼)을 지정합니다.
  • FROM: 데이터를 가져올 테이블을 지정합니다.
  • WHERE: 특정 조건에 맞는 행(레코드)을 선택합니다.
  • ORDER BY: 결과를 정렬합니다.
  • LIMIT: 반환할 행의 수를 제한합니다.

이러한 기본 구조를 잘 이해하고 응용하면, 복잡한 데이터 조회도 손쉽게 처리할 수 있습니다. 특히 대규모 데이터베이스에서 효율적인 쿼리를 작성하려면 이 구조를 탄탄히 이해하는 것이 중요합니다.


WHERE 절: 데이터 필터링의 핵심

데이터를 필터링할 때 WHERE 절을 사용하여 조건을 지정할 수 있습니다. 다양한 연산자와 키워드로 복잡한 조건을 표현할 수 있습니다. 필터링은 필요한 데이터만 추출하여 처리 속도를 높이고, 분석을 단순화하는 데 큰 도움을 줍니다.

주요 연산자와 활용

  1. 비교 연산자

    • =: 값이 같은 경우
    • !=, <>: 값이 다른 경우
    • <, >, <=, >=: 대소 비교

    예시:

    SELECT * FROM 직원 WHERE 나이 > 30;
  2. 논리 연산자

    • AND: 모든 조건이 참일 때
    • OR: 하나 이상의 조건이 참일 때

    예시:

    SELECT * FROM 직원 WHERE 부서 = '인사' AND 급여 > 50000;
  3. 범위 검사

    • BETWEEN ... AND ...: 특정 범위 내 값

    예시:

    SELECT * FROM 제품 WHERE 가격 BETWEEN 1000 AND 2000;
  4. NULL 확인

    • IS NULL 또는 IS NOT NULL로 NULL 값을 필터링

    예시:

    SELECT * FROM 주문 WHERE 배송일 IS NULL;
  5. 패턴 매칭

    • LIKE와 와일드카드(%, _)

    예시:

    SELECT * FROM 고객 WHERE 이름 LIKE '김%';

복합 조건 활용

WHERE 절은 위 연산자들을 조합하여 더욱 정교한 조건을 표현할 수 있습니다. 예를 들어, 나이가 30 이상이면서 부서가 '개발'인 직원을 찾으려면 다음과 같이 작성할 수 있습니다:

SELECT 이름, 나이 FROM 직원 WHERE 나이 >= 30 AND 부서 = '개발';

복잡한 조건을 설정할 때는 괄호를 사용하여 논리적 순서를 명확히 해야 합니다.

추가 예제

  1. 특정 성별과 급여 조건을 만족하는 직원 조회:
    SELECT 이름, 직급 FROM 직원 WHERE 성별 = '여' AND 급여 > 4000;
  2. 이름에 특정 문자열이 포함된 고객 조회:
    SELECT * FROM 고객 WHERE 이름 LIKE '%민%';
  3. 부서가 '개발' 또는 '마케팅'에 해당하는 직원 조회:
    SELECT 이름, 부서 FROM 직원 WHERE 부서 IN ('개발', '마케팅');

ORDER BY 절: 데이터 정렬

ORDER BY 절은 데이터를 특정 열의 값에 따라 정렬합니다. 기본적으로 오름차순(ASC)이며, 내림차순은 DESC 키워드를 사용합니다.

주요 활용 방법

  1. 단일 열 정렬

    SELECT 이름, 나이 FROM 직원 ORDER BY 나이 ASC;
  2. 다중 열 정렬

    SELECT 이름, 급여 FROM 직원 ORDER BY 급여 DESC, 이름 ASC;
  3. NULL 값 처리

    • NULL 값은 기본적으로 오름차순에서는 가장 위, 내림차순에서는 가장 아래에 위치합니다.

추가 예제

  1. 직원 테이블에서 급여가 높은 순으로 정렬하고, 동일한 급여에서는 이름을 기준으로 오름차순 정렬:
    SELECT 이름, 직급, 급여 FROM 직원 ORDER BY 급여 DESC, 이름 ASC;
  2. 주문 데이터를 최신 날짜 순으로 정렬:
    SELECT 주문번호, 주문일자 FROM 주문 ORDER BY 주문일자 DESC;
  3. 고객 이름을 가나다순으로 정렬:
    SELECT 이름, 연락처 FROM 고객 ORDER BY 이름 ASC;

LIMIT 절: 결과 제한

LIMIT 절은 반환되는 결과의 행 수를 제한합니다. 특히 대규모 데이터에서 유용하며, OFFSET 키워드와 함께 페이지네이션에도 활용됩니다.

주요 활용 방법

  1. 단순 제한

    SELECT * FROM 고객 LIMIT 5;
  2. OFFSET과 함께 사용

    SELECT * FROM 고객 LIMIT 5 OFFSET 5;

    또는:

    SELECT * FROM 고객 LIMIT 5, 5;

추가 예제

  1. 상위 2명의 직원 데이터를 가져오기:
    SELECT * FROM 직원 ORDER BY 급여 DESC LIMIT 2;
  2. 페이지네이션:
    SELECT * FROM 직원 ORDER BY 이름 ASC LIMIT 10 OFFSET 20;
  3. 최근 데이터 가져오기:
    SELECT * FROM 로그 ORDER BY 생성일자 DESC LIMIT 10;

종합 예제

다음과 같은 직원 테이블이 있다고 가정해봅시다:

ID 이름 직급 급여
1 김철수 매니저 5000
2 이영희 사원 3000
3 박민수 매니저 6000
4 최지혜 부장 7000

사례 1: 모든 직원 데이터 조회

SELECT * FROM 직원;

사례 2: 매니저들의 급여 정보

SELECT 이름, 급여 FROM 직원 WHERE 직급 = '매니저';

사례 3: 급여 순서대로 정렬된 상위 2명의 직원

SELECT 이름, 급여 FROM 직원 ORDER BY 급여 DESC LIMIT 2;

사례 4: 특정 조건과 정렬, 제한을 함께 적용

급여가 4000 이상인 직원 중 상위 3명:

SELECT 이름, 직급, 급여 FROM 직원 WHERE 급여 >= 4000 ORDER BY 급여 DESC LIMIT 3;

결론

SQL의 SELECT 문은 데이터 검색의 기본이자 핵심입니다. WHERE 절로 데이터를 필터링하고, ORDER BY 절로 정렬하며, LIMIT 절로 원하는 데이터의 양을 제어함으로써 효율적으로 데이터를 추출할 수 있습니다. 이러한 기능을 조합하여 복잡한 데이터 분석 요구사항을 해결할 수 있습니다. 위 예제들을 실습하며 SQL 활용 능력을 더욱 향상시켜 보세요.

728x90