--emp와 dept를 조인해서 emp사람들의 부서명을 구해보자
--1.
select e.empname,d.dname --약어 아닌 원래 테이블명으로도 가능
from emp e,dept d
where e.deptno=d.deptno;
--부모테이블
create table menu(m_num number(5) primary key,
m_name varchar2(20),price number(10));
create sequence seq_menu;
insert into menu values(seq_menu.nextval,'steak',30000);
insert into menu values(seq_menu.nextval,'spagetti',10000);
insert into menu values(seq_menu.nextval,'chicken',25000);
insert into menu values(seq_menu.nextval,'frenchfry',20000);
insert into menu values(seq_menu.nextval,'pickle',1000);
--자식테이블
--자식테이블에 연결된 부모가 있어도 부모를 삭제 가능, 부모테이블 삭제시 자동으로 자식삭제
create table myorder(o_num number(5) primary key,
m_num number(5) CONSTRAINT order_fk_mnum REFERENCES menu(m_num) ON DELETE CASCADE,
cnt number(5),o_date date);
insert into myorder values(seq_menu.nextval,1,2,sysdate);
insert into myorder values(seq_menu.nextval,2,3,sysdate);
insert into myorder values(seq_menu.nextval,3,1,sysdate);
insert into myorder values(seq_menu.nextval,4,6,sysdate);
insert into myorder values(seq_menu.nextval,5,10,sysdate);
--m_num(외래키) 값에 1~5(부모 테이블 키본키 값) 외의 값 입력 시 무결성 제약조건 위배
--최종출력
--주문번호 음식명 가격 개수 주문일자
select o_num,m_name,to_char(price,'L999,999'),cnt,o_date
from menu,myorder
where menu.m_num=myorder.m_num;
--board를 먼저 삭제
drop table board; --외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다
--자식
drop table answer; --외부키로 연결된 경우 자식테이블 먼저 삭제후 부모테이블 삭제가능
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class QuizConnectNewBoard {
static final String URL="jdbc:oracle:thin:@localhost:1521:XE";
public void connectSnsBoard() {
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
String sql="select b_num,nick,subject,content,wday from snsboard";
try {
conn=DriverManager.getConnection(URL,"RheeMingyu","a1234");
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
System.out.println("b_num\tnick\tsubject\tcontent\twday");
while(rs.next()) //true 값 반환, 더 이상 데이터 없으면 false 반환
{
// db로부터 데이터 가져오기
int b_num=rs.getInt("b_num"); //컬럼명 or 열변호
String nick=rs.getString("nick");
String subject=rs.getString("subject");
String content=rs.getString("content");
String wday=rs.getString("wday");
System.out.println(b_num+"\t"+nick+"\t"+subject+"\t"+content+"\t"+wday);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(conn!=null) conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
try~catch는 즉각 실행
Connection(conn)에서 URL, username, password를 매개변수로 입력
ResultSet(rs)에서 변수화한 SQL 쿼리문 매개변수로 입력
rs.next()는 true 값 반환 후 더 이상 데이터 없으면 false 반환
finally에서 클래스 닫을 시 if(~~≠null)는 생략 가능(null이면 닫을 필요도 없으므로)
public static void main(String[] args) {
QuizConnectNewBoard qcnb=new QuizConnectNewBoard();
qcnb.connectSnsBoard();
}
}