SQL 학습: 고급 데이터 조회
고급 데이터 조회를 통해 더 복잡한 쿼리를 작성하고, 데이터를 더 효율적으로 분석할 수 있습니다. 이번 글에서는 집계 함수, GROUP BY 및 HAVING 절, JOIN, 서브쿼리에 대해 알아보겠습니다.
4.1 집계 함수
집계 함수는 데이터의 집합에 대해 계산을 수행하는 함수입니다. SQL에서 자주 사용되는 집계 함수는 다음과 같습니다.
1. COUNT : 테이블에서 행의 개수를 계산합니다.
[sql]
SELECT COUNT(*) FROM employees;
2. SUM : 열의 값들의 합계를 계산합니다.
[sql]
SELECT SUM(salary) FROM employees;
3. AVG : 열의 값들의 평균을 계산합니다.
[sql]
SELECT AVG(salary) FROM employees;
4. MAX : 열의 최대 값을 반환합니다.
[sql]
SELECT MAX(salary) FROM employees;
5. MIN : 열의 최소 값을 반환합니다.
[sql]
SELECT MIN(salary) FROM employees;
4.2 GROUP BY 및 HAVING
1. GROUP BY 절 : GROUP BY 절은 특정 열을 기준으로 행을 그룹화하고, 각 그룹에 대해 집계 함수를 적용할 수 있습니다.
[sql]
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;
위의 예제는 각 부서별로 직원 수를 계산합니다.
2. HAVING 절 : HAVING 절은 그룹화된 데이터에 대한 조건을 지정할 때 사용됩니다. WHERE 절은 그룹화 전에 조건을 지정하고, HAVING 절은 그룹화 후에 조건을 지정합니다.
[sql]
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 10;
위의 예제는 직원 수가 10명 이상인 부서만 선택합니다.
4.3 JOIN
JOIN은 여러 테이블에서 데이터를 결합하는 데 사용됩니다. SQL에서 자주 사용되는 JOIN의 종류는 다음과 같습니다.
1. INNER JOIN : 두 테이블에서 일치하는 행만 반환합니다.
[sql]
SELECT employees.first_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
2. LEFT (OUTER) JOIN : 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. 일치하지 않는 경우 NULL을 반환합니다.
[sql]
SELECT employees.first_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
3. RIGHT (OUTER) JOIN : 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다. 일치하지 않는 경우 NULL을 반환합니다.
[sql]
SELECT employees.first_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;
4. FULL (OUTER) JOIN : 두 테이블에서 일치하는 행과 일치하지 않는 행 모두를 반환합니다. 일치하지 않는 경우 NULL을 반환합니다.
[sql]
SELECT employees.first_name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.department_id;
5. CROSS JOIN : 두 테이블의 모든 가능한 조합을 반환합니다. 결과는 Cartesian 곱입니다.
[sql]
SELECT employees.first_name, departments.department_name
FROM employees
CROSS JOIN departments;
6. SELF JOIN : 자기 자신을 조인하여 데이터를 결합합니다.
[sql]
SELECT e1.first_name AS Employee, e2.first_name AS Manager
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.employee_id;
4.4 서브쿼리
서브쿼리는 쿼리 내에 포함된 또 다른 쿼리입니다. 서브쿼리는 단일 행, 다중 행, 다중 열, 상관 서브쿼리로 나눌 수 있습니다.
1. 단일 행 서브쿼리 : 단일 행 서브쿼리는 하나의 행만 반환합니다.
[sql]
SELECT first_name, last_name FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');
2. 다중 행 서브쿼리 : 다중 행 서브쿼리는 여러 행을 반환할 수 있습니다.
[sql]
SELECT first_name, last_name FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1700);
3. 다중 열 서브쿼리 : 다중 열 서브쿼리는 여러 열을 반환할 수 있습니다.
[sql]
SELECT first_name, last_name FROM employees
WHERE (department_id, job_id) IN (SELECT department_id, job_id FROM job_history);
4. 상관 서브쿼리 : 상관 서브쿼리는 외부 쿼리와 상호 참조됩니다.
[sql]
SELECT first_name, last_name FROM employees e1
WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e1.department_id = e2.department_id);
위의 예제는 부서 평균 급여보다 높은 급여를 받는 직원을 선택합니다.
이 글에서는 고급 데이터 조회 기법에 대해 알아보았습니다. 집계 함수를 사용하여 데이터를 요약하고, GROUP BY와 HAVING 절을 사용하여 데이터를 그룹화하며, 다양한 JOIN을 사용하여 여러 테이블에서 데이터를 결합하고, 서브쿼리를 사용하여 복잡한 쿼리를 작성할 수 있습니다. 이러한 고급 기법을 활용하여 데이터를 효율적으로 분석하고 관리할 수 있습니다. 다음 단계에서는 데이터 제어 언어(DCL)를 학습하여 데이터베이스의 접근 권한을 관리하는 방법을 알아보겠습니다. Happy Coding!
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 6. SQL의 "데이터베이스 설계 및 정규화" (1) | 2024.07.13 |
---|---|
[SQL] 5. SQL의 "데이터 제어 언어 (DCL)" (0) | 2024.07.12 |
[SQL] 3. SQL의 "데이터 조작 언어 (DML)" (0) | 2024.06.29 |
[SQL] 2. SQL의 "데이터 정의 언어 (DDL)" (0) | 2024.06.29 |
[SQL] 1. SQL의 "기본 개념" (1) | 2024.06.28 |