memo6759 님의 블로그
2025-09-26(SQL-3) 본문
1. 조인(Join)
관계형 데이터베이스에서 여러 테이블의 데이터를 원하는 형태로 결합할 때 사용한다.
기본적으로 **기본키 테이블(Parent)**과 **외래키 테이블(Child)**을 기준으로 조인한다.
조인 특징
- 반드시 연관성 있는 컬럼(기본키 ↔ 외래키)끼리 조인해야 함
- from 절에 사용할 모든 테이블을 정의
- where 절 또는 on 절에 조인 조건을 명시
- 컬럼명이 겹치는 경우 반드시 테이블명을 붙여 구분
- 여러 테이블 조인 시 모든 관계를 조건으로 작성해야 함
select 컬럼리스트
from 테이블1
[inner] join 테이블2
on 조인조건
[inner] join 테이블3
on 조인조건
where 조건;
조인 종류
- Inner Join (내부조인)
→ 양쪽 테이블에서 조건이 일치하는 데이터만 조회 - Outer Join (외부조인)
- left outer join: 왼쪽 테이블은 모두 출력, 오른쪽은 매칭되는 것만 출력
- right outer join: 오른쪽 테이블은 모두 출력
- full outer join: 양쪽 테이블의 모든 데이터를 합집합으로 조회
- Self Join (자기 조인)
- 같은 테이블을 두 번 불러서 마치 다른 테이블처럼 사용
2. 서브쿼리(Subquery)
쿼리 내부에 또 다른 쿼리를 포함하는 것.
select, from, where, having 절에서 모두 사용 가능하며, ()`로 감싸서 작성한다.
서브쿼리 종류
- 단일행 서브쿼리
→ 결과가 1행 1열
→ =, <, >, <=, >=, <> 비교연산자 사용
select *
from emp
where sal > (select avg(sal) from emp where deptno = 10);
다중행 서브쿼리
→ 결과가 여러 행
→ in, any, all과 함께 사용
-- sal이 (800,1250,1500) 중 하나와 일치
where sal in (800,1250,1500);
-- 최소값보다 크다
where sal > any (800,1200,1500);
-- 최대값보다 크다
where sal > all (800,1200,1500);
다중컬럼 서브쿼리
→ 여러 컬럼을 동시에 비교
select empno, deptno, sal
from emp
where (deptno, sal) in (
select deptno, min(sal)
from emp
group by deptno
);
상호연관 서브쿼리 (Correlated Subquery)
→ 서브쿼리가 메인쿼리의 값을 참조함
→ 메인쿼리 행마다 반복 실행
select empno, ename, deptno, sal
from emp main
where sal > (select avg(sal)
from emp
where deptno = main.deptno);
from 절 서브쿼리 (Inline View)
→ 결과를 가상 테이블처럼 사용
select empno, ename, e.deptno, sal
from emp e
join (select deptno, avg(sal) avgsal
from emp
group by deptno) avgtable
on e.deptno = avgtable.deptno
where e.sal > avgtable.avgsal;
3. 윈도우 함수(Window Function)
over()와 partition by
→ 그룹별 집계 결과를 각 행에 표시
select empno, ename, deptno, sal,
avg(sal) over(partition by deptno) as avgsal
from emp;
순위 함수
- rank(): 동일 순위 후 다음 순위는 건너뜀
- dense_rank(): 동일 순위 후 다음 순위를 건너뛰지 않음
-- 전체 급여 순위
select ename, sal, rank() over(order by sal desc) rnk
from emp;
-- 부서별 급여 순위
select ename, sal, rank() over(partition by deptno order by sal desc) rnk
from emp;
-- dense_rank 예시
select ename, sal, dense_rank() over(order by sal desc) rnk
from emp;
'HDC 학습일지' 카테고리의 다른 글
| 2025-09-30(JDBC) (0) | 2025.10.01 |
|---|---|
| 2025-09-29(SQL-4 DDL, 제약조건, VIEW) (0) | 2025.09.30 |
| 2025-09-25(SQL-2) (0) | 2025.09.25 |
| 2025-09-24(SQL-1) (0) | 2025.09.24 |
| 2025-09-23(깃허브 사용법) (0) | 2025.09.24 |