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
절은 특정 조건에 맞는 데이터를 필터링하여 결과를 제한합니다. 이 절을 통해 원하는 데이터만 선택적으로 조회할 수 있으며, 효율적이고 정확한 데이터 검색이 가능합니다.
주요 연산자
비교 연산자: 데이터 간의 크기나 값을 비교합니다.
=
: 두 값이 같음!=
또는<>
: 두 값이 다름<
,>
,<=
,>=
: 크기 비교
논리 연산자: 여러 조건을 조합합니다.
AND
: 두 조건이 모두 참일 때만 결과 반환OR
: 하나 이상의 조건이 참일 때 결과 반환NOT
: 조건이 거짓일 때 참으로 간주
패턴 매칭 연산자: 특정 문자열 패턴을 검색합니다.
LIKE
: 와일드카드를 사용하여 패턴 검색 (%
,_
)
범위 연산자:
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의 종류와 예제
INNER JOIN: 두 테이블에서 일치하는 데이터만 반환합니다.
SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.id;
이 쿼리는 직원의 이름과 해당 직원이 속한 부서 이름을 반환합니다.
LEFT JOIN: 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 매칭 데이터를 반환합니다. 오른쪽 테이블에 일치하지 않는 경우
NULL
로 표시됩니다.SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id;
FULL OUTER JOIN: 양쪽 테이블의 모든 데이터를 반환하며 매칭되지 않는 경우
NULL
로 표시됩니다.SELECT employees.name, departments.department_name FROM employees FULL OUTER JOIN departments ON employees.department_id = departments.id;
이 쿼리는 모든 직원과 모든 부서를 반환하며, 일치하지 않는 경우
NULL
값을 표시합니다.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
는 데이터를 그룹화하고, 집계 함수와 결합하여 각 그룹에 대한 요약 정보를 제공합니다. 이 절은 데이터를 요약하거나 집계하기 위한 분석 작업에서 필수적입니다.
집계 함수
- COUNT(): 행의 개수를 반환합니다.
- SUM(): 특정 열의 합계를 계산합니다.
- AVG(): 특정 열의 평균값을 반환합니다.
- 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;
서브쿼리: 복잡한 조건 처리
서브쿼리는 쿼리 내부에 포함된 또 다른 쿼리로, 복잡한 조건을 처리하거나 추가적인 데이터를 조회하는 데 사용됩니다.
서브쿼리 유형
- 단일 행 서브쿼리: 하나의 값을 반환합니다.
- 다중 행 서브쿼리: 여러 값을 반환하며
IN
,ANY
,ALL
등과 함께 사용됩니다. - 상관 서브쿼리: 메인 쿼리와 동작적으로 연결됩니다.
예제
가장 높은 급여를 받는 직원 조회:
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 쿼리와 데이터 분석 작업을 수행할 수 있습니다. 이러한 지식은 데이터베이스 관리를 넘어 데이터 기반 의사결정에서도 필수적입니다. 실습과 응용을 통해 이러한 기술을 익히는 것이 중요합니다.
'데이타베이스 > SqlServer' 카테고리의 다른 글
고급 SQL 쿼리: 윈도우 함수, 공통 테이블 표현식, 동적 SQL, 그리고 XML 및 JSON 처리 (0) | 2025.01.24 |
---|---|
SQL Server: 데이터베이스의 기초부터 고급 활용까지 (0) | 2025.01.24 |
SQL Server 보안 및 감사: 데이터 보호의 모든 것 (0) | 2025.01.24 |
데이터베이스 관리: 백업, 복원, 권한 및 성능 관리의 종합 가이드 (0) | 2025.01.24 |
데이터베이스 기초: 생성, 관리, 그리고 활용하기 (0) | 2025.01.24 |