1. 영화정보 데이터 베이스 구축
-1. 영화정보 새로운 접속 만들기
- 사용자 : MOVIE
- 암호 : 1234
- 기본 tablepace : USER
- 임시 tablepace : TEMP
- Nation role : connect, resource, dba
- 접속명 : local-MOVIE
-2. 영화정보 DB 테이블 생성
CREATE TABLE 영화(
번호 varchar2(3) not null primary key,
이름 varchar2(30) unique,
개봉연도 number,
매출액 number,
관객수 number,
평점 number(5,2)
);
CREATE TABLE 배우(
번호 varchar2(3) not null primary key,
이름 varchar2(30),
출생 date,
키 number,
몸무게 number,
배우자 varchar2(30)
);
CREATE TABLE 출연(
영화번호 VARCHAR2(3) not null,
배우번호 VARCHAR2(3) not null,
역할 VARCHAR2(1),
역 VARCHAR(30),
CONSTRAINT 출연PK PRIMARY KEY("영화번호", "배우번호"),
FOREIGN KEY(영화번호) REFERENCES 영화(번호),
FOREIGN KEY(배우번호) REFERENCES 배우(번호)
);
-3. 영화정보 DB 데이터 입력
CREATE SEQUENCE idSEQ;
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '명량', 2014, 135748398910, 17613682, 8.49);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '쉬리', 1999, null, 58200000, 8.79);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '괭해, 왕이 된 남자', 2012, 88900208769, 12319542, 9.23);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '도둑들', 2012, 93665568500, 12983330, 7.60);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '엽기적인 그녀', 2001, null, 1735692, 9.29);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '변호인', 2013, 82871759300, 11374610, 8.97);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '밀양', 2007, null, 1710364, 7.76);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '태극기 휘날리며', 2004, null, 11746135, 9.15);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '초록물고기', 1997, null, null, 8.79);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '은행나무 침대', 1996, null, null, 7.67);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '님은 먼 곳에', 2008, 11211235000, 1706576, 7.80);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '반지의제왕: 왕의 귀환', 2003, null, null, 9.36);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '그녀', 2014, null, null, 8.51);
INSERT INTO 영화(번호, 이름, 개봉연도, 매출액, 관객수, 평점)
VALUES (IDSEQ.nextval, '관상', 2013, null, null, 7.96);
SELECT * FROM 영화;
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES ('1', '최민식', '1962-04-27', 177, 70, NULL);
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES ('2', '류승룡', '1970-11-29', NULL, NULL, NULL);
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES ('4', '한석규', '1964-11-03', 178, 64, '임명주');
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES ('5', '송강호', '1967-01-17', 180, 80, NULL);
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES ('6', '이병헌', NULL, 177, 72, '이민정');
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES ('7', '한효주', NULL, 172, 48, NULL);
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES ('8', '전지현', '1981-10-30', 174, 52, NULL);
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES (10, '김혜수', '1970-09-05', 170, 50, NULL);
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES (12, '차태현', '1976-03-25', 175, 65, '최석은');
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES (15, '전도연', NULL, 165, NULL, '강시규');
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES (16, '장동건', NULL, 182, 68, '고소영');
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES (17, '심혜진', '1967-01-16', 169, 51, '한상구');
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES (18, '수애', NULL, 168, 46, NULL);
INSERT INTO 배우(번호, 이름, 출생, 키, 몸무게, 배우자)
VALUES (19, '주진모', NULL, NULL ,NULL ,NULL);
SELECT * FROM 배우;
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('1', '1', '1', '이순신');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('1', '2', '1', '구루지마');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('2', '4', '1', '유중원');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('2', '1', '1', '박무영');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('2', '5', '1', '이장길');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('3', '6', '1', '광해 / 하선');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('3', '2', '1', '허균');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('3', '7', '1', '중전');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('4', '10', '1', '팹시');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('4', '8', '1', '예니콜');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('4', '19', '2', '반장역');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('5', '8', '1', '그녀');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('5', '12', '1', '견우');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('6', '5', '1', '송우석');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('7', '15', '1', '피아노학원강사');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('7', '5', '1', '카센터 사장, 김종찬');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('8', '16', '1', '이진태');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('9', '4', '1', '막동');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('9', '17', '1', '미애');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('10', '4', '1', '수현');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('10', '17', '1', '선영');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('11', '18', '1', '시골 아낙');
INSERT INTO 출연(영화번호, 배우번호, 역할, 역)
VALUES ('11', '19', '1', '기타리스트, 성찬 역');
SELECT * FROM 출연;
2. 영화정보 데이터베이스 활용
-1. 평점이 9이상인 영화의 제목과 평점을 검색하라
SELECT 이름, 평점 FROM 영화 WHERE 평점 >= 9;
-2. '쉬리'라는 이름을 가진 영화가 개봉된 연도를 검색하라
SELECT 개봉연도 FROM 영화 WHERE 이름 = '쉬리';
SELECT 개봉연도 FROM 영화 WHERE 이름 LIKE '%쉬리%';
-3. '왕'이라는 문자열이 포함된 이름을 가진 영화의 이름과 평점을 검색하라
SELECT 이름, 평점 FROM 영화 WHERE 이름 LIKE '%왕%';
-4. '왕'이라는 문자열이 포함된 이름을 가진 영화의 이름과 평점을 검색하되, 개봉연도를 기준으로 정렬하라
SELECT 이름, 평점 FROM 영화 WHERE 이름 LIKE '%왕%' ORDER BY 개봉연도;
-5. '그녀'라는 단어가 포함된 영화의 이름과 평점을 검색하라
SELECT 이름, 평점 FROM 영화 WHERE 이름 LIKE '%그녀%';
-6. 번호가 1,2,3 인 영화의 이름을 검색하라
SELECT 이름 FROM 영화 WHERE 번호 IN (1,2,3);
-7. 이름이 '변호인'인 영화 번호를 검색하라
SELECT 번호 FROM 영화 WHERE 이름 = '변호인';
-8. 영화배우 '송강호'의 배우 번호를 검색하라
SELECT 번호 FROM 배우
WHERE 이름 = '송강호';
-9. 번호가 1인 영화에 출연한 배우의 이름을 검색하라
SELECT 배우.이름 FROM 배우, 출연
WHERE 배우.번호 = 출연.배우번호
AND 출연.영화번호 = 1;
-10. 이름이 '도둑들'인 영화에 출연한 배우의 이름을 검색하라
SELECT 배우.이름 FROM 영화, 배우, 출연
WHERE 영화.번호 = 출연.영화번호
AND 배우.번호 = 출연.배우번호
AND 영화.이름 = '도둑들';
-11. 영화 배우 '송강호'가 출연한 영화 이름을 검색하라
SELECT 영화.이름 FROM 영화, 배우, 출연
WHERE 영화.번호 = 출연.영화번호
AND 배우.번호 = 출연.배우번호
AND 배우.이름 = '송강호';
-12. 영화 배우 '주진모'가 주연으로 출연하지 않은 영화 이름을 검색하라
SELECT 영화.이름 FROM 영화, 배우, 출연
WHERE 영화.번호 = 출연.영화번호
AND 배우.번호 = 출연.배우번호
AND 배우.이름 = '주진모'
AND 출연.역할 != 1;
-13. 2012년 개봉한 영화의 이름과 그 영화에 출연한 주연배우를 검색하라
SELECT 영화.이름, 배우.이름 FROM 영화, 배우, 출연
WHERE 영화.번호 = 출연.영화번호
AND 배우.번호 = 출연.배우번호
AND 영화.개봉연도 = 2012
AND 출연.역할 = 1;
-14. 영화배우 '송강호'가 가장 바쁜 해는 언제일까? 년도별 출연작품 수를 검색하라
SELECT 영화.개봉연도, COUNT(영화.번호) AS "출연작품 수" FROM 영화, 배우, 출연
WHERE 영화.번호 = 출연.영화번호
AND 배우.번호 = 출연.배우번호
AND 배우.이름 = '송강호'
GROUP BY 영화.개봉연도;
-15. 영화배우 '송강호'가 출연한 모든 영화의 이름과 주연 배우의 이름을 검색하라
SELECT 영화.이름, 배우.이름 FROM 영화, 배우, 출연
WHERE 영화.번호 = 출연.영화번호
AND 배우.번호 = 출연.배우번호
AND 출연.역할 = 1
AND 출연.영화번호 =
ANY (SELECT 출연.영화번호 FROM 배우, 출연 WHERE 배우.번호 = 출연.배우번호 AND 배우.이름 = '송강호');
--15. 화면
SELECT 영화.이름, 배우.이름 FROM 영화, 배우, 출연
WHERE 영화.번호 = 출연.영화번호
AND 배우.번호 = 출연.배우번호
AND 출연.역할 = 1
ORDER BY 영화.이름;
-16. 2회 이상 주연으로 출연한 영화배우의 이름을 검색하라
SELECT 배우.이름 FROM 배우, 출연
WHERE 배우.번호 = 출연.배우번호
AND 출연.역할 = 1
GROUP BY 배우.이름
HAVING COUNT(출연.배우번호) >= 2;
-17.2012년 개봉한 영화의 이름과 출연배우 수를 출력하되, 출연배우 수를 기준으로 정렬하라
SELECT 영화.이름, COUNT(출연.배우번호) FROM 영화, 출연
WHERE 영화.번호 = 출연.영화번호
AND 영화.개봉연도 = 2012
GROUP BY 영화.이름
ORDER BY COUNT(출연.배우번호);
-18. 영화배우 '송강호'와 함께 출연한 배우들을 모두 검색하라
SELECT 배우.이름 FROM 배우, 출연
WHERE 배우.번호 = 출연.배우번호
AND 배우.이름 != '송강호'
AND 출연.영화번호
IN ( SELECT 출연.영화번호 FROM 배우, 출연
WHERE 배우.번호 = 출연.배우번호 AND 배우.이름 = '송강호');
-- AND 배우.이름 != '송강호' 대신에 아래 코드를 작성해도 된다
-- AND NOT 배우.이름 = '송강호'