topic★★★★★난이도 · 약 25분
SQL 심화 — JOIN·서브쿼리·집계
INNER JOIN, LEFT JOIN, 서브쿼리, GROUP BY + HAVING, 집계 함수.
#SQL#JOIN#서브쿼리#집계
왜 배우는가
JOIN과 서브쿼리는 난도가 높지만 매회 출제된다. INNER vs LEFT vs CROSS JOIN 차이와 서브쿼리 위치(WHERE/FROM/SELECT)를 확실히 잡자.
sql
-- INNER JOIN
SELECT A.이름, B.부서명
FROM 직원 A INNER JOIN 부서 B
ON A.부서코드 = B.부서코드;
-- LEFT JOIN (왼쪽 테이블 기준)
SELECT A.이름, B.부서명
FROM 직원 A LEFT JOIN 부서 B
ON A.부서코드 = B.부서코드;
-- 서브쿼리 (WHERE절)
SELECT 이름 FROM 직원
WHERE 급여 > (SELECT AVG(급여) FROM 직원);| JOIN 종류 | 설명 | 결과 |
|---|---|---|
| INNER JOIN | 양쪽 테이블에 일치하는 행만 | 교집합 |
| LEFT JOIN | 왼쪽 테이블 전체 + 오른쪽 일치 | 왼쪽 기준 |
| RIGHT JOIN | 오른쪽 테이블 전체 + 왼쪽 일치 | 오른쪽 기준 |
| CROSS JOIN | 모든 조합 (카르테시안 곱) | M × N 행 |
집계 함수: `COUNT(*)`, `SUM()`, `AVG()`, `MAX()`, `MIN()`. GROUP BY로 그룹화한 뒤 HAVING으로 그룹 조건을 필터링한다. WHERE는 그룹화 전, HAVING은 그룹화 후 필터.
sql
-- GROUP BY + HAVING
SELECT 부서, COUNT(*) AS 인원, AVG(급여) AS 평균급여
FROM 직원
GROUP BY 부서
HAVING COUNT(*) >= 5
ORDER BY 평균급여 DESC;WHERE vs HAVING — WHERE는 행을 필터, HAVING은 그룹을 필터. 집계 함수는 HAVING에서만 쓸 수 있다.
실기 드릴 2문항
database실기 드릴 · SQL 작성
직원 테이블에서 부서별 평균 급여가 4000 이상인 부서명과 평균 급여를 조회하시오.
check_circle실기 드릴 · OX
LEFT JOIN은 오른쪽 테이블의 모든 행을 포함한다.