Загрузка данных
/* =========================================================
ПРАКТИЧЕСКАЯ РАБОТА №20
База: user284_db
Таблицы предыдущих работ: student12, predmet12
========================================================= */
/* =========================================================
1. СОЗДАНИЕ ТАБЛИЦЫ ПОСЕЩАЕМОСТЬ
========================================================= */
CREATE TABLE posesh12
(
Kod_studenta INT NOT NULL,
Uvazh_prop INT NOT NULL DEFAULT 0,
Neuvazh_prop INT NOT NULL DEFAULT 0,
CONSTRAINT PK_posesh12
PRIMARY KEY (Kod_studenta),
CONSTRAINT FK_posesh12_student12
FOREIGN KEY (Kod_studenta)
REFERENCES student12(Kod_studenta)
);
/* Заполняем таблицу студентами */
INSERT INTO posesh12
(
Kod_studenta,
Uvazh_prop,
Neuvazh_prop
)
SELECT
Kod_studenta,
0,
0
FROM student12;
/* Проверка */
SELECT *
FROM posesh12;
/* =========================================================
2. ПОСЕЩАЕМОСТЬ В МАРТЕ
========================================================= */
SELECT *
INTO posesh_mart12
FROM posesh12;
ALTER TABLE posesh_mart12
ADD CONSTRAINT PK_posesh_mart12
PRIMARY KEY (Kod_studenta);
ALTER TABLE posesh_mart12
ADD CONSTRAINT FK_posesh_mart12_student12
FOREIGN KEY (Kod_studenta)
REFERENCES student12(Kod_studenta);
/* Добавляем пропуски */
UPDATE posesh_mart12
SET
Uvazh_prop = Kod_studenta % 5,
Neuvazh_prop = (Kod_studenta % 4) * 2 + 2;
/* Проверка */
SELECT *
FROM posesh_mart12;
/* =========================================================
3. ПОСЕЩАЕМОСТЬ В АПРЕЛЕ
========================================================= */
SELECT *
INTO posesh_aprel12
FROM posesh12;
ALTER TABLE posesh_aprel12
ADD CONSTRAINT PK_posesh_aprel12
PRIMARY KEY (Kod_studenta);
ALTER TABLE posesh_aprel12
ADD CONSTRAINT FK_posesh_aprel12_student12
FOREIGN KEY (Kod_studenta)
REFERENCES student12(Kod_studenta);
/* Добавляем пропуски */
UPDATE posesh_aprel12
SET
Uvazh_prop = Kod_studenta % 4,
Neuvazh_prop = (Kod_studenta % 5) * 2 + 2;
/* Проверка */
SELECT *
FROM posesh_aprel12;
/* =========================================================
4. ПОСЕЩАЕМОСТЬ В МАЕ
========================================================= */
SELECT *
INTO posesh_may12
FROM posesh12;
ALTER TABLE posesh_may12
ADD CONSTRAINT PK_posesh_may12
PRIMARY KEY (Kod_studenta);
ALTER TABLE posesh_may12
ADD CONSTRAINT FK_posesh_may12_student12
FOREIGN KEY (Kod_studenta)
REFERENCES student12(Kod_studenta);
/* Добавляем пропуски */
UPDATE posesh_may12
SET
Uvazh_prop = Kod_studenta % 3,
Neuvazh_prop = (Kod_studenta % 3) * 2 + 2;
/* Проверка */
SELECT *
FROM posesh_may12;
/* =========================================================
5. ПЕРЕВЕСТИ НА СЛЕДУЮЩИЙ КУРС
========================================================= */
/* Сначала показываем студентов первого курса */
SELECT *
FROM student12
WHERE Kurs = 1;
/* Переводим их на следующий курс */
UPDATE student12
SET Kurs = Kurs + 1
WHERE Kurs = 1;
/* Проверка */
SELECT *
FROM student12;
/* =========================================================
6. ОТРАБОТКИ МАРТ
ЗАМЕНИ ИВАНОВ НА ФАМИЛИЮ СВОЕГО СТУДЕНТА
========================================================= */
UPDATE m
SET m.Neuvazh_prop = m.Neuvazh_prop - 2
FROM posesh_mart12 AS m
INNER JOIN student12 AS s
ON m.Kod_studenta = s.Kod_studenta
WHERE s.Familiya = N'Иванов'
AND m.Neuvazh_prop >= 2;
/* Проверка */
SELECT
s.Familiya,
m.Uvazh_prop,
m.Neuvazh_prop
FROM posesh_mart12 AS m
INNER JOIN student12 AS s
ON m.Kod_studenta = s.Kod_studenta
WHERE s.Familiya = N'Иванов';
/* =========================================================
7. ОТРАБОТКИ АПРЕЛЬ
========================================================= */
UPDATE a
SET a.Neuvazh_prop = a.Neuvazh_prop - 2
FROM posesh_aprel12 AS a
INNER JOIN student12 AS s
ON a.Kod_studenta = s.Kod_studenta
WHERE s.Familiya = N'Иванов'
AND a.Neuvazh_prop >= 2;
/* Проверка */
SELECT
s.Familiya,
a.Uvazh_prop,
a.Neuvazh_prop
FROM posesh_aprel12 AS a
INNER JOIN student12 AS s
ON a.Kod_studenta = s.Kod_studenta
WHERE s.Familiya = N'Иванов';
/* =========================================================
8. ОТРАБОТКИ МАЙ
========================================================= */
UPDATE m
SET m.Neuvazh_prop = m.Neuvazh_prop - 2
FROM posesh_may12 AS m
INNER JOIN student12 AS s
ON m.Kod_studenta = s.Kod_studenta
WHERE s.Familiya = N'Иванов'
AND m.Neuvazh_prop >= 2;
/* Проверка */
SELECT
s.Familiya,
m.Uvazh_prop,
m.Neuvazh_prop
FROM posesh_may12 AS m
INNER JOIN student12 AS s
ON m.Kod_studenta = s.Kod_studenta
WHERE s.Familiya = N'Иванов';
/* =========================================================
9. АКАДЕМИЧЕСКИЙ ОТПУСК
ВАЖНО: ЭТОТ ЗАПРОС ПО ЗАДАНИЮ НЕ ВЫПОЛНЯТЬ
========================================================= */
/*
DELETE FROM student12
WHERE Familiya = N'Иванов';
*/
/* =========================================================
10. ТАБЛИЦА "НОВЫЕ ПРЕДМЕТЫ"
ЕЁ ПО ЗАДАНИЮ НУЖНО СОЗДАТЬ ВРУЧНУЮ.
Поля:
Nazvanie nvarchar(100)
Prepodavatel nvarchar(100)
Добавь вручную одну запись, например:
Программирование | Иванов И.И.
========================================================= */
/* =========================================================
11. ДОБАВЛЕНИЕ НОВОГО ПРЕДМЕТА В predmet12
ЭТОТ БЛОК ВЫПОЛНЯЙ ТОЛЬКО ПОСЛЕ ТОГО,
КАК ВРУЧНУЮ СОЗДАШЬ ТАБЛИЦУ "Новые предметы"
========================================================= */
INSERT INTO predmet12
(
Nazvanie,
Prepodavatel
)
SELECT
Nazvanie,
Prepodavatel
FROM [Новые предметы];
/* Проверяем таблицу предметов */
SELECT *
FROM predmet12;