Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Tbd_practice_3

.docx
Скачиваний:
8
Добавлен:
28.06.2021
Размер:
260.49 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федеральное государственное образовательное учреждение

высшего профессионального образования

Московский технический университет связи и информатики

Факультет информационных технологий

Практическая работа

по дисциплине «Теория базы данных»

Кафедра ИСУиА

Выполнил:

Москва, 2018

Код создания таблиц:

CREATE TABLE r1 (

FIO varchar(30) NOT NULL,

Subject varchar(40) NOT NULL,

Mark int);

CREATE TABLE r2 (

FIO varchar(30) NOT NULL,

StudGroup varchar(2) NOT NULL);

CREATE TABLE r3 (

StudGroup varchar(2) NOT NULL,

Subject varchar(40) NOT NULL);

INSERT INTO r1 VALUES ('Volkov V.K.', 'Data bases', 5 );

INSERT INTO r1 VALUES ('Ageeva L.I.', 'Data bases', 4 );

INSERT INTO r1 VALUES ('Grishin I.A.', 'Data bases', 2 );

INSERT INTO r1 VALUES ('Pugachev N.N.', 'Data bases', 2 );

INSERT INTO r1 VALUES ('Ozerov T.I.', 'Data bases', 5 );

INSERT INTO r1 VALUES ('Ageeva L.I.', 'IS design', 4 );

INSERT INTO r1 VALUES ('Pugachev N.N.', 'IS design', 2 );

INSERT INTO r1 VALUES ('Ozerov T.I.', 'IS design', 5 );

INSERT INTO r1 VALUES ('Grishin I.A.', 'IS design', NULL );

INSERT INTO r1 VALUES ('Vladimirov V.A.', 'Data bases', 5 );

INSERT INTO r1 VALUES ('Trofimov P.A.', 'Network and telecommunication', 4 );

INSERT INTO r1 VALUES ('Ivanova E.A.', 'Network and telecommunication', 5 );

INSERT INTO r1 VALUES ('Utkina N.V.', 'Network and telecommunication', 5 );

INSERT INTO r1 VALUES ('Vladimirov V.A.', 'English', 4 );

INSERT INTO r1 VALUES ('Trofimov P.A.', 'English', 5 );

INSERT INTO r1 VALUES ('Ivanova E.A.', 'English', 3 );

INSERT INTO r1 VALUES ('Volkov V.K.', 'English', 5 );

INSERT INTO r2 VALUES ('Volkov V.K.','01');

INSERT INTO r2 VALUES ('Ageeva L.I.','01');

INSERT INTO r2 VALUES ('Pugachev N.N.','01');

INSERT INTO r2 VALUES ('Grishin I.A.','01');

INSERT INTO r2 VALUES ('Ozerov T.I.','01');

INSERT INTO r2 VALUES ('Vladimirov V.A.','01');

INSERT INTO r2 VALUES ('Trofimov P.A.','03');

INSERT INTO r2 VALUES ('Ivanova E.A.','03');

INSERT INTO r2 VALUES ('Utkina N.V.','03');

INSERT INTO r3 VALUES ('01','Data bases');

INSERT INTO r3 VALUES ('01','IS design');

INSERT INTO r3 VALUES ('01','English');

INSERT INTO r3 VALUES ('03','English');

INSERT INTO r3 VALUES ('03','Network and telecommunication');

/

Коды подзапросов:

1) SELECT DISTINCT StudGroup FROM r3;

2) SELECT r2.FIO, r3.Subject FROM r2, r3 WHERE r2.StudGroup = r3.StudGroup MINUS SELECT r1.FIO, r1.Subject FROM r1;

3) SELECT FIO FROM r1 WHERE Mark = 2 GROUP BY FIO HAVING COUNT (*)>1;

4) SELECT FIO, Subject FROM r1 WHERE Mark IS NULL;

5) SELECT Subject, COUNT(*) FROM r1 WHERE Mark IS NOT NULL GROUP BY Subject;

6) SELECT COUNT(DISTINCT FIO) FROM r1 WHERE Mark>2;

7) SELECT COUNT(*) FROM r1 WHERE Mark>2;

8) SELECT Subject, COUNT(DISTINCT Mark) FROM r1 GROUP BY Subject;

9) SELECT StudGroup, Subject, COUNT(DISTINCT r1.FIO), AVG(Mark) FROM r1,r2 WHERE Mark>2 AND r1.FIO = r2.FIO GROUP BY StudGroup, Subject;

10) SELECT StudGroup FROM r1,r2 WHERE r1.FIO = r2.FIO AND Mark = 2 GROUP BY StudGroup HAVING COUNT(*) > 2;

11) SELECT r1.FIO FROM r1 WHERE r1.Mark > 2 GROUP BY FIO HAVING COUNT(*) = (SELECT COUNT(*) FROM r2,r3 WHERE r2.StudGroup = r3.StudGroup AND r1.FIO = r2.FIO) ;

12) SELECT FIO FROM r2,r3 WHERE r2.StudGroup = r3.StudGroup AND Subject = 'Data bases' MINUS (SELECT FIO FROM r1 WHERE Subject = 'Data bases');

13) SELECT DISTINCT FIO FROM r1 WHERE 4<= ALL(SELECT Mark FROM r1 r11 WHERE r11.FIo = r1.FIO);

14) SELECT r2.FIO, r3.Subject, r1.Mark FROM r2 JOIN r3 on r2.StudGroup = r3.StudGroup LEFT JOIN r1 ON r1.FIO = r2.FIO AND r1.Subject = r3.Subject;

16) UPDATE r1 SET Mark = 4 WHERE FIO = 'Pugachev N.N.' AND Subject = 'Data bases';

Результаты подзапросов:

Код создания таблиц для самостоятельной работы:

CREATE TABLE r4(

StudGroup varchar(2) PRIMARY KEY,

Course varchar(1) NOT NULL

);

CREATE TABLE r5(

FIO varchar(30) PRIMARY KEY,

StudGroup varchar(2) NOT NULL,

Scholarship int

);

CREATE TABLE r6(

Year varchar(4) NOT NULL,

Scholarship int NOT NULL

);

INSERT INTO r4 VALUES ('01', '3');

INSERT INTO r4 VALUES ('03', '4');

INSERT INTO r6 VALUES ('2016', '1100');

INSERT INTO r6 VALUES ('2017', '1300');

INSERT INTO r6 VALUES ('2018', '1500');

INSERT INTO r5 VALUES ('Volkov V.K.','01', NULL);

INSERT INTO r5 VALUES ('Ageeva L.I.','01',NULL);

INSERT INTO r5 VALUES ('Pugachev N.N.','01',NULL);

INSERT INTO r5 VALUES ('Grishin I.A.','01',NULL);

INSERT INTO r5 VALUES ('Ozerov T.I.','01',NULL);

INSERT INTO r5 VALUES ('Vladimirov V.A.','01',NULL);

INSERT INTO r5 VALUES ('Trofimov P.A.','03',NULL);

INSERT INTO r5 VALUES ('Ivanova E.A.','03',NULL);

INSERT INTO r5 VALUES ('Utkina N.V.','03',NULL);

/

Изменения в таблицах:

18.1) UPDATE r5 SET Scholarship = (SELECT Scholarship FROM r6 WHERE Year = '2018')* 1.5 WHERE r5.FIO IN (SELECT r1.FIO FROM r1 WHERE r1.Mark = 5 GROUP BY r1.FIO HAVING COUNT(*)=3);

18.2) UPDATE r5 SET Scholarship = (SELECT Scholarship FROM r6 WHERE Year = '2018')* 1.25 WHERE r5.FIO IN (SELECT r1.FIO FROM r1 WHERE r1.FIO NOT IN (SELECT FIO FROM r1 WHERE Mark <= 3 OR Mark IS NULL) AND r1.Mark = 5 GROUP BY r1.FIO HAVING COUNT(*)=2);

18.3) UPDATE r5 SET Scholarship = (SELECT Scholarship FROM r6 WHERE Year = '2018') WHERE r5.FIO IN (SELECT r1.FIO FROM r1 WHERE r1.Mark>3 GROUP BY r1.FIO HAVING COUNT(*)=3);

18.4) UPDATE r5 SET Scholarship = 0 WHERE r5.FIO IN (SELECT r1.FIO FROM r1 WHERE r1.Mark < 4 GROUP BY r1.FIO);

ALTER TABLE r5 ADD Results varchar(15);

Задание 1:

UPDATE r5 SET Results = 'Expelled' WHERE FIO IN (SELECT DISTINCT FIO FROM (SELECT r2.FIO, r3.Subject FROM r2, r3 WHERE r2.StudGroup = r3.StudGroup MINUS SELECT r1.FIO, r1.Subject FROM r1 WHERE Mark > 3) GROUP BY FIO HAVING COUNT(*)>1);

Задание 2:

UPDATE r5 SET Results = 'Transferred' WHERE FIO NOT IN (SELECT DISTINCT FIO FROM (SELECT r2.FIO, r3.Subject FROM r2, r3 WHERE r2.StudGroup = r3.StudGroup MINUS SELECT r1.FIO, r1.Subject FROM r1 WHERE Mark > 3) GROUP BY FIO HAVING COUNT(*)>1);

Задание 3:

DELETE FROM (SELECT r1.FIO FROM r1 JOIN r5 ON r1.FIO = r5.FIO WHERE r5.Results = 'Expelled');

DELETE FROM (SELECT r2.FIO FROM r2 JOIN r5 ON r2.FIO = r5.FIO WHERE r5.Results = 'Expelled');

DELETE FROM r5 WHERE r5.Results = 'Expelled';

Р езультаты изменений:

Соседние файлы в предмете Базы данных