
2. Реализация серверной части.
2.1 Создание таблиц.
Запросы SQL для создания таблиц выглядят следующим образом:
CREATE TABLE kalFiellm
(nazvanie VARCHAR2(15) NOT NULL CONSTRAINT kalpk_nazvanie PRIMARY KEY,
janr VARCHAR2(15) NOT NULL,
god_vypuska NUMBER(4) NOT NULL CHECK(god_vypuska>1900 and god_vypuska<2020),
proizvoditel VARCHAR2(20),
strana VARCHAR2(15),
prodolzhitelnost number(4) CHECK (prodolzhitelnost>0),
rezhisser VARCHAR2(20) CONSTRAINT kalfk_rezhisser REFERENCES kalrezhischer(Fio));
CREATE TABLE kalFiellm - этот запрос создаёт таблицу ФИЛЬМ.
Далее в скобках указывается, из каких полей будет состоять данная таблица и тип данных каждого из полей:
Поле nazvanie является первичным ключом и имеет тип VARCHAR2(15), т.е. строка длиной 15 символов;
Поле god_vypuska имеет тип NUMBER(4) т.е. число, состоящее из 4 цифр, так как фильм всегда имеет год выпуска, то это поле не может быть пустым.
Поле janr имеет тип VARCHAR2(15), т.е. строку из 15 символов.Т.к. фильм всегда имеет жанр, то это поле является обязательным.
Поле rezhisser является внешним ключом, т.е. ссылка на соответствующее поле Fio таблицы " kalrezhischer ", и имеет тип данных VARCHAR2(20) т.е. строка из 20 символов;
Поле proizvoditel имеет тип данных VARCHAR2(20), т.е. строка длиной 20 символов. Так как у фильма обязательно есть производитель, то это поле является обязательным .
Поле strana имеет тип данных VARCHAR2(15),т.е. строку состоящую из 15 символов.
Поле prodolzhitelnost имеет тип данных NUMBER(4),продолжительность не может быть отрицательным поэтому используем оператор CHECK(условие) т.е. число, состоящее из 4 цифр. Так как фильм имеют продолжительность в любом случае, даже если это короткометражная картина , то это поле является обязательным;
Остальные поля таблиц описываются аналогично.
CREATE TABLE kalll_acKcterfilma
(FIO VARCHAR2(15),
nazvaniefilma VARCHAR2(15),
rol_v_filme VARCHAR2(15) NOT NULL,
CONSTRAINT pk_kalll_acKcterfilma PRIMARY KEY(FIO,nazvaniefilma));
CREATE TABLE kal_akkcter
(fio VARCHAR2(20) NOT NULL CONSTRAINT kal_pk_fio PRIMARY KEY,
nacionalnost VARCHAR2(15) NOT NULL,
data_rozhdeniya NUMBER(4) NOT NULL);
CREATE TABLE kalrezhischer
(Fio VARCHAR2(20) NOT NULL CONSTRAINT pkFio PRIMARY KEY,
nacionalnost VARCHAR2(20) NOT NULL,
data_rozhdeniya NUMBER(4) NOT NULL);
2.2 Работа с данными. Заполнение таблиц.
Запросы SQL для заполнения таблиц данными выглядят следующим образом.
Заполнение данными таблицы kalrezhischer:
Для заполнения таблицы сначала вводится команда INSERT INTO,далее название таблицы, которую будем заполнять данными. В скобках перечислим название всех полей таблицы.
INSERT INTO kalrezhischer (Fio, nacionalnost, data_rozhdeniya)
Затем используется команда VALUES, в скобках, в кавычках через запятую указываем значения полей:
INSERT INTO kalrezhischer (Fio, nacionalnost, data_rozhdeniya)
VALUES ('Djohn Cameron', 'USA',1956);
INSERT INTO kalrezhischer (Fio, nacionalnost, data_rozhdeniya)
VALUES ('Francisko Capollo', 'Italy',1954);
INSERT INTO kalrezhischer (Fio, nacionalnost, data_rozhdeniya)
VALUES ('Fedor Bondarchuk', 'Russia',1970);
INSERT INTO kalrezhischer (Fio, nacionalnost, data_rozhdeniya)
VALUES ('Julio Scorceze', 'Italy',1945);
INSERT INTO kalrezhischer (Fio, nacionalnost, data_rozhdeniya)
VALUES ('Fedor Bondarchuk', 'Russia',1970);
INSERT INTO kalrezhischer (Fio, nacionalnost, data_rozhdeniya)
VALUES ('Sergey Bodrov', 'Russia',1957);
INSERT INTO kalrezhischer (Fio, nacionalnost, data_rozhdeniya)
VALUES ('Ildar Ryazanov', 'Russia',1942);
Заполнение таблицы kalFiellm:
INSERT INTO kalFiellm(nazvanie, janr, god_vypuska, proizvoditel, strana, prodolzhitelnost, rezhisser)
VALUES ('2012', 'Fantastika','2010', 'Columbia', 'USA', 150,'Djohn Cameron');
INSERT INTO kalFiellm(nazvanie, janr, god_vypuska, proizvoditel, strana, prodolzhitelnost, rezhisser)
VALUES ('Krestniy Otec', 'Kriminal','1981', 'Paramount', 'Italy', 158,'Francisko Capollo');
INSERT INTO kalFiellm(nazvanie, janr, god_vypuska, proizvoditel, strana, prodolzhitelnost, rezhisser)
VALUES ('9 Rota', 'Boevik','2008', 'Avatar studio', 'Russia', 140,'Fedor Bondarchuk');
INSERT INTO kalFiellm(nazvanie, janr, god_vypuska, proizvoditel, strana, prodolzhitelnost, rezhisser)
VALUES ('Slavnie parni', 'Kriminal','1990', 'Universal', 'Italy', 143,'Julio Scorceze');
INSERT INTO kalFiellm(nazvanie, janr, god_vypuska, proizvoditel, strana, prodolzhitelnost, rezhisser)
VALUES ('Brat', 'Kriminal','1998', '21 Vek', 'Russia', 142,'Sergey Bodrov');
INSERT INTO kalFiellm(nazvanie, janr, god_vypuska, proizvoditel, strana, prodolzhitelnost, rezhisser)
VALUES ('Ironiy sudby', 'Komediy','1998', 'Mosfilm', 'Russia', 135,'Ildar Ryazanov');
Остальные таблицы заполняются аналогично.
Данные таблицы принимают вид:
Таблица режиссёр.
FIO NACIONALNOST DATA_ROZHDENIYA
-------------------- -------------------- ---------------
Djohn Cameron USA 1956
Francisko Capollo Italy 1954
Fedor Bondarchuk Russia 1970
Julio Scorceze Italy 1945
Sergey Bodrov Russia 1957
Ildar Ryazanov Russia 1942
Таблица фильм:
NAZVANIE JANR GOD_VYPUSKA PROIZVODITEL STRANA
--------------- --------------- ----------- -------------------- ----------
PRODOLZHITELNOST REZHISSER
---------------- --------------------
2012 Fantastika 2010 Columbia USA
150 Djohn Cameron
Krestniy Otec Kriminal 1981 Paramount Italy
158 Francisko Capollo
9 Rota Boevik 2008 Avatar studio Russia
140 Fedor Bondarchuk
NAZVANIE JANR GOD_VYPUSKA PROIZVODITEL STRANA
--------------- --------------- ----------- -------------------- ----------
PRODOLZHITELNOST REZHISSER
---------------- --------------------
Slavnie parni Kriminal 1990 Universal Italy
143 Julio Scorceze
Brat Kriminal 1998 21 Vek Russia
142 Sergey Bodrov
Ironiy sudby Komediy 1998 Mosfilm Russia
135 Ildar Ryazanov
Таблица актёр фильма:
FIO NAZVANIEFILMA ROL_V_FILME
--------------- --------------- ---------------
Oliver Platt 2012 Karl Anhauser
Tomas Makkarti 2012 Gordon Zibelman
Marlon Brando Krestniy Otec Don Karlione
Al Pachino Krestniy Otec Maikl Korleone
Aleksei CHadov 9 Rota Vladim Vorobiev
Soslan Fidarov 9 Rota Begbulatov
Rey Liotta Slavnie parni Genri Hill
Robert de Niro Slavnie parni Dchimmi Konvey
Vikt Suhorukov Brat Brat 2
Andrey Bodrov Brat Brat 1
Andrey Myagkov Ironiy sudby CHenya Lukashin
FIO NAZVANIEFILMA ROL_V_FILME
--------------- --------------- ---------------
Barbara Brilska Ironiy sudby Nadya SHeveleva
Таблица актёр:
FIO NACIONALNOST DATA_ROZHDENIYA
-------------------- --------------- ---------------
Oliver Platt USA 1981
Marlon Brando Italy 1964
Al Pachino Italy 1957
Soslan Fidarov Russia 1983
Rey Liotta Italy 1968
Robert de Niro USA 1955
Andrey Bodrov Russia 1981
Andrey Myagkov Russia 1953
Barbara Brilska Russia 1955
Tomas Makkarti USA 1971
Aleksei CHadov Russia 1978
FIO NACIONALNOST DATA_ROZHDENIYA
-------------------- --------------- ---------------
Vikt Suhorukov Russia 1964
Запросы:
Для изменения данных используется команда UPDATE, которая изменяет значения столбцов в таблице.
Пример 1:
Изменить дату выпуска путем увеличения на 10 только тех фильмов, продолжительность которых больше 143 минут.
UPDATE kalFiellm SET god_vypuska= god_vypuska+10
WHERE prodolzhitelnost>143
Для удаления данных используется команда DELETE, которая удаляет значения столбцов в таблице.
Например:
Удаление данных, тех фильмов, продолжительность сеанса которых меньше 150 минут.
DELETE FROM kalFiellm
WHERE god_vypuska<1989;
Для выборки данных используется команда SELECT.
1)Получить все сведения о режиссёрах, хранящихся в базе.
SELECT * FROM kalrezhischer;
FIO NACIONALNOST DATA_ROZHDENIYA
-------------------- -------------------- ---------------
Djohn Cameron USA 1956
Francisko Capollo Italy 1954
Fedor Bondarchuk Russia 1970
Julio Scorceze Italy 1945
Sergey Bodrov Russia 1957
Ildar Ryazanov Russia 1942
2)Выведем поле национальность из таблицы актёр
select nacionalnost from kal_akkcter;
NACIONALNOST
---------------
USA
Italy
Italy
Russia
Italy
USA
Russia
Russia
Russia
USA
Russia
NACIONALNOST
---------------
Russia
3)Выведем поля: актёр и дата их рождения,при условии что дата рождения не меньше 1960.
SQL> select fio,data_rozhdeniya from kal_akkcter where data_rozhdeniya>1960;
FIO DATA_ROZHDENIYA
-------------------- ---------------
Oliver Platt 1981
Marlon Brando 1964
Soslan Fidarov 1983
Rey Liotta 1968
Andrey Bodrov 1981
Tomas Makkarti 1971
Aleksei CHadov 1978
Vikt Suhorukov 1964
4)Выведем поле актёр и дату их рождения увеличенную в 100 раз.
select fio,data_rozhdeniya*100 from kal_akkcter;
FIO DATA_ROZHDENIYA*100
-------------------- -------------------
Oliver Platt 198100
Marlon Brando 196400
Al Pachino 195700
Soslan Fidarov 198300
Rey Liotta 196800
Robert de Niro 195500
Andrey Bodrov 198100
Andrey Myagkov 195300
Barbara Brilska 195500
Tomas Makkarti 197100
Aleksei CHadov 197800
FIO DATA_ROZHDENIYA*100
-------------------- -------------------
Vikt Suhorukov 196400
5)выделить фильмы которые сняты зарубежными киностудиями.
select nazvanie from kalFiellm where strana not like 'Russia';
NAZVANIE
---------------
2012
Krestniy Otec
Slavnie parni
6)Представить сведения о фильме, актере, который снимается в этом фильме, а также о национальности актёра:
select kalFiellm.nazvanie,kalll_acKcterfilma.FIO,
kal_akkcter.nacionalnost from kalFiellm,kalll_acKcterfilma,
kal_akkcter where (kalFiellm.nazvanie=kalll_acKcterfilma.nazvaniefilma) and (kal_akkcter.fio=kalll_acKcterfilma.FIO);
NAZVANIE FIO NACIONALNOST
--------------- --------------- ---------------
2012 Oliver Platt USA
Krestniy Otec Marlon Brando Italy
Krestniy Otec Al Pachino Italy
9 Rota Soslan Fidarov Russia
Slavnie parni Rey Liotta Italy
Slavnie parni Robert de Niro USA
Brat Andrey Bodrov Russia
Ironiy sudby Andrey Myagkov Russia
Ironiy sudby Barbara Brilska Russia
2012 Tomas Makkarti USA
9 Rota Aleksei CHadov Russia
NAZVANIE FIO NACIONALNOST
--------------- --------------- ---------------
Brat Vikt Suhorukov Russia
7)среднее значение продолжительности фильмов
select avg(kalFiellm.prodolzhitelnost) from kalFiellm;
AVG(KALFIELLM.PRODOLZHITELNOST)
-------------------------------
144,666667
8)сортировка режиссёров по дате рождения:
select Fio from kalrezhischer
order by data_rozhdeniya;
FIO
--------------------
Ildar Ryazanov
Julio Scorceze
Francisko Capollo
Djohn Cameron
Sergey Bodrov
Fedor Bondarchuk