1. JOIN이란?
JOIN은 여러 테이블에서 관련 데이터를 조합하여 하나의 결과로 반환하는 데 사용된다.
JOIN의 주요 유형
1. INNER JOIN : 두 테이블에서 일치하는 데이터만 반환
2. LEFT OUTER JOIN : 왼쪽 테이블의 모든 행과 오른쪾 테이블의 일치하는 데이터 반환
3. RIGHT OUTER JOIN : 오르쪽 테이블의 모든 행과 왼쪽테이블의 일치하는 데이터 반환
4. FULL OUTER JOIN : 두 테이블의 모든 데이터를 반환
5. CROSS JOIN : 두 테이블의 모든 조합 반환
2. INNER JOIN
두 테이블에서 일치하는 데이터만 반환한다.
기본 문법
SELECT [컬럼 이름들]
FROM 테이블1
INNER JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼;
예제
employees 테이블과 departments 테이블을 연결하여 직원 이름과 부서 이름을 조합한다.
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
3. LEFT OUTER JOIN
왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블의 일치하는 데이터가 없으면 NULL을 반환한다.
예제
모든 직원과 해당 부서 이름을 조회한다. 부서가 없는 직원도 포함된다.
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;
4. RIGHT OUTER JOIN
오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블의 일치하는 데이터가 없으면 NULL을 반환한다.
예제
모든 부서와 해당 부서에 속한 직원의 이름을 조회한다. 직원이 없는 부서도 포함된다.
SELECT e.first_name, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id;
5. FULL OUTER JOIN
두 테이블의 모든 데이터를 반환하며, 일치하지 않는 데이터는 NULL로 표시됩니다.
예제
모든 직원과 부서를 조회하며, 일치하지 않는 데이터도 포함합니다.
SELECT e.first_name, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON e.department_id = d.department_id;
4강: JOIN과 서브쿼리 활용
1. JOIN이란?
JOIN은 여러 테이블에서 관련 데이터를 조합하여 하나의 결과로 반환하는 데 사용됩니다.
데이터베이스는 보통 여러 테이블로 나뉘어 있으며, JOIN을 통해 이 데이터를 연결할 수 있습니다.
- INNER JOIN: 두 테이블에서 일치하는 데이터만 반환.
- LEFT OUTER JOIN: 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 데이터 반환.
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 데이터 반환.
- FULL OUTER JOIN: 두 테이블의 모든 데이터를 반환.
- CROSS JOIN: 두 테이블의 모든 조합 반환.
2. INNER JOIN
두 테이블에서 일치하는 데이터만 반환합니다.
기본 문법employees 테이블과 departments 테이블을 연결하여 직원 이름과 부서 이름을 조회합니다.
3. LEFT OUTER JOIN
왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블의 일치하는 데이터가 없으면 NULL을 반환합니다.
예제모든 직원과 해당 부서 이름을 조회합니다. 부서가 없는 직원도 포함됩니다.
4. RIGHT OUTER JOIN
오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블의 일치하는 데이터가 없으면 NULL을 반환합니다.
예제모든 부서와 해당 부서에 속한 직원의 이름을 조회합니다. 직원이 없는 부서도 포함됩니다.
5. FULL OUTER JOIN
두 테이블의 모든 데이터를 반환하며, 일치하지 않는 데이터는 NULL로 표시됩니다.
예제모든 직원과 부서를 조회하며, 일치하지 않는 데이터도 포함합니다.
6. CROSS JOIN
두 테이블의 모든 행을 조합하여 결과를 반환합니다.
조합 수가 많아질 수 있으므로 주의해야 합니다.
모든 직원과 모든 부서의 조합을 조회합니다.
SELECT e.first_name, d.department_name
FROM employees e
CROSS JOIN departments d;
7. 서브쿼리란?
서브쿼리는 다른 SQL 쿼리 안에 포함된 쿼리입니다.
주로 특정 데이터를 필터링하거나 동적으로 결과를 생성할 때 사용됩니다.
서브쿼리 사용 방식
- SELECT 문에서 사용
- WHERE 절에서 사용
- FROM 절에서 사용
8. WHERE 절에서의 서브쿼리
특정 조건에 따라 데이터를 필터링할 때 사용합니다.
예제
급여가 평균 급여보다 높은 직원을 조회합니다.
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
9. SELECT 문에서의 서브쿼리
서브쿼리의 결과를 컬럼처럼 활용합니다.
예제
각 직원의 급여와 전체 평균 급여를 조회합니다.
SELECT first_name, last_name, salary,
(SELECT AVG(salary) FROM employees) AS average_salary
FROM employees;
10. FROM 절에서의 서브쿼리
서브쿼리를 임시 테이블처럼 활용합니다.
예제
부서별 평균 급여를 계산한 결과에서, 평균 급여가 5000 이상인 부서를 조회합니다.
SELECT department_id, avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id) sub
WHERE avg_salary >= 5000;
11. 실습 예제
아래 SQL을 실습하며 JOIN과 서브쿼리를 익혀봅시다.
1. 직원의 이름과 해당 부서 이름 조회 (INNER JOIN)
SELECT e.first_name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
2. 부서가 없는 직원도 포함하여 직원 이름과 부서 이름 조회 (LEFT JOIN)
SELECT e.first_name, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;
3. 급여가 평균보다 높은 직원 조회 (서브쿼리 활용)
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
4. 부서별 평균 급여가 7000 이상인 부서 조회 (서브쿼리 활용)
SELECT department_id, avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id) sub
WHERE avg_salary >= 7000;
12. 과제
- employees와 departments를 JOIN하여 직원 이름과 부서 이름을 조회하세요.
- 평균 급여보다 낮은 급여를 받는 직원만 조회하세요.
- 부서별 직원 수를 구한 뒤, 직원 수가 10명 이상인 부서만 조회하세요.
4강 정리
- JOIN을 활용해 여러 테이블의 데이터를 연결하는 방법을 배웠습니다.
- 서브쿼리를 활용해 동적으로 데이터를 필터링하거나 생성하는 방법을 학습했습니다.
- JOIN과 서브쿼리의 조합으로 복잡한 데이터 조회를 구현할 수 있습니다.
다음 강에서는 **테이블 관리 (CREATE, ALTER, DROP)**와 **데이터 조작 (INSERT, UPDATE, DELETE)**을 학습하겠습니다! 📊
'오라클' 카테고리의 다른 글
5강: 테이블 관리와 데이터 조작 (0) | 2024.12.16 |
---|---|
3강 : SQL 기본 함수와 데이터 연산 (0) | 2024.12.11 |
2강 : SQL 기본 문법과 SELECT 활용 (0) | 2024.12.11 |
1강: 오라클 데이터베이스와 SQL 소개 (0) | 2024.12.11 |
not exists 이해하기 (1) | 2024.05.28 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!