교재 : 뇌를 자극하는 오라클 프로그래밍 SQL&PL/SQL
4장 연습문제 풀이
1. 답
CREATE TABLE star_wars (
episode_id NUMBER,
episode_name VARCHAR2(50),
open_year NUMBER(4),
CONSTRAINT star_wars_pk PRIMARY KEY (episode_id)
);
2. 답
CREATE TABLE characters (
character_id NUMBER(5),
character_name VARCHAR2(30),
master_id NUMBER(5),
role_id NUMBER,
mail VARCHAR2(40),
CONSTRAINT characters_pk PRIMARY KEY (character_id)
);
3. 답
CREATE TABLE casting (
episode_id NUMBER(5),
character_id NUMBER(5),
real_name VARCHAR2(30),
CONSTRAINT casting_pk PRIMARY KEY (episode_id, character_id)
);
4. 답
INSERT INTO star_wars VALUES (1, '4. 새로운 희망(A New Hope)', 1977);
INSERT INTO star_wars VALUES (2, '5. 제국의 역습(The Empire Strikes Back)', 1980);
INSERT INTO star_wars VALUES (3, '6. 제다이의 귀환(Return of the Jedi)', 1983);
INSERT INTO star_wars VALUES (4, '1. 보이지 않는 위험(The Phantom Menace)', 1999);
INSERT INTO star_wars VALUES (5, '2. 클론의 습격(Attack of the Clones)', 2002);
INSERT INTO star_wars VALUES (6, '3. 시즈의 복수(Revenge of the Sith)', 2005);
5. 답
INSERT INTO characters VALUES (1, '루크 스카이워커', NULL, NULL, 'luke@jedai.com');
INSERT INTO characters VALUES (2, '한 솔로', NULL, NULL, 'solo@alliance.com');
INSERT INTO characters VALUES (3, '레이아 공주', NULL, NULL, 'leia@alliance.com');
INSERT INTO characters VALUES (4, '오비완 케노비', NULL, NULL, 'obi-wan@jedai.com');
INSERT INTO characters VALUES (5, '다쓰 베이더', NULL, NULL, 'vader@sith.com');
INSERT INTO characters VALUES (6, '다쓰 베이더(목소리)', NULL, NULL, 'chewbacca@alliance.com');
INSERT INTO characters VALUES (7, 'C-3PO', NULL, NULL, 'c3po@alliance.com');
INSERT INTO characters VALUES (8, 'R2-D2', NULL, NULL, 'r2d2@alliance.com');
INSERT INTO characters VALUES (9, '츄바카', NULL, NULL, 'chewbacca@alliance.com');
INSERT INTO characters VALUES (10, '랜도 칼리시안', NULL, NULL, NULL);
INSERT INTO characters VALUES (11, '요다(목소리)', NULL, NULL, 'yuda@jedai.com');
INSERT INTO characters VALUES (12, '다스 시디어스', NULL, NULL, NULL);
INSERT INTO characters VALUES (13, '아나킨 스카이워커', NULL, NULL, 'anakin@jedai.com');
INSERT INTO characters VALUES (14, '콰이곤 진', NULL, NULL, NULL);
INSERT INTO characters VALUES (15, '아미달라 여왕', NULL, NULL, NULL);
INSERT INTO characters VALUES (16, '아나킨 어머니', NULL, NULL, NULL);
INSERT INTO characters VALUES (17, '자자빙크스(목소리)', NULL, NULL, 'jaja@jedai.com');
INSERT INTO characters VALUES (18, '다스 몰', NULL, NULL, NULL);
INSERT INTO characters VALUES (19, '장고 펫', NULL, NULL, NULL);
INSERT INTO characters VALUES (20, '마스터 윈두', NULL, NULL, 'windu@jedai.com');
INSERT INTO characters VALUES (21, '듀크 백작', NULL, NULL, 'dooku@jedai.com');
6. 답
CREATE TABLE roles (
role_id NUMBER,
role_name VARCHAR2(30),
CONSTRAINT role_pk PRIMARY KEY (role_id)
);
INSERT INTO roles VALUES (1001, '제다이');
INSERT INTO roles VALUES (1002, '시스');
INSERT INTO roles VALUES (1003, '반란군');
7. 답
ALTER TABLE characters ADD CONSTRAINT characters_roles_fk
FOREIGN KEY (role_id) REFERENCES roles (role_id);
8. 답
UPDATE characters SET role_id = '1001' WHERE mail LIKE '%jedai.com';
UPDATE characters SET role_id = '1002'
WHERE character_name IN ('다쓰 베이더', '다쓰 베이더(목소리)', '다스 시디어스', '다스 몰', '듀크 백작');
UPDATE characters SET role_id = '1003'
WHERE role_id IS NULL AND character_name <> '장고 펫';
9. 답
UPDATE characters SET master_id = 4 WHERE character_name IN ('아나킨 스카이워커', '루크 스카이워커');
UPDATE characters SET master_id = 11 WHERE character_name IN ('마스터 윈두', '듀크 백작');
UPDATE characters SET master_id = 12 WHERE character_name IN ('다쓰 베이더', '다쓰 베이더(목소리)', '다쓰 몰');
UPDATE characters SET master_id = 14 WHERE character_name = '오비완 캐노비';
UPDATE characters SET master_id = 21 WHERE character_name = '콰이곤 진';
10. 답
ALTER TABLE casting ADD CONSTRAINT starwars_casting_fk
FOREIGN KEY (episode_id) REFERENCES star_wars (episode_id);
ALTER TABLE casting ADD CONSTRAINT character_casting_fk
FOREIGN KEY (character_id) REFERENCES characters (character_id);
11. 답
DELETE FROM roles WHERE role_id = 1001; -- 데이터 무결성 위배
Posted by 정샘