네트워크 캠퍼스/Database
240220 데이터베이스(서브쿼리)
gayeon_
2024. 2. 20. 15:51
서브쿼리 (Subquery)
- SQL 문장 내에서 다른 SQL 문장을 포함하는 구조를 말한다.
- 서브쿼리를 사용하면 데이터베이스에서 더 복잡한 질의를 수행할 수 있고 한 번에 여러 단계의 처리를 수행할 수 있다.
- 서브쿼리는 주로 괄호 () 안에 작성하며 일반적으로 결과를 반환한다.
서브쿼리의 종류
서브쿼리는 사용되는 위치와 반환하는 결과의 행 개수에 따라 세 종류로 분류할 수 있다.
- 단일 행 서브쿼리 (Single-row Subquery): 서브쿼리가 하나의 행만 반환. 주로 비교 연산자(=, >, <, >=, <=, <>)를 사용
- 다중 행 서브쿼리 (Multi-row Subquery): 서브쿼리가 둘 이상의 행을 반환하. 다중 행 비교 연산자(IN, ANY, ALL, EXISTS, NOT EXISTS) 사용
- 다중 열 서브쿼리 (Multi-column Subquery): 서브쿼리가 둘 이상의 열을 반환. 비교 연산자와 함께 사용되며 주로 연관 서브쿼리로 작성
서브쿼리를 사용할 수 있는 위치
1) SELECT 절: 서브쿼리를 사용하여 표현식을 계산하거나 결과를 반환
SELECT employee_id, salary, (SELECT AVG(salary) FROM employees) AS average_salary FROM employees;
2) FROM 절: 서브쿼리를 사용하여 가상 테이블을 생성하거나 다른 테이블과 조인
SELECT e.employee_id, e.salary, avg_salaries.average_salary FROM employees e, (SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id) avg_salaries WHERE e.department_id = avg_salaries.department_id;
3) WHERE 절: 서브쿼리를 사용하여 조건을 지정하거나 비교 연산자와 함께 사용
SELECT employee_id, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
4) HAVING 절: 서브쿼리를 사용하여 그룹화된 결과에 대한 조건을 지정
SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > (SELECT AVG(salary) FROM employees);
5) INSERT 절: 서브쿼리를 사용하여 삽입할 값을 선택
INSERT INTO new_employees (employee_id, name, salary)
SELECT employee_id, name, salary
FROM employees
WHERE salary > 50000;
6) UPDATE 절: 서브쿼리를 사용하여 업데이트할 값을 계산
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'IT');
7) DELETE 절: 서브쿼리를 사용하여 삭제할 행을 지정
DELETE FROM employees
WHERE employee_id IN (SELECT employee_id FROM employees WHERE salary < 50000);