Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Archives
Today
Total
관리 메뉴

memo6759 님의 블로그

2025-09-26(SQL-3) 본문

HDC 학습일지

2025-09-26(SQL-3)

heewon09 2025. 9. 27. 16:27

1. 조인(Join)

관계형 데이터베이스에서 여러 테이블의 데이터를 원하는 형태로 결합할 때 사용한다.
기본적으로 **기본키 테이블(Parent)**과 **외래키 테이블(Child)**을 기준으로 조인한다.

조인 특징

 

  • 반드시 연관성 있는 컬럼(기본키 ↔ 외래키)끼리 조인해야 함
  • from 절에 사용할 모든 테이블을 정의
  • where 절 또는 on 절에 조인 조건을 명시
  • 컬럼명이 겹치는 경우 반드시 테이블명을 붙여 구분
  • 여러 테이블 조인 시 모든 관계를 조건으로 작성해야 함
select 컬럼리스트
from 테이블1
[inner] join 테이블2
    on 조인조건
[inner] join 테이블3
    on 조인조건
where 조건;

 

조인 종류

  1. Inner Join (내부조인)
    → 양쪽 테이블에서 조건이 일치하는 데이터만 조회
  2. Outer Join (외부조인)
    • left outer join: 왼쪽 테이블은 모두 출력, 오른쪽은 매칭되는 것만 출력
    • right outer join: 오른쪽 테이블은 모두 출력
    • full outer join: 양쪽 테이블의 모든 데이터를 합집합으로 조회
  3. Self Join (자기 조인)
    • 같은 테이블을 두 번 불러서 마치 다른 테이블처럼 사용

2. 서브쿼리(Subquery)

쿼리 내부에 또 다른 쿼리를 포함하는 것.
select, from, where, having 절에서 모두 사용 가능하며, ()`로 감싸서 작성한다.

서브쿼리 종류

  1. 단일행 서브쿼리
    → 결과가 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