select from board;
select from member;
--물리적인 테이블 요소에서 pk----fk의 관계----
--테이블을 여러개 만들어지는 것을 다라고 설정하면
--1 : 1 일 대 일 관계
--1 : N 일 대 다 관계
--M : N 다 대 다 관계
--+Foreign Key를 가지고 있는 테이블은 다 테이블이다
--+이름은 중복(동명이인)이 존재하기 때문에 닉네임이나 이메일을 이용한다
select b.bno , b.title, b.read_count, m.email, b.created_date
from board b, member m;
select b.bno , b.title, b.read_count, m.email, b.created_date,b.mno b_mno_fk ,m.mno m_mno_fk
from board b, member m
where b.mno=m.mno
order by bno;
select bno ,title, read_count, email, b.created_date
from board b join member
using (mno)--양쪽의 컬럼명이 일치하는 경우 사용가능 유징이 자동으로 식별자처리해줌
order by bno;
select b.bno, b.title, b.read_count, email, created_date, mno
from board b natural join member--양쪽 테이블의 같은 이름의 컬럼이 존재하면 모두 AND 동등조건으로
order by bno;--조인조건을 쓰지 않고 내부적으로 자동으로 처리
select bno ,title, read_count, email, b.created_date
from board b LEFT join member m --OUTER는 의미 없음 LEFT 혹은 right
on b.mno = m.mno
order by bno;
select bno ,title, read_count, email, b.created_date
from board b right join member m--OUTER는 의미 없음 LEFT 혹은 right
on b.mno = m.mno
order by bno;
--fk + not null
insert into member VALUES(seq_mem.NEXTVAL,'테스트@', '0000', '테', sysdate);
--스칼라 서브쿼리로도 board기준 outer join과 동일한 결과를 얻을 수 있다.
select bno ,title, read_count, (select email from member m where m.mno = b.mno)name, created_date
from board b
order by bno;
SELECT from member;
SELECT from board;
insert into reply(rno, content, bno, mno)
values(seq_re.NEXTVAL, 2||'댓글정보',2,2);
commit;
SELECT * from reply;
--2번의 게시글의 댓글정보를 출력하세요
select rno, content 댓글내용, r.created_date, name 작성자, r.mno
from reply r, member m
where bno=3 and r.mno=m.mno;
select * from member;
delete member where mno=61;
--종속된 관계가 없는 61번은 바로 삭제가 가능
delete member where mno=2;
--게시글이랑 댓글쓴 2번은 종속된 관계를 가지고 있기 때문에 멤버정보를 삭제하기 위해서는
--그 해당 멤버의 종속된 관계를 정리해야 삭제가 가능하다.