내가 헷갈리는 것들만 표로 보기위해 간단하게 표로 정리.
(GPT로 생성했으므로 틀렸을 가능성도 있음)


















셀프조인으로 계층형 구현하기
SELECT e.employee_name AS employee, m.employee_name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.employee_id
ORDER BY e.employee_name;
CTE는 Common Table Expression의 약자이며, SQL에서 일시적인 결과 집합을 정의하는 방법입니다. CTE는 쿼리 내에서 재사용 가능한 임시 결과 집합을 만들고, 이를 읽기 쉬운 방식으로 쿼리에서 사용하도록 해줍니다. CTE는 WITH 절을 사용하여 정의됩니다.
WITH cte_name AS (
-- CTE 정의
SELECT columns
FROM table
WHERE condition
)
-- CTE를 사용하는 쿼리
SELECT * FROM cte_name;
WITH: CTE를 정의하는 키워드.cte_name: 정의된 CTE의 이름.WITH DepartmentCTE AS (
SELECT department_id, department_name
FROM departments
WHERE department_id > 10
)
SELECT * FROM DepartmentCTE;
DepartmentCTE는 departments 테이블에서 department_id > 10인 데이터를 가져오는 임시 결과 집합입니다.재귀적 CTE는 자기 자신을 참조하는 CTE로, 부모-자식 관계를 표현할 수 있습니다. 예를 들어, 직원들 간의 상사-부하 관계를 다룰 때 유용합니다.
WITH EmployeeHierarchy AS (
-- Anchor member: 최고 경영자 (manager_id가 NULL인 직원)
SELECT employee_id, employee_name, manager_id, 1 AS LEVEL
FROM employees
WHERE manager_id IS NULL
UNION ALL
-- Recursive member: 각 직원의 하위 직원을 찾기
SELECT e.employee_id, e.employee_name, e.manager_id, eh.LEVEL + 1
FROM employees e
INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id
)
SELECT employee_id, employee_name, manager_id, LEVEL
FROM EmployeeHierarchy
ORDER BY LEVEL, manager_id;
manager_id가 NULL인 최고 경영자부터 시작하여 계층의 루트를 정의합니다.UNION ALL을 사용하여 재귀적으로 하위 직원을 찾습니다. manager_id가 employee_id와 일치하는 직원을 찾고, LEVEL을 1씩 증가시킵니다.CTE는 일시적인 결과 집합을 정의하여, 복잡한 쿼리를 간결하고 가독성 좋게 작성할 수 있는 방법입니다. 특히 재귀적 CTE를 사용하면 계층형 데이터를 처리하는 데 유용합니다. CTE는 단일 쿼리 내에서 재사용 가능하며, 복잡한 로직을 더 간결하게 처리할 수 있습니다.