에듀테크 프로젝트 대시보드
조인 (JOIN)
여러 테이블의 행을 조건으로 연결합니다. 대부분 INNER 와 LEFT 로 해결됩니다.
| 조인 | 결과 |
|---|---|
INNER JOIN | 양쪽 다 매칭되는 행만 |
LEFT JOIN | 왼쪽 전부 + 매칭되는 오른쪽 (없으면 NULL) |
RIGHT JOIN | LEFT 의 반대 (잘 안 씀) |
FULL JOIN | 양쪽 모두 + 매칭 안 되면 NULL |
CROSS JOIN | 곱집합 (모든 조합) |
SELECT s.name, c.room
FROM students s
JOIN classes c ON c.id = s.class_id; -- INNER
SELECT s.name, e.score
FROM students s
LEFT JOIN exams e ON e.student_id = s.id -- 시험 안 본 학생도 포함
AND e.exam_date = '2026-09-01'; -- ON 에 추가 조건LEFT JOIN 후 WHERE 오른쪽테이블.col = ... 를 쓰면 매칭 안 된 행이 걸러져 사실상 INNER 가 됨 → 그 조건은 ON 절로-- 같은 테이블 두 번 (직원-상사)
SELECT e.name AS emp, m.name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
-- 양쪽 컬럼명이 같으면 USING (결과에 컬럼 1개만)
SELECT * FROM orders JOIN customers USING (customer_id);-- 각 학생의 최근 시험 3건
SELECT s.name, e.exam_date, e.score
FROM students s
LEFT JOIN LATERAL (
SELECT exam_date, score FROM exams
WHERE student_id = s.id
ORDER BY exam_date DESC LIMIT 3
) e ON true;LATERAL 서브쿼리는 FROM 의 앞 테이블 컬럼(s.id)을 참조할 수 있습니다. 'top-N per group' 의 정석.