[데이터 베이스]9.join

손영민's avatar
Mar 09, 2025
[데이터 베이스]9.join
 
INNER JOIN
OUTER JOIN
1.연관 관계의 종류
1.1. 일대일 관계 (One-to-One) 정의: 한 테이블의 각 행이 다른 테이블의 단 하나의 행과만 연결되는 관계입니다. 예시: 사용자 테이블과 사용자 상세 정보 테이블이 있을 때, 각 사용자에게 하나의 상세 정보만 있을 경우.
1.2. 일대다 관계 (One-to-Many) 정의: 한 테이블의 각 행이 다른 테이블의 여러 행과 연결되는 관계입니다. 가장 일반적으로 사용되는 관계입니다. 예시: 한 고객이 여러 주문을 할 수 있는 경우. 고객 테이블과 주문 테이블 간의 관계가 일대다입니다.
1.3. 다대다 관계 (Many-to-Many) 정의: 한 테이블의 여러 행이 다른 테이블의 여러 행과 연결되는 관계입니다. 이 관계는 중간 테이블(조인 테이블)을 통해 해결됩니다. 예시: 학생과 수업의 관계에서, 한 학생이 여러 수업을 듣고, 한 수업에 여러 학생이 있을 수 있는 경우.
 
 
 
  1. 조인
CREATE TABLE user_tb( id int primary key auto_increment, username varchar(20), password varchar(20), email varchar(100) ); CREATE TABLE feed_tb( id int primary key auto_increment, title varchar(1000), photo_url varchar(100), user_id int ); CREATE TABLE reply_tb( id int primary key auto_increment, content varchar(100), user_id int, feed_id int ); insert into user_tb(username, password, email) values('ssar', '1234', 'ssar@nate.com'); insert into user_tb(username, password, email) values('cos', '1234', 'cos@nate.com'); insert into user_tb(username, password, email) values('love', '1234', 'love@nate.com'); insert into feed_tb(title, photo_url, user_id) values('계곡왔어요', 'http://xn--989a5b.com', 1); insert into feed_tb(title, photo_url, user_id) values('바다왔어요', 'http://xn--2j1b67o.com', 2); insert into reply_tb(content, user_id, feed_id) values('굿', 2, 1); insert into reply_tb(content, user_id, feed_id) values('별로', 3, 1); -- 1. 이너조인 select * from feed_tb ft inner join user_tb ut on ft.user_id = ut.id; select * from feed_tb; select * from user_tb; select * from emp; select * from dept; select * from emp e inner join dept d on e.deptno = d.deptno; -- 2. 이너조인 실패 사례 select * from reply_tb; select * from feed_tb ft inner join user_tb ut on ft.user_id = ut.id inner join reply_tb rt on ft.id = rt.feed_id; -- 3. 아우터 조인 (내가 원하는 테이블에 모든 데이터를 다 뽑으면서 조인하기 위해) select * from feed_tb ft inner join user_tb ut on ft.user_id = ut.id left outer join reply_tb rt on ft.id = rt.feed_id; -- 4. 화면 데이터 완성하기 (인라인뷰) select post.feed_title, post.feed_picture, post.feed_writer, post.reply_content, rut.username reply_writer from ( select ft.title feed_title, ft.photo_url feed_picture, ut.username feed_writer, rt.content reply_content, rt.user_id reply_writer_id from feed_tb ft inner join user_tb ut on ft.user_id = ut.id left outer join reply_tb rt on ft.id = rt.feed_id ) post left outer join user_tb rut on post.reply_writer_id = rut.id; -- 5. 화면 진짜 완성 select ft.title feed_title, ft.photo_url feed_picture, ut.username feed_writer, rt.content reply_content, rut.username reply_writer from feed_tb ft inner join user_tb ut on ft.user_id = ut.id left outer join reply_tb rt on ft.id = rt.feed_id left outer join user_tb rut on rt.user_id = rut.id;
 
 
3self join
계층을 찾을 때 주로 사용한다. (같은 테이블끼리 조인한다)
select e1.empno, e1.ename '사원명', e2.ename '상사명' from emp e1 left outer join emp e2 on e1.mgr = e2.empno;
notion image
Share article

sson17