2021-02-08 오라클 movie 테이블 실습

쪼레비·2021년 3월 30일
0


create table 영화 (
번호 varchar2(3) not null primary key,
이름 varchar2(40) 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),
역 varchar2(40),

CONSTRAINT 출연pk primary key(영화번호, 배우번호), 
foreign key (영화번호) REFERENCES 영화(번호),
foreign key (배우번호) REFERENCES 배우(번호)

);

insert into 영화 VALUES('1', '명량', 2014, 135748398910, 17613682, 8.49);
insert into 영화 VALUES('2', '쉬리', 1999, null, 5820000, 8.79);
insert into 영화 VALUES('3', '왕이 된 남자', 2012, 88900208769, 12319542, 9.23);
insert into 영화 VALUES('4', '도둑들', 2012, 93665568500, 12983330, 7.60);
insert into 영화 VALUES('5', '엽기적인 그녀', 2001, null, 1735692, 9.29);
insert into 영화 VALUES('6', '변호인', 2013, 93665568500, 11374610, 8.97);
insert into 영화 VALUES('7', '밀양', 2007, null, 1710364, 7.76);
insert into 영화 VALUES('8', '태극기 휘날리며', 2004, null, 11746135, 9.15);
insert into 영화 VALUES('9', '초록물고기', 1997, null, null, 8.79);
insert into 영화 VALUES('10', '은행나무 침대', 1996, null, null, 7.67);
insert into 영화 VALUES('11', '님은 먼 곳에', 2008, 11211235000, 1706576, 7.80);
insert into 영화 VALUES('12', '반지의 제왕: 왕의 귀환', 2003, null, null, 9.36);
insert into 영화 VALUES('13', '그녀', 2014, null, null, 8.51);
insert into 영화 VALUES('14', '관상', 2013, null, null, 7.96);

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);

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', '기타리스트, 성찬 역');

-- 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 번호 like '1' or 번호 = '2' or 번호 = '3';
select 번호, 이름 from 영화 where 번호 in (1, 2, 3);

-- 7. 이름이 '변호인' 인 영화번호를 검색하라.
select 번호 from 영화 where 이름 = '변호인';
select 번호, 이름 from 영화 where 이름 = '변호인';
select 번호, 이름 from 영화 where 이름 like '변호인';

-- 8. 배우 '송강호' 의 배우번호를 검색하라.
select 배우.번호 from 배우 where 배우.이름 = '송강호';
select 배우.번호, 배우.이름 from 배우 where 배우.이름 = '송강호';

-- 9. 번호가 1인 영화에 출연한 배우의 이름을 검색하라.
select FROM 출연 where 영화번호 = '1';
select
from 배우;

select 배우.이름 from 배우, 출연
where 배우.번호 = 출연.배우번호 and 출연.영화번호 = '1';

-- 10. 이름이 '도둑들' 인 영화에 출연한 배우의 이름을 검색하라.
select 번호 from 영화 where 이름 = '도둑들'; -- 영화 이름 검색
select from 출연 where 영화번호 = '4'; -- 영화과 관련된 정보(영화번호, 배우 번호)
select
from 배우 where 번호 in (10, 19, 8);

select 배우.이름, 출연.역 from 영화, 배우, 출연
where 영화.번호 = 출연.영화번호 and 배우.번호 = 출연.배우번호 -- 3개 테이블 연결고리 a--(연결)--b--(연결)--c
and 영화.이름 = '도둑들';

-- 11. 배우 '송강호'가 출연한 영화 이름을 검색하라.
select 영화.이름 from 영화, 배우, 출연
where 영화.번호 = 출연.영화번호 and 배우.번호 = 출연.배우번호
and 배우.이름 = '송강호';

-- 12. 배우 '주진모'가 주연으로 출연하지 않은 영화 이름을 검색하라.
select 영화.이름 from 영화, 배우, 출연
where 영화.번호 = 출연.영화번호 and 배우.번호 = 출연.배우번호
and 배우.이름 = '주진모'
and 출연.역할 = 2; -- and 출연.역할 > 1;, and 출연.역할 != 1;, and 출연.역할 <> 1; (1이 아닌 것)

-- 13. 2012년에 개봉한 영화의 이름과 그 영화에 출연한 주연배우를 검색하라.
select 영화.이름, 배우.이름
from 영화, 출연, 배우
where 영화.번호 = 출연.영화번호 and 배우.번호 = 출연.배우번호 -- 테이블 3개 연결
and 영화.개봉연도 = 2012
and 출연.역할 = 1;

-- 14. 배우 '송강호'의 년도별 출연작품 수를 검색하라.
select 영화.개봉연도, count(영화.번호) as "출연 작품 수"
from 영화, 배우, 출연
where 영화.번호 = 출연.영화번호 and 배우.번호 = 출연.배우번호
and 배우.이름 = '송강호'
group by 영화.개봉연도;

select * from 영화, 출연
where 영화.번호 = 출연.영화번호;

select * from 영화, 출연, 배우
where 영화.번호 = 출연.영화번호 and 배우.번호 = 출연.배우번호;

-- 15. 배우 '송강호'가 출연한 모든 영화의 이름과, 그 영화의 주연 배우 이름을 검색하라.
select 영화.이름, 배우.이름 from 영화, 출연, 배우
where 영화.번호 = 출연.영화번호 and 배우.번호 = 출연.배우번호
and 출연.역할 = 1
and 출연.영화번호 = any (select 출연.영화번호 from 배우, 출연 -- any 자리에 in 가능
where 배우.번호 = 출연.배우번호 -- ANY는 조건을 만족하는 값이 하나라도 있으면 결과를 리턴
and 배우.이름 = '송강호'); -- ALL은 모든 값이 조건을 만족해야 결과를 리턴
--and 출연.영화번호 in (select 출연.영화번호 from 배우, 출연 -- any 자리에 in 가능
--where 배우.번호 = 출연.배우번호 --
--and 배우.이름 = '송강호');

-- 16. 2회 이상 주연으로 출연한 영화배우의 이름을 검색하라.
select 배우.이름, count(배우.번호) from 배우, 출연
where 배우.번호 = 출연.배우번호
and 출연.역할 = 1
group by 배우.이름
having count(배우.번호) >= 2;

-- 17. 2012년 개봉한 영화의 이름과 출연배우 수를 출력하되, 출연배우 수를 기준으로 정렬하라.
select 영화.이름, count(출연.배우번호) as "출연배우 수"
from 영화, 출연
where 영화.번호 = 출연.영화번호
and 개봉연도 = 2012
group by 영화.이름;

-- 18. 배우 '송강호' 와 함께 출연한 배우들을 모두 검색하라.
select 배우.이름 from 배우, 출연
where 배우.번호 = 출연.배우번호
and 출연.영화번호 in(select 출연.영화번호 from 배우, 출연 -- 지정한 블럭만 실행하는 키 = f9
where 배우.번호 = 출연.배우번호
and 배우.이름 = '송강호')
and not 배우.이름 = '송강호';
-- and 배우.이름 != '송강호';

profile
잠팅이

0개의 댓글