데이타베이스/SqlServer

T-SQL 기초: SELECT 문과 데이터베이스 관리의 핵심 개념

shimdh 2025. 1. 24. 17:28
728x90

SELECT 문

SELECT 문은 데이터를 조회하는 가장 기본적이고 중요한 명령어입니다. 이를 통해 사용자는 데이터베이스에서 원하는 정보를 검색하고 결과를 반환받을 수 있습니다. SELECT 문은 데이터베이스와의 첫 번째 상호작용이자 가장 많이 사용되는 쿼리로, 데이터베이스 작업의 시작점이라고 할 수 있습니다.

기본 구조

SELECT 문은 다음과 같은 구조로 이루어져 있습니다:

SELECT 열_이름1, 열_이름2, ...
FROM 테이블_이름
WHERE 조건;
  • 열_이름: 조회할 필드의 이름. *을 사용하면 모든 열을 선택할 수 있습니다.
  • 테이블_이름: 데이터를 가져올 테이블의 이름.
  • 조건: 선택적으로 지정하여 특정 조건에 맞는 데이터만 조회. 조건이 없으면 테이블의 모든 데이터를 반환합니다.

예제: 직원 정보 조회

employees라는 테이블에서 직원들의 이름과 급여를 조회하려면 다음과 같이 작성합니다:

SELECT first_name, last_name, salary
FROM employees;

이 쿼리는 employees 테이블에 저장된 모든 직원의 이름과 급여를 반환합니다. 데이터를 조회할 때마다 SELECT 문이 가장 먼저 사용됩니다.

추가 기능

  • 별칭 사용: 열이나 테이블 이름에 별칭을 부여하여 가독성을 높일 수 있습니다.

    SELECT first_name AS 이름, salary AS 급여
    FROM employees;
  • 수식 및 함수 활용: 데이터 처리나 변환을 위해 수식이나 함수를 사용할 수 있습니다.

    SELECT first_name, salary * 1.1 AS adjusted_salary
    FROM employees;

WHERE 절: 조건 필터링

WHERE 절은 특정 조건에 맞는 데이터를 필터링하여 결과를 제한합니다. 이 절을 통해 원하는 데이터만 선택적으로 조회할 수 있으며, 효율적이고 정확한 데이터 검색이 가능합니다.

주요 연산자

  1. 비교 연산자: 데이터 간의 크기나 값을 비교합니다.

    • =: 두 값이 같음
    • != 또는 <>: 두 값이 다름
    • <, >, <=, >=: 크기 비교
  2. 논리 연산자: 여러 조건을 조합합니다.

    • AND: 두 조건이 모두 참일 때만 결과 반환
    • OR: 하나 이상의 조건이 참일 때 결과 반환
    • NOT: 조건이 거짓일 때 참으로 간주
  3. 패턴 매칭 연산자: 특정 문자열 패턴을 검색합니다.

    • LIKE: 와일드카드를 사용하여 패턴 검색 (%, _)
  4. 범위 연산자:

    • IN: 특정 값 목록 중 하나와 일치
    • BETWEEN: 지정된 범위 내의 값

예제

  • 특정 도시(Seoul)에 거주하는 고객 조회:

    SELECT *
    FROM Customers
    WHERE City = 'Seoul';

    이 쿼리는 Customers 테이블에서 City 열이 'Seoul'인 모든 행을 반환합니다.

  • 나이가 30세 이상이고 서울에 거주하는 고객 조회:

    SELECT *
    FROM Customers
    WHERE Age >= 30 AND City = 'Seoul';

    이 쿼리는 Age가 30 이상이고 City가 'Seoul'인 고객만 조회합니다.

  • 이름이 'A'로 시작하는 고객 조회:

    SELECT *
    FROM Customers
    WHERE Name LIKE 'A%';

    이 쿼리는 이름이 'A'로 시작하는 모든 고객을 반환합니다.

추가 사례

  • 다중 조건 필터링:

    SELECT *
    FROM Orders
    WHERE OrderDate >= '2023-01-01' AND Status = 'Completed';

    이 쿼리는 특정 날짜 이후에 완료된 주문을 조회합니다.

  • 조건이 없는 경우:
    조건을 지정하지 않으면 모든 데이터를 반환합니다:

    SELECT * FROM Products;

JOIN: 테이블 간 데이터 결합

JOIN은 여러 테이블의 데이터를 결합하여 풍부한 정보를 제공합니다. 데이터베이스는 종종 여러 테이블로 구성되므로, JOIN을 통해 테이블 간의 관계를 기반으로 데이터를 연결하는 것이 중요합니다.

JOIN의 종류와 예제

  1. INNER JOIN: 두 테이블에서 일치하는 데이터만 반환합니다.

    SELECT employees.name, departments.department_name
    FROM employees
    INNER JOIN departments ON employees.department_id = departments.id;

    이 쿼리는 직원의 이름과 해당 직원이 속한 부서 이름을 반환합니다.

  2. LEFT JOIN: 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 매칭 데이터를 반환합니다. 오른쪽 테이블에 일치하지 않는 경우 NULL로 표시됩니다.

    SELECT employees.name, departments.department_name
    FROM employees
    LEFT JOIN departments ON employees.department_id = departments.id;
  3. FULL OUTER JOIN: 양쪽 테이블의 모든 데이터를 반환하며 매칭되지 않는 경우 NULL로 표시됩니다.

    SELECT employees.name, departments.department_name
    FROM employees
    FULL OUTER JOIN departments ON employees.department_id = departments.id;

    이 쿼리는 모든 직원과 모든 부서를 반환하며, 일치하지 않는 경우 NULL 값을 표시합니다.

  4. CROSS JOIN: 두 테이블의 Cartesian Product를 반환합니다.

    SELECT e.name AS employee_name, d.department_name
    FROM employees e CROSS JOIN departments d;

    이 쿼리는 모든 직원과 모든 부서의 가능한 조합을 반환합니다.

JOIN 응용

  • 여러 테이블 결합:
    SELECT o.order_id, c.customer_name, p.product_name
    FROM orders o
    INNER JOIN customers c ON o.customer_id = c.customer_id
    INNER JOIN products p ON o.product_id = p.product_id;
    이 쿼리는 주문, 고객, 제품 정보를 결합하여 반환합니다.

GROUP BY 및 집계 함수

GROUP BY는 데이터를 그룹화하고, 집계 함수와 결합하여 각 그룹에 대한 요약 정보를 제공합니다. 이 절은 데이터를 요약하거나 집계하기 위한 분석 작업에서 필수적입니다.

집계 함수

  1. COUNT(): 행의 개수를 반환합니다.
  2. SUM(): 특정 열의 합계를 계산합니다.
  3. AVG(): 특정 열의 평균값을 반환합니다.
  4. MIN()/MAX(): 특정 열의 최소/최대값을 반환합니다.

예제: 부서별 평균 급여

SELECT Department, AVG(Salary) AS AverageSalary
FROM Employees
GROUP BY Department;

이 쿼리는 각 부서별 평균 급여를 계산하여 반환합니다.

HAVING 절

HAVING 절은 GROUP BY 결과에 조건을 적용할 때 사용됩니다. 예를 들어, 평균 급여가 50,000 이상인 부서만 조회하려면:

SELECT Department, AVG(Salary) AS AverageSalary
FROM Employees
GROUP BY Department
HAVING AVG(Salary) >= 50000;

추가 사례

  • 복합 그룹화:
    SELECT Department, JobTitle, COUNT(*) AS EmployeeCount
    FROM Employees
    GROUP BY Department, JobTitle;
    이 쿼리는 부서와 직책별 직원 수를 계산합니다.

서브쿼리: 복잡한 조건 처리

서브쿼리는 쿼리 내부에 포함된 또 다른 쿼리로, 복잡한 조건을 처리하거나 추가적인 데이터를 조회하는 데 사용됩니다.

서브쿼리 유형

  1. 단일 행 서브쿼리: 하나의 값을 반환합니다.
  2. 다중 행 서브쿼리: 여러 값을 반환하며 IN, ANY, ALL 등과 함께 사용됩니다.
  3. 상관 서브쿼리: 메인 쿼리와 동작적으로 연결됩니다.

예제

  • 가장 높은 급여를 받는 직원 조회:

    SELECT first_name, last_name
    FROM employees
    WHERE salary = (SELECT MAX(salary) FROM employees);
  • 각 부서별 최고 급여 직원 조회:

    SELECT e.name
    FROM employees e
    WHERE e.salary = (SELECT MAX(salary) FROM employees WHERE department_id = e.department_id);

서브쿼리의 활용

  • 삽입과 함께 사용:
    INSERT INTO HighSalaryEmployees (name, salary)
    SELECT name, salary
    FROM employees
    WHERE salary > (SELECT AVG(salary) FROM employees);
    이 쿼리는 평균 급여 이상을 받는 직원을 새로운 테이블에 삽입합니다.

결론

T-SQL의 SELECT 문을 비롯한 다양한 절과 함수는 데이터베이스 관리의 핵심입니다. 이를 활용하면 데이터를 효율적으로 검색하고, 여러 테이블의 데이터를 통합하며, 대량의 데이터를 요약 및 분석할 수 있습니다. WHERE, JOIN, GROUP BY, 서브쿼리 등 다양한 기능을 이해하고 적용하면 더 복잡한 SQL 쿼리와 데이터 분석 작업을 수행할 수 있습니다. 이러한 지식은 데이터베이스 관리를 넘어 데이터 기반 의사결정에서도 필수적입니다. 실습과 응용을 통해 이러한 기술을 익히는 것이 중요합니다.

728x90