오라클[sql] 연습문제
연습문제
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; -- 내용만 지우고 테이블은 남겨있음, 전체행 삭제