ORACLE SQL

ORACLE SQL DDL 복습 내용 정리

최종군 2024. 7. 30. 18:09

 

DDL :  생성(CREATE), 수정(ALTER),삭제(DROP)

 

 

* 자료형 문자 / 숫자 / 날짜 

 

   * 문자 

- 데이터 크기도 지정해야 함 

 

- CHAR 자료형은 고정 길이 이고, 최대 2000B까지 저장 가능

- VARCHAR2 자료형은 가변 길이 이고, 최대 4000B까지 저장 가능

 

SQL 컬럼에 설명을 추가하는 SQL 구문 : 

COMMENT 

 

 

COMMENT ON COLUMN 테이블명.컬럼명 IS '주석 내용'

 

NULL 값을 허용하지 않도록 설정하는 제약 조건 : 

컬럼 레벨 방식만 가능하다. 

 

데이터의 중복을 허용하지 않도록 설정하는 제약 조건 : UNIQUE

- > 컬럼 레벨 방식 / 테이블 방식 모두 가능하다 

 

 

PRIMARU KEY : 

 

테이블에 저장되는 각 행들을 구분하기 위한 컬럼을 식별자 역할을 함 

NOT NULL, UNIQUE 두 제약조건의 특징을 모두 가지고 있음

* 복합키 설정 시 테이블 레벨 방식으로 설정!

 

다른 테이블에 존재하는 값을 사용하기 위한 제약 조건 : 

FOREIGN KEY : (외래키 FK)

+ 다른 테이블에 존재하지 않는 값은 저장되지 않음! (오류 발생!)

 

+ 삭제 옵션 + 

- 부모 테이블의 데이터 삭제 시 자식 테이블의 사용 중인 데이터가 있을 경우 삭제되지

않도록 하는 옵션 (기본값) (기본값) : ON DELETE RESTRICTED

 

부모 테이블의 데이터 삭제 시 자식 테이블의 해당 데이터를 NULL로 변경되도록 하는 옵션 

 

: ON DELETE SET NULL

-> 부모 테이블의 데이터 삭제 시 자식 테이블의 해당 데이터를 NULL로 변경되도록 하는 옵션 

 

: ON DELETE CASCADE

부모 테이블의 데이터 삭제 시 자식 테이블의 해당 데이터도 같이 삭제되도록 하는 옵션 

ON DELETE CASCADE 

 

 

제약 조건에 이름을 부여할 때 사용하는 키워드 : CONSTRAINT

컬럼명 자료형 || CONSTRAINT 제약조건명 제약조건 

 

데이터 추가 시 기본 값을 설정하기 위해 사용하는 키워드 : 

DEFAULT 

+ 데이터 추가 시 값이 없는 경우 기본적으로 NULL값으로 저장됨 

NULL 값이 아닌 다른 값을 기본값으로 사용하고자 할 때 적용된다. 

 

컬럼명 자료형 DEFAULT 기본값 

 

 


 

1. 실습 문제  :

 

 

-- 초기화 작업: 기존 테이블 제거
 DROP TABLE TB_MEMBER;
 DROP TABLE TB_BOOK;
 DROP TABLE TB_PUBLISHER;
 DROP TABLE TB_RENT;

 

 


  문제 )  1. 출판사들에 대한 데이터를 담기위한 출판사 테이블(TB_PUBLISHER)
    컬럼 : PUB_NO(출판사 번호) - 기본키(PUBLISHER_PK) : 내가 할 부분
            : PUB_NAME(출판사명) -- NOT NULL(PUBLISHER_NN)
            : PHONE(출판사전화번호) -- 제약조건없음

풀이 )  CREATE TABLE TB_PUBLISHER(

            

             1.PUB_NO 2.NUMMER 3.CONSTRAINT 4.PUBLISHER_PK  5.PRIMARY KEY 

          

               1. 컬럼명

               2. 자료형 

               3.제약조건명 부여 : CONSTRAINT

               4.제약 조건명 

               5. 기본키 설정 

 

* 내가 헷갈리는 부분 3. CONSTRAINT : 위치

);

 

* 컬럼에 설명 추가하기 : 

 

COMMENT ON COLUMN 테이블명.컬럼명 IS '컬럼이름';

 

1.COMMENT ON COLUMN 2.TB_PUBLISHER.컬럼명 3.IS '컬럼별칭'

 

1. COMMENT ON COLUMN

2. 테이블명.컬럼명

3. IS '컬럼별칭'  

 

데이터 추가 : 

- >  INSERT

 

INSERT INTO 테이블명 VALUES (값,값,값);


2. 실습 문제  :

 

 

문제 :

 2. 도서들에 대한 데이터를 담기위한 도서 테이블(TB_BOOK)
    컬럼 :

          BK_NO(도서번호)--기본키(BOOK_PK)
          BK_TITLE(도서명)--NOT NULL(BOOK__NN_TITLE)
          BK_AUTHOR(저자명)--NOT NULL(BOOK__NN_AUTHOR)
          BK_PRICE(가격)-- 제약조건없음
          BK_PUB_NO(출판사 번호)--외래키(BOOK_FK)(TB_PUBLISHER테이블을 참조) 

         이때 참조하고 있는 부모데이터 삭제시

         자식데이터도 삭제 되도록 옵션지정 ( ON DELETE CASCADE ) : 내가 할 부분 

 

 

풀이 : 

CREATE TABLE TB_BOOK(

 

-- 컬럼 레벨 방식 :

1.BK_PUB_NO 2.NUMBER 3.CONSTRAINT 4.제약조건명 5.REFERRENCES 부모테이블명 6.ON DELETE CASCADE    

1.컬럼명

2.자료형

3.CONSTRAINT

4.제약조건명

5.REFERRENCES 부모테이블명 

6. ON DELETE CASCADE <=> 다른 조건 ON DELETE SET NULL

 

 

);

 

 

 


문제 :

 

 3. 회원에 대한 데이터를 담기위한 회원 테이블(TB_MEMBER)
    컬럼명 : MEMBER_NO(회원번호) -- 기본키(MEMBER_PK)
            MEMBER_ID(아이디) -- 중복금지(MEMBER_UQ_ID)
            MEMBER_PWD(비밀번호) -- NOT NULL(MEMBER_NN_PWD)
            MEMBER_NAME(회원명) -- NOT NULL(MEMBER_NN_NAME)
            GENDER(성별) -- M또는 F로 입력되도록 제한(MEMBER_CK_GEN)
            ADDRESS(주소) -- 제약조건없음
            PHONE(연락처)-- 제약조건없음
            STATUS(탈퇴여부) -- 기본값을 N으로 지정, 그리고 N또는 Y만 입력되도록 제약조건 설정(MEMBER_CK_STA)
            ENROLL_DATE(가입일) -- 기본값으로 SYSDATE, NOT NULL 제약조건(MEMBER_NN_EN)

 

풀이 : 

 

GENDER(성별) -- M또는 F로 입력되도록 제한(MEMBER_CK_GEN) : 

GENDER CHAR(1) CONSTRAINT MEMBER_CK_GEN CHECK(GENDER IN('M', 'F')),  

 

STATUS(탈퇴여부) -- 기본값을 N으로 지정, 그리고 N또는 Y만 입력되도록 제약조건 설정(MEMBER_CK_STA)

STATUS CHAR(1) DEFALUT 'N' CONSTRAINT MEMBER_CK_STA CHECK(STATUS IN ('N','Y'))

 

 

 ENROLL_DATE(가입일) -- 기본값으로 SYSDATE, //  NOT NULL 제약조건(MEMBER_NN_EN)

1. ENROLL_DATE DATE DEFAULT SYSDATE

2. CONSTRAINT MEMBER_NN_EN NOT NULL

 

INSERT INTO TB_MEMBER VALUES

 

 

* 테이블 레벨 방식으로 외래키 설정하기 : 

 

CONSTRAINT RENT_MEM FOREIGN KEY(RENT_MEM_NO)  REFERRNCES TB_MEMBER ON DELETE SET NULL 

 

 

 


 

 

 

 

 

'ORACLE SQL' 카테고리의 다른 글

ORACLE SQL DCL/TCL , view  (0) 2024.07.31
ORACLE SQL JAVA 적용 시키기  (0) 2024.07.30
ORACLE SQL_DML  (0) 2024.07.29
ORACLE SQL SEQUENCE  (0) 2024.07.29
ORACLE PL/SQL  (0) 2024.07.29