Tbd_practice_3
.docx
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Федеральное государственное образовательное учреждение
высшего профессионального образования
Московский технический университет связи и информатики
Факультет информационных технологий
Практическая работа
по дисциплине «Теория базы данных»
Кафедра ИСУиА
Выполнил:
Москва, 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';
Р езультаты изменений: