[SQL] 시퀀스 조인 외래키
📌 들어가며
이번 글에서는 자동 증가를 담당하는 시퀀스(Sequence), 두 테이블을 잇는 조인(Join), 그 축이 되는 외래키(Foreign Key)를 정리한다.
1. 시퀀스 (Sequence)
MySQL에는
auto_increment가 있지만 오라클에는 없다. 그래서 자동 증가를 위해 시퀀스를 따로 만들어야 한다.
먼저 권한이 필요하다. (관리자 system으로 접속 후)
1
grant create sequence to batman; -- batman에게 시퀀스 생성 권한 부여
이제 batman으로 시퀀스를 만든다.
1
2
3
create sequence seq
increment by 1 -- 1씩 증가
start with 1; -- 1부터 시작
테이블에서 사용 — 시퀀스.nextval로 다음 값을 얻는다.
1
2
3
4
5
6
7
8
9
create table family(
family_id number primary key, -- 오라클은 int 대신 number
name varchar(25),
age number,
job varchar(25)
);
insert into family(family_id, name, age, job)
values(seq.nextval, 'spiderman', 78, 'police'); -- family_id에 자동 증가값
💡
seq.nextval은 마지막 순번 뒤에 차례로 값을 넣는다. 레코드가 없으면 마지막이 0이니 1이 들어간다. 시퀀스를 잘 활용하면 1씩 증가 외에 나만의 방식으로도 자동 증가를 만들 수 있다.
2. 조인 (Join)
조인은 두 테이블을 이어주는 작업이다. 외래키를 축으로 연결한다.
emp(직원)와 dept(부서)를 그냥 함께 부르면?
1
select * from emp, dept; -- 56 rows! (14 × 4)
⚠️
emp14개 ×dept4개 = 56개가 서로 중복 연결된다(카티션 곱). 우리가 원하는 건 이게 아니다.
deptno가 같은 것끼리만 연결한다.
1
select * from emp, dept where emp.deptno = dept.deptno; -- 14 rows
1
2
3
emp.deptno ─┐
├─ 같은 deptno끼리 짝지음 → 14개 (올바른 조인)
dept.deptno ┘
💡 두 테이블을 잇는 외래키가
deptno다.where로 “양쪽의 deptno가 같은 것만” 조건을 걸어 올바르게 연결한다.
📝 정리
1
2
3
4
시퀀스 · 조인 · 외래키
├─ 시퀀스 오라클의 자동증가 (create sequence, seq.nextval)
├─ 조인 두 테이블 연결 (그냥 부르면 카티션 곱!)
└─ 조건조인 where 테이블A.키 = 테이블B.키
| 개념 | 한 줄 정의 |
|---|---|
| 시퀀스 | 오라클의 자동 증가 객체 |
| nextval | 시퀀스의 다음 값 |
| 조인 | 외래키를 축으로 두 테이블 연결 |
| 카티션 곱 | 조건 없이 조인 시 모든 조합(14×4) |
오라클은 자동 증가를 시퀀스로 처리하고, 정규화된 테이블은 외래키를 축으로 조인해 다시 합친다. 조인 시 조건(where)이 없으면 카티션 곱이 발생한다는 점을 꼭 기억하자.
This post is licensed under CC BY 4.0 by the author.


Comments powered by Disqus.