SQL활용(영화정보 데이터베이스 구축 및 활용)

min seung moon·2021년 2월 6일
0

Oracle

목록 보기
7/23

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 배우.이름 = '송강호'
profile
아직까지는 코린이!

0개의 댓글