전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

Database/Oracle

[Oracle] DDL_실습문제

2023. 8. 1. 22:56

실습문제

도서관리 프로그램을 만들기 위한 테이블을 만들기
이때, 제약조건에 이름을 부여할 것
각 컬럼에 주석달기


1. 출판사들에 대한 데이터를 담기 위한 출판사 테이블(TB_PUBLISHER)
컬럼: PUB_NO(출판사번호)
기본키(PUBLISHER_PK)
PUB_NAME(출판사명)
NOT NULL(PUBLICHSER_NN)
PHONE(출판사전화번호)
제약조건 없음
3개 정도의 샘플 데이터 추가하기
CREATE TABLE TB_PUBLISHER(
    PUB_NO VARCHAR2(10) CONSTRAINT PUBLISHER_PK PRIMARY KEY,
    PUB_NAME VARCHAR2(20) CONSTRAINT PUBLISHER_NN NOT NULL,
    PHONE VARCHAR2(13)
    );
INSERT INTO TB_PUBLISHER VALUES('P01','촴비','01011112222');
INSERT INTO TB_PUBLISHER VALUES('P02','문학돈내','01033334444');
INSERT INTO TB_PUBLISHER VALUES('P03','부기시빌','01055556666');

COMMENT ON COLUMN TB_PUBLISHER.PUB_NO IS '출판사번호';
COMMENT ON COLUMN TB_PUBLISHER.PUB_NAME IS '출판사명';
COMMENT ON COLUMN TB_PUBLISHER.PHONE IS '출판사전화번호';


2. 도서들에 대한 데이터를 담기 위한 도서 테이블(TB_BOOK)
컬럼: BK_NO(도서번호)
기본키(BOOK_PK)
BK_TITLE(도서명)
NOT NULL(BOOK_NN_TITLE)
BK_AUTHOR(저자명)
NOT NULL(BOOK_NN_AUTHOR)
BK_PRICE(가격)
BK_STOCK(재고)
기본값 1로 지정
BK_PUB_NO(출판사번호)
외래키(BOOK_FK)(TB_PUBLISHER 테이블을 참조하도록)
이때 참조하고 있는 부모데이터 삭제 시 자식데이터도 삭제되도록 설정
5개 정도의 샘플 데이터 추가하기
CREATE TABLE TB_BOOK(
BK_NO VARCHAR2(10) CONSTRAINT BOOK_PK PRIMARY KEY,
BK_TITLE VARCHAR2(40) CONSTRAINT BOOK_NN_TITLE NOT NULL,
BK_AUTHOR VARCHAR2(20) CONSTRAINT BOOK_NN_AUTHOR NOT NULL,
BK_PRICE NUMBER,
BK_STOCK NUMBER DEFAULT 1,
BK_PUB_NO VARCHAR2(10) CONSTRAINT BOOK_FK REFERENCES TB_PUBLISHER ON DELETE CASCADE 
);

INSERT INTO TB_BOOK VALUES('B01', '잉여공주', '김원종', 25000, 10, 'P01');
INSERT INTO TB_BOOK(BK_NO, BK_TITLE, BK_AUTHOR, BK_PRICE, BK_PUB_NO) 
VALUES ('B02', '미운 우리 새끼', '최원종', 180000, 'P02');
INSERT INTO TB_BOOK VALUES('B03', '어른왕자', '박원종', 33000, 2, 'P01');
INSERT INTO TB_BOOK VALUES('B04', '백설기공주', '홍원종', 45000, 4, 'P02');
INSERT INTO TB_BOOK VALUES('B05', '중지공주', '윤원종', 77000, 5, 'P03');

COMMENT ON COLUMN TB_BOOK.BK_NO IS '도서번호';
COMMENT ON COLUMN TB_BOOK.BK_TITLE IS '도서명';
COMMENT ON COLUMN TB_BOOK.BK_AUTHOR IS '저자명';
COMMENT ON COLUMN TB_BOOK.BK_PRICE IS '가격';
COMMENT ON COLUMN TB_BOOK.BK_STOCK IS '재고';
COMMENT ON COLUMN TB_BOOK.BK_PUB_NO IS '출판서번호';

SELECT * FROM TB_BOOK;


3. 회원에 대한 데이터를 담기 위한 회원 테이블(TB_MEMBER)
컬럼명: MEMBER_NO(회원번호)
기본키(MEMBER_PK)
MEMBER_ID(아이디)
중복금지(MEMBER_UQ)
MEMBER_PWD(비밀번호) NOT NULL(MEMBER_NN_PWD)
MEMBER_NAME(회원명) NOT NULL(MEMBER_NN_NAME)
GENDER(성별) 'M' 또는 'F'로 입력되도록 제한(MEMBER_CK_GEN)
ADDRESS(주소) --PHONE(연락처) --STATUS(탈퇴여부)
기본값으로 'N' 그리고 'Y' 혹은 'N'으로 입력되도록 제약조건(MEMBER_CK_STA)
ENROLL_DATE(가입일)
기본값으로 SYSDATE, NOT NULL 조건(MEMBER_NN_EN)
5개 정도의 샘플 데이터 추가하기
CREATE TABLE TB_MEMBER(
MEMBER_NO VARCHAR2(10) CONSTRAINT MEMBER_PK PRIMARY KEY,
MEMBER_ID VARCHAR2(40) CONSTRAINT MEMBER_UQ UNIQUE,
MEMBER_PWD VARCHAR2(30) CONSTRAINT MEMBER_NN_PWD NOT NULL,
MEMBER_NAME VARCHAR(20) CONSTRAINT MEMBER_NN_NAME NOT NULL,
GENDER CHAR(3) CONSTRAINT MEMBER_CK_GEN CHECK (GENDER IN('M', 'F')),
ADDRESS VARCHAR(50),
PHONE VARCHAR(13),
STATUS CHAR(1) CONSTRAINT MEMBER_CK_STA CHECK (STATUS IN('N','Y')),
ENROLL_DATE DATE DEFAULT SYSDATE CONSTRAINT MEMBER_NN_EN NOT NULL
);

SELECT * FROM TB_MEMBER;

COMMENT ON COLUMN TB_MEMBER.MEMBER_NO IS '회원번호';
COMMENT ON COLUMN TB_MEMBER.MEMBER_ID IS '아이디';
COMMENT ON COLUMN TB_MEMBER.MEMBER_PWD IS '비밀번호';
COMMENT ON COLUMN TB_MEMBER.MEMBER_NAME IS '회원명';
COMMENT ON COLUMN TB_MEMBER.GENDER IS '성별';
COMMENT ON COLUMN TB_MEMBER.ADDRESS IS '주소';
COMMENT ON COLUMN TB_MEMBER.PHONE IS '연락처';
COMMENT ON COLUMN TB_MEMBER.STATUS IS '탈퇴여부';
COMMENT ON COLUMN TB_MEMBER.ENROLL_DATE IS '가입일';

INSERT INTO TB_MEMBER VALUES('M2421','ASDF123','123AA','김지우','F','경기도 부천역','010-1111-9999','N','2015/05/21');
INSERT INTO TB_MEMBER VALUES('M2422','ASDF234','123BB','최민준','M','경기도 철산역','010-2222-8888','N','2016/04/21');
INSERT INTO TB_MEMBER VALUES('M2423','ASDF456','123CC','이서윤','M','서울특별시 서울역','010-3333-7777','Y','2021/09/21');
INSERT INTO TB_MEMBER VALUES('M2431','ASDF789','123DD','최서준','F','강원도 강릉역','010-4444-6666','Y','2020/04/11');
INSERT INTO TB_MEMBER (MEMBER_NO, MEMBER_ID, MEMBER_PWD, MEMBER_NAME, GENDER, ADDRESS, PHONE, STATUS) VALUES('M2453','ASDF135','123EE','박도윤','F','서울특별시 신림역','010-5555-5555','N');

SELECT * FROM TB_MEMBER;


4. 도서를 대여한 회원에 대한 데이터를 담기 위한 대여목록 테이블(TB_RENT)
컬럼:
RENT_NO(대여번호) --> 기본키(RENT_PK)
RENT_MEM_NO(대여회원번호)
외래키(RENT_FK_MEM) TB_MEMBER와 참조하도록
이때 부모데이터 삭제 시 NULL값이 되도록 옵션 설정
RENT_BOOK_NO(대여도서번호)
외래키(RENT_FK_BOOK) TB_BOOK와 참조하도록
이때 부모데이터 삭제 시 NULL값이 되도록 옵션설정
RENT_DATE(대여일)
기본값 SYSDATE
샘플데이터 3개정도 추가하기
CREATE TABLE TB_RENT(
RENT_NO VARCHAR2(10) CONSTRAINT RENT_PK PRIMARY KEY,
RENT_MEM_NO VARCHAR2(10) CONSTRAINT RENT_FK_MEM REFERENCES TB_MEMBER ON DELETE SET NULL,
RENT_BOOK_NO VARCHAR2(10) CONSTRAINT RENT_FK_BOOK REFERENCES TB_BOOK ON DELETE SET NULL,
RENT_DATE DATE DEFAULT SYSDATE
);

COMMENT ON COLUMN TB_RENT.RENT_NO IS '대여번호';
COMMENT ON COLUMN TB_RENT.RENT_MEM_NO IS '대여회원번호';
COMMENT ON COLUMN TB_RENT.RENT_BOOK_NO IS '대여도서번호';
COMMENT ON COLUMN TB_RENT.RENT_DATE IS '대여일';

INSERT INTO TB_RENT VALUES('R1', 'M2422', 'B01', '17/06/30');
INSERT INTO TB_RENT (RENT_NO,RENT_MEM_NO,RENT_BOOK_NO) VALUES('R2', 'M2453', 'B04');
INSERT INTO TB_RENT VALUES('R3', 'M2421', 'B05', '19/12/11');
INSERT INTO TB_RENT VALUES('R4', 'M2422', 'B05', '18/06/20');

SELECT * FROM TB_RENT;


2번 도서를 대여한 회원의 이름, 아이디, 대여일, 반납예정일(대여일+7)을 조회하시오.
SELECT MEMBER_NAME AS "이름", MEMBER_ID AS "아이디", RENT_DATE AS "대여일", RENT_DATE + 7 AS "반납예정일"
FROM TB_MEMBER
JOIN TB_RENT ON (MEMBER_NO = RENT_MEM_NO)
WHERE MEMBER_ID = (SELECT MEMBER_ID
                    FROM TB_MEMBER M 
                    JOIN TB_RENT ON (MEMBER_NO = RENT_MEM_NO)
                    GROUP BY MEMBER_ID, MEMBER_NAME
                    HAVING COUNT(*) = 2);

    'Database/Oracle' 카테고리의 다른 글
    • [Oracle] TCL(TRANSACTION CONTROL LANGUAGE)
    • [Oracle] DCL(DATA CONTROL LANGUAGE), ROLE
    • [Oracle] DDL(2) - ALTER, DROP
    • [Oracle] DML(3) - DELETE, TRUNCATE
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바