SQL UNION은 두 개 이상의 SELECT 쿼리 결과를 하나로 결합할 때 사용됩니다. 여러 SELECT 쿼리에서 반환된 결과를 하나의 집합으로 반환하며, 기본적으로 중복된 값은 제거됩니다. 중복된 값을 포함하려면 UNION ALL을 사용할 수 있습니다.
SELECT customer_id FROM orders_jan UNION SELECT customer_id FROM orders_feb;
SELECT customer_id FROM orders_jan UNION ALL SELECT customer_id FROM orders_feb;
SQL JOIN은 두 개 이상의 테이블을 결합하여 데이터를 조회할 때 사용됩니다. JOIN은 테이블 간에 공통된 키를 기반으로 데이터를 연결함.
table1과 table2에서 공통 열(common_column)을 기준으로 일치하는 데이터만 반환
SELECT t1.column_name, t2.column_name FROM table1 t1 INNER JOIN table2 t2 ON t1.common_column = t2.common_column;
table1의 모든 행을 반환하고, table2에서 일치하는 값이 없는 경우 NULL을 반환
SELECT t1.column_name, t2.column_name FROM table1 t1 LEFT JOIN table2 t2 ON t1.common_column = t2.common_column;
table2의 모든 행을 반환하고, table1에서 일치하는 값이 없는 경우 NULL을 반환
SELECT t1.column_name, t2.column_name FROM table1 t1 RIGHT JOIN table2 t2 ON t1.common_column = t2.common_column;
두 테이블의 모든 행을 반환하고, 일치하지 않는 값은 NULL로 표시
SELECT t1.column_name, t2.column_name FROM table1 t1 FULL JOIN table2 t2 ON t1.common_column = t2.common_column;
테이블의 모든 가능한 행 조합을 반환
SELECT t1.column_name, t2.column_name FROM table1 t1 CROSS JOIN table2 t2;
테이블 구조:
employees
: 직원 정보
- employee_id
: 직원 ID
- department_id
: 부서 ID
- employee_name
: 직원 이름
departments
: 부서 정보
- department_id
: 부서 ID
- department_name
: 부서 이름
SELECT e.employee_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id;
테이블 구조:
orders
: 주문 정보
- order_id
: 주문 ID
- customer_id
: 고객 ID
- order_date
: 주문 날짜
customers
: 고객 정보
- customer_id
: 고객 ID
- customer_name
: 고객 이름
SELECT c.customer_name, o.order_date FROM customers c INNER JOIN orders o ON c.customer_id = o.customer_id;
테이블 구조:
employees
: 직원 정보
- employee_id
: 직원 ID
- department_id
: 부서 ID
departments
: 부서 정보
- department_id
: 부서 ID
- department_name
: 부서 이름
projects
: 프로젝트 정보
- project_id
: 프로젝트 ID
- department_id
: 부서 ID
- project_name
: 프로젝트 이름
SELECT d.department_name, p.project_name, COUNT(e.employee_id) AS employee_count FROM departments d LEFT JOIN projects p ON d.department_id = p.department_id LEFT JOIN employees e ON d.department_id = e.department_id GROUP BY d.department_name, p.project_name;
테이블 구조:
sales_2023
: 2023년 판매 정보
- product_id
: 제품 ID
- quantity
: 판매 수량
sales_2024
: 2024년 판매 정보
- product_id
: 제품 ID
- quantity
: 판매 수량
products
: 제품 정보
- product_id
: 제품 ID
- product_name
: 제품 이름
SELECT p.product_name, s1.quantity AS quantity_2023, s2.quantity AS quantity_2024 FROM products p INNER JOIN sales_2023 s1 ON p.product_id = s1.product_id INNER JOIN sales_2024 s2 ON p.product_id = s2.product_id;