Programming/오라클[SQL]

오라클[sql] 연습문제

콩king 2022. 8. 21. 13:57

연습문제

 

1. sawon 테이블을 생성하세요.

     sabun은 6자리 숫자

     sawon_name은 최대 한글 5자리

     ubmu는 최대 한글 10자리

     weolgub는 정수형 8자리와 소수점 2자리

     buseo는 숫자 3자리

 

CREATE TABLE sawon(

  sabun NUMBER(6),

  sawon_name VARCHAR2(15),

  ubmu VARCHAR2(30),

  weolgub NUMBER(10,2),
  buseo NUMBER(3)
);

 

2. 위의 테이블에서 sabun을 기본키로 설정

ALTER TABLE sawon
ADD CONSTRAINT pk_sawon_sabun PRIMARY KEY (sabun);

 

3. 최대 한글 10자리의 jiyeok 컬럼을 추가하되 NULL 값이 입력되지 않도록 지정

ALTER TABLE sawon
ADD jiyeok VARCHAR2(30) NOT NULL;

 

4. weolgub 컬럼은 정수형 7자리로 변경

ALTER TABLE sawon
MODIFY ( weolgub NUMBER(7) );

 

5. ubmu컬럼은 ‘개발’, ‘유지보수’, ‘관리’ 만 데이터 값으로 입력되도록 지정

AlTER TABLE sawon
ADD CONSTRAINT chk_ubmu CHECK( ubmu IN ('개발', '유지보수', '관리') );

 

6. ubmu컬럼에 데이터가 입력이 안될 경우 디폴드값으로 ‘개발’을 설정

ALTER TABLE sawon
MODIFY ubmu DEFAULT '개발';

 

7. buseo 테이블을 생성하세요

     - buseo_no는 숫자 3자로 이루어진 번호로 기본키

     - buseo_name은 최대 한글 10자리

 

CREATE TABLE buseo(
  buseo_no NUMBER(3),
  buseo_name VARCHAR2(30),
  CONSTRAINT buseo_no_pk PRIMARY KEY(buseo_no)
);

 

8. sawon 테이블의 buseo 컬럼을 buseo 테이블의 buseo_no를 참조하는 외래키로 설정
ALTER TABLE sawon
ADD CONSTRAINT fk_buseo_no FOREIGN KEY (buseo)REFERENCES buseo(buseo_no);

9. 부서테이블에 다음 값을 넣어라
INSERT INTO buseo
VALUES (101, '소프트웨어유지보수부');
INSERT INTO buseo
VALUES (202, '관리부');
INSERT INTO buseo
VALUES (303, '인적자원부');

 

10. 아래 코드를 실행하고 안되는 이유 분석하기

INSERT INTO sawon (sabun, sawon_name, weolgub, buseo, jiyeok)
VALUES (8001, '홍길동이군', 100000, 101, '부산');

-- ubmu 디폴트값 '개발'

INSERT INTO sawon (sabun, sawon_name, ubmu, weolgub, buseo, jiyeok)
VALUES (8002, '홍길자', '사무', 200000, 202, '인천');

-- 에러 : 업무는 개발, 유지보수, 관리 중 하나만 입력
INSERT INTO sawon (sabun, sawon_name, ubmu, buseo, jiyeok)
VALUES (8003, '홍길순', '개발', 111, '대전');

-- 에러 : 무결성제약조건 : 부모키가없음 : 부서테이블 111 부서가 없음

INSERT INTO sawon (sabun, sawon_name, weolgub, jiyeok)

VALUES (8004, '홍길석', 12345678, '인천');

-- 에러 : 월급 자리수 떄문에 에러

-- * 참조키는 null 이 허용된다 : 부서 null 가능

INSERT INTO sawon (sabun, sawon_name, ubmu, buseo, jiyeok)

VALUES (8005, '홍길철', '유지보수', 303, '판교');

 

 

테이블  생성

CREATE TABLE sawon(
  sabun NUMBER(6),
  sawon_name VARCHAR2(15),
  ubmu VARCHAR2(30) DEFAULT '개발',
  weolgub NUMBER(9, 2),
  buseo NUMBER(3),
  jiyeok VARCHAR2(30) NOT NULL,
  
  CONSTRAINT pk_sawon_sabun PRIMARY KEY (sabun),
  CONSTRAINT chk_ubmu CHECK( ubmu IN ('개발', '유지보수', '관리') ),
  CONSTRAINT fk_sawon FOREIGN KEY (buseo)
  REFERENCE buseo(buse0_no)
);

CREATE TABLE buseo(
  buseo_no NUMBER(3),
  buseo_name VARCHAR2(30)
  CONSTRAINT pk_buseo_no PRIMARY KEY (buseo_no) 
);

 

삭제시

1. sawon jiyeok 컬럼 제거
ALTER TABLE sawon
DROP (jiyeok);

2. buseo 테이블에서 부서명이 '인적자원부' 행을 제거

    참조키로 연결된 테이블의 삭제는 자식 먼저 지우고 그다음 부모를 지워야함
DELETE FROM sawon
WHERE buseo = 303;

DELETE FROM buseo
WHERE buseo_name = '인적자원부';  -- 일부 행 삭제

 

3. sawon 테이블을 제거
DROP TABLE sawon;   -- sawon 은 더이상 존재안함, 테이블도 삭제

TRUNCATE TABLE sawon;   -- 내용만 지우고 테이블은 남겨있음, 전체행 삭제