Загрузка данных


/* =========================================================
   ПРАКТИЧЕСКАЯ РАБОТА №20
   База: user284_db

   Основные таблицы:
   student11
   predmeti11
   ocenki11
   ========================================================= */


/* =========================================================
   ЗАДАНИЕ 2
   ПОСЕЩАЕМОСТЬ ЗА МАРТ, АПРЕЛЬ И МАЙ

   Kod_studenta:
   - НЕ PRIMARY KEY
   - FOREIGN KEY
   - UNIQUE для связи 1 к 1
   ========================================================= */


/* =========================================================
   МАРТ
   ========================================================= */

CREATE TABLE posesh_mart11
(
    Kod_studenta INT NOT NULL UNIQUE,
    Uvazh_prop INT NOT NULL,
    Neuvazh_prop INT NOT NULL,

    CONSTRAINT FK_posesh_mart11_student11
        FOREIGN KEY (Kod_studenta)
        REFERENCES student11(Kod_studenta)
);


/* Заполняем 15 записей */

INSERT INTO posesh_mart11
(
    Kod_studenta,
    Uvazh_prop,
    Neuvazh_prop
)
SELECT TOP 15
    Kod_studenta,
    Kod_studenta % 5,
    (Kod_studenta % 4) * 2
FROM student11
ORDER BY Kod_studenta;


/* Показываем март */

SELECT *
FROM posesh_mart11;



/* =========================================================
   АПРЕЛЬ
   ========================================================= */

CREATE TABLE posesh_aprel11
(
    Kod_studenta INT NOT NULL UNIQUE,
    Uvazh_prop INT NOT NULL,
    Neuvazh_prop INT NOT NULL,

    CONSTRAINT FK_posesh_aprel11_student11
        FOREIGN KEY (Kod_studenta)
        REFERENCES student11(Kod_studenta)
);


/* Заполняем 15 записей другими значениями */

INSERT INTO posesh_aprel11
(
    Kod_studenta,
    Uvazh_prop,
    Neuvazh_prop
)
SELECT TOP 15
    Kod_studenta,
    (Kod_studenta * 2) % 7,
    (Kod_studenta * 3) % 10
FROM student11
ORDER BY Kod_studenta;


/* Показываем апрель */

SELECT *
FROM posesh_aprel11;



/* =========================================================
   МАЙ
   ========================================================= */

CREATE TABLE posesh_may11
(
    Kod_studenta INT NOT NULL UNIQUE,
    Uvazh_prop INT NOT NULL,
    Neuvazh_prop INT NOT NULL,

    CONSTRAINT FK_posesh_may11_student11
        FOREIGN KEY (Kod_studenta)
        REFERENCES student11(Kod_studenta)
);


/* Заполняем 15 записей другими значениями */

INSERT INTO posesh_may11
(
    Kod_studenta,
    Uvazh_prop,
    Neuvazh_prop
)
SELECT TOP 15
    Kod_studenta,
    (Kod_studenta * 3) % 8,
    (Kod_studenta * 4) % 11
FROM student11
ORDER BY Kod_studenta;


/* Показываем май */

SELECT *
FROM posesh_may11;



/* =========================================================
   ПОКАЗАТЬ ВСЕ 3 МЕСЯЦА
   ========================================================= */

SELECT * FROM posesh_mart11;
SELECT * FROM posesh_aprel11;
SELECT * FROM posesh_may11;



/* =========================================================
   ЗАДАНИЕ 2.1
   ПЕРЕВЕСТИ 3 СТУДЕНТОВ С 1 КУРСА НА 2 КУРС

   Нужно показать ДО и ПОСЛЕ.
   ========================================================= */


/* Запоминаем 3 студентов первого курса */

SELECT TOP 3 Kod_studenta
INTO #Perevod
FROM student11
WHERE Kurs = 1
ORDER BY Kod_studenta;


/* =========================================================
   ДО
   ========================================================= */

SELECT s.*
FROM student11 AS s
INNER JOIN #Perevod AS p
    ON s.Kod_studenta = p.Kod_studenta;


/* =========================================================
   ОБНОВЛЕНИЕ
   ========================================================= */

UPDATE s
SET Kurs = Kurs + 1
FROM student11 AS s
INNER JOIN #Perevod AS p
    ON s.Kod_studenta = p.Kod_studenta;


/* =========================================================
   ПОСЛЕ
   ========================================================= */

SELECT s.*
FROM student11 AS s
INNER JOIN #Perevod AS p
    ON s.Kod_studenta = p.Kod_studenta;


/* Удаляем временную таблицу */

DROP TABLE #Perevod;



/* =========================================================
   ЗАДАНИЕ 2.2
   СТУДЕНТ ОТРАБОТАЛ 2 ЧАСА НЕУВАЖИТЕЛЬНЫХ ПРОПУСКОВ

   Берём один месяц — АПРЕЛЬ.
   Выбираем студента, у которого есть хотя бы 2 часа.
   Показываем ДО и ПОСЛЕ.
   ========================================================= */


/* Выбираем одного студента */

DECLARE @Kod_studenta INT;

SELECT TOP 1
    @Kod_studenta = Kod_studenta
FROM posesh_aprel11
WHERE Neuvazh_prop >= 2
ORDER BY Kod_studenta;


/* =========================================================
   ДО ОТРАБОТКИ
   ========================================================= */

SELECT
    s.*,
    p.Uvazh_prop,
    p.Neuvazh_prop
FROM student11 AS s
INNER JOIN posesh_aprel11 AS p
    ON s.Kod_studenta = p.Kod_studenta
WHERE s.Kod_studenta = @Kod_studenta;


/* =========================================================
   ОТРАБОТАЛ 2 ЧАСА
   ========================================================= */

UPDATE posesh_aprel11
SET Neuvazh_prop = Neuvazh_prop - 2
WHERE Kod_studenta = @Kod_studenta;


/* =========================================================
   ПОСЛЕ ОТРАБОТКИ
   ========================================================= */

SELECT
    s.*,
    p.Uvazh_prop,
    p.Neuvazh_prop
FROM student11 AS s
INNER JOIN posesh_aprel11 AS p
    ON s.Kod_studenta = p.Kod_studenta
WHERE s.Kod_studenta = @Kod_studenta;



/* =========================================================
   ЗАДАНИЕ 3
   АКАДЕМИЧЕСКИЙ ОТПУСК

   ТОЛЬКО НАПИСАТЬ И СФОТКАТЬ.
   НЕ ВЫПОЛНЯТЬ!
   ========================================================= */


/*

DELETE FROM student11
WHERE Familiya = N'Иванов';

*/


/* =========================================================
   ЗАДАНИЕ 4
   СОЗДАЁМ "НОВЫЕ ПРЕДМЕТЫ"
   НА ОСНОВЕ ТАБЛИЦЫ predmeti11
   ========================================================= */


/* Создаём такую же структуру */

SELECT TOP 0 *
INTO novie_predmeti11
FROM predmeti11;


/* Проверяем новую таблицу */

SELECT *
FROM novie_predmeti11;


/* =========================================================
   ТЕПЕРЬ В novie_predmeti11 НУЖНО ДОБАВИТЬ
   ОДНУ ДИСЦИПЛИНУ И ОДНОГО ПРЕПОДАВАТЕЛЯ.

   ЭТУ ОДНУ ЗАПИСЬ МОЖНО ВНЕСТИ ВРУЧНУЮ
   ЧЕРЕЗ "EDIT TOP 200 ROWS".
   ========================================================= */


/* =========================================================
   ПОСЛЕ ЗАПОЛНЕНИЯ novie_predmeti11
   ПОКАЗЫВАЕМ НОВЫЙ ПРЕДМЕТ
   ========================================================= */

SELECT *
FROM novie_predmeti11;


/* =========================================================
   ДОБАВЛЕНИЕ НОВОГО ПРЕДМЕТА В predmeti11

   ЭТОТ INSERT ПОКА НЕ ЗАПУСКАЙ,
   ПОКА НЕ УВИДИМ СТОЛБЦЫ predmeti11.
   ========================================================= */


/*

INSERT INTO predmeti11
SELECT *
FROM novie_predmeti11;

*/


/* Показываем существующую таблицу предметов */

SELECT *
FROM predmeti11;