topic난이도 · 약 25

SQL 심화 — JOIN·서브쿼리·집계

INNER JOIN, LEFT JOIN, 서브쿼리, GROUP BY + HAVING, 집계 함수.

#SQL#JOIN#서브쿼리#집계
왜 배우는가

JOIN과 서브쿼리는 난도가 높지만 매회 출제된다. INNER vs LEFT vs CROSS JOIN 차이와 서브쿼리 위치(WHERE/FROM/SELECT)를 확실히 잡자.

JOIN 4종 벤 다이어그램 — 버튼 클릭으로 INNER/LEFT/RIGHT/FULL 결과 행이 바뀌는 모습
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은 오른쪽 테이블의 모든 행을 포함한다.