[4sem] add db course files
This commit is contained in:
parent
ea29f4148d
commit
827b74f0b4
13 changed files with 1087 additions and 0 deletions
39
4sem/db/lab10.sql
Normal file
39
4sem/db/lab10.sql
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
BEGIN TRANSACTION
|
||||
|
||||
DECLARE @firstSpecialityID INT = (SELECT TOP 1 ID
|
||||
FROM [Специальность]
|
||||
ORDER BY ID);
|
||||
|
||||
-- Создайте группу студентов, обучающихся по специальности, на которую студентов
|
||||
-- не набирали.
|
||||
INSERT INTO [Группа]([Название], [КодСпециальности], [ЗачётнаяКнижкаСтаросты], [ТабельныйНомерКуратора])
|
||||
VALUES (N'КИ20-09Б', @firstSpecialityID + 1, NULL, 1);
|
||||
|
||||
-- Одну из групп, которых две по одной специальности (см. требования Лаб. раб. №9),
|
||||
-- перевести в созданную группу (на другую специальность).
|
||||
-- КИ20-07Б -> КИ20-09Б
|
||||
DECLARE @firstGroupID INT = (SELECT TOP 1 ID
|
||||
FROM [Группа]
|
||||
ORDER BY ID);
|
||||
DECLARE @newGroupID INT = (SELECT ID
|
||||
FROM [Группа]
|
||||
WHERE [Название] = N'КИ20-09Б');
|
||||
UPDATE [Студент]
|
||||
SET Группа = @newGroupID
|
||||
FROM [Студент]
|
||||
WHERE Группа = @firstGroupID;
|
||||
|
||||
-- Назначьте старосту и куратора тех же людей, которые были в теперь уже пустой
|
||||
-- группе.
|
||||
UPDATE [Группа]
|
||||
SET ЗачётнаяКнижкаСтаросты = (SELECT [ЗачётнаяКнижкаСтаросты] FROM [Группа] WHERE ID = @firstGroupID),
|
||||
ТабельныйНомерКуратора = (SELECT [ТабельныйНомерКуратора] FROM [Группа] WHERE ID = @firstGroupID)
|
||||
FROM [Группа]
|
||||
WHERE ID = @newGroupID;
|
||||
|
||||
-- Удалите пустую группу из таблицы.
|
||||
DELETE
|
||||
FROM Группа
|
||||
WHERE ID = @firstGroupID;
|
||||
|
||||
COMMIT TRANSACTION
|
||||
21
4sem/db/lab11.sql
Normal file
21
4sem/db/lab11.sql
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
DROP FUNCTION IF EXISTS dbo.AverageMark;
|
||||
DROP FUNCTION IF EXISTS dbo.CreditsList;
|
||||
GO;
|
||||
|
||||
CREATE FUNCTION dbo.AverageMark(@disciplineId int) RETURNS float AS BEGIN;
|
||||
DECLARE @out float = (SELECT AVG(CAST(Оценка AS FLOAT)) FROM Изучение WHERE Дисциплина = @disciplineId);
|
||||
RETURN IIF(@out < 2, ROUND(@out, 0), @out);
|
||||
END;
|
||||
GO;
|
||||
|
||||
CREATE FUNCTION dbo.CreditsList(@groupId int, @semester int) RETURNS table AS RETURN (
|
||||
SELECT DISTINCT D.[Название], D.[Отчётность] FROM [Дисциплина] AS D
|
||||
JOIN [Группа] as G on G.ID = @groupId
|
||||
WHERE D.[Семестр] = @semester AND G.[КодСпециальности] = D.[КодСпециальности]
|
||||
);
|
||||
GO;
|
||||
|
||||
SELECT dbo.AverageMark(4), dbo.AverageMark(12), dbo.AverageMark(2);
|
||||
SELECT * FROM dbo.CreditsList(2, 2);
|
||||
SELECT * FROM dbo.CreditsList(4,1);
|
||||
|
||||
17
4sem/db/lab12.sql
Normal file
17
4sem/db/lab12.sql
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
DROP VIEW IF EXISTS dbo.ExcellentStudents;
|
||||
GO;
|
||||
|
||||
CREATE VIEW dbo.ExcellentStudents AS
|
||||
SELECT SSQ.[Фамилия], SSQ.[Имя], SSQ.[Отчество], SSQ.[Группа], SSQ.[Семестр]
|
||||
FROM (SELECT S.[Фамилия], S.[Имя], S.[Отчество], S.[Группа], D.[Семестр], AVG(L.[Оценка]) AS AVG_MARK
|
||||
FROM [Изучение] AS L
|
||||
JOIN [Дисциплина] AS D on L.[Дисциплина] = D.ID
|
||||
JOIN [Студент] AS S on L.[Студент] = S.[НомерЗачетнойКнижки]
|
||||
GROUP BY S.[Фамилия], S.[Имя], S.[Отчество], S.[Группа], D.[Семестр]) AS SSQ
|
||||
WHERE SSQ.AVG_MARK = 5
|
||||
OR SSQ.AVG_MARK = 1
|
||||
GROUP BY SSQ.[Фамилия], SSQ.[Имя], SSQ.[Отчество], SSQ.[Группа], SSQ.[Семестр];
|
||||
GO;
|
||||
|
||||
SELECT *
|
||||
FROM dbo.ExcellentStudents;
|
||||
56
4sem/db/lab13.sql
Normal file
56
4sem/db/lab13.sql
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
DROP TRIGGER IF EXISTS dbo.NoDeleteUsedDiscipline;
|
||||
DROP TRIGGER IF EXISTS dbo.NoSetWrongCaptain;
|
||||
DROP TRIGGER IF EXISTS dbo.NoInsertWrongExam;
|
||||
GO;
|
||||
|
||||
CREATE TRIGGER dbo.NoDeleteUsedDiscipline ON [Дисциплина] INSTEAD OF DELETE AS BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @d_discID TABLE (DISC INT);
|
||||
INSERT INTO @d_discID(DISC) SELECT ID FROM DELETED;
|
||||
|
||||
IF EXISTS(SELECT * FROM [Изучение] AS L WHERE EXISTS(SELECT * FROM @d_discID WHERE DISC = L.[Дисциплина])) BEGIN
|
||||
RAISERROR ('Deletion is not allowed: discipline is in use', 16, 1);
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DELETE FROM [Дисциплина] WHERE EXISTS(SELECT * FROM @d_discID WHERE DISC = ID);
|
||||
END;
|
||||
GO;
|
||||
|
||||
CREATE TRIGGER dbo.NoSetWrongCaptain ON [Группа] AFTER UPDATE AS BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @c_groupID TABLE (GRP INT, NCPT INT);
|
||||
INSERT INTO @c_groupID(GRP, NCPT) SELECT ID, INSERTED.[ЗачётнаяКнижкаСтаросты] FROM INSERTED;
|
||||
|
||||
IF UPDATE([ЗачётнаяКнижкаСтаросты]) AND EXISTS(SELECT * FROM [Студент] AS S WHERE EXISTS(SELECT * FROM @c_groupID WHERE GRP = S.[Группа] AND S.[НомерЗачетнойКнижки] = NCPT))
|
||||
RETURN;
|
||||
|
||||
RAISERROR ('New captain not from this group', 16, 1);
|
||||
END;
|
||||
GO;
|
||||
|
||||
CREATE TRIGGER dbo.NoInsertWrongExam ON [Изучение] AFTER INSERT AS BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @i_learnID TABLE (SID INT, DID INT);
|
||||
INSERT INTO @i_learnID(SID, DID) SELECT INSERTED.Студент, INSERTED.Дисциплина FROM INSERTED;
|
||||
|
||||
IF EXISTS(SELECT * FROM [Студент] AS S
|
||||
JOIN [Группа] AS G on S.[Группа] = G.ID
|
||||
RIGHT JOIN [Дисциплина] AS D on D.[КодСпециальности] = G.[КодСпециальности]
|
||||
WHERE EXISTS(SELECT * FROM @i_learnID WHERE SID = S.[НомерЗачетнойКнижки] AND D.ID = DID))
|
||||
RETURN;
|
||||
|
||||
RAISERROR ('Student is not learning that discipline', 16, 1);
|
||||
END;
|
||||
GO;
|
||||
|
||||
BEGIN TRANSACTION
|
||||
|
||||
DELETE FROM [Дисциплина] WHERE ID = 33;
|
||||
UPDATE [Группа] SET [Группа].[ЗачётнаяКнижкаСтаросты] = 25 WHERE ID = 4;
|
||||
INSERT INTO [Изучение]([Студент], [Дисциплина], [Дата], [Оценка]) VALUES (13, 9, '2020-09-05', 1);
|
||||
|
||||
ROLLBACK TRANSACTION
|
||||
136
4sem/db/lab2.sql
Normal file
136
4sem/db/lab2.sql
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
drop table if exists [Сделка];
|
||||
drop table if exists [Склад];
|
||||
drop table if exists [Сотрудник];
|
||||
drop table if exists [Поставщик];
|
||||
drop table if exists [Клиент];
|
||||
drop table if exists [Товар];
|
||||
go
|
||||
|
||||
CREATE TABLE [Сотрудник]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Имя nvarchar(300) NOT NULL,
|
||||
КодНачальника int NOT NULL,
|
||||
CONSTRAINT [PK_СОТРУДНИК] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
) WITH (IGNORE_DUP_KEY = OFF)
|
||||
|
||||
)
|
||||
GO
|
||||
CREATE TABLE [Поставщик]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Имя nvarchar(300) NOT NULL,
|
||||
CONSTRAINT [PK_ПОСТАВЩИК] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
) WITH (IGNORE_DUP_KEY = OFF)
|
||||
|
||||
)
|
||||
GO
|
||||
CREATE TABLE [Клиент]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Имя nvarchar(300) NOT NULL,
|
||||
Телефон nvarchar(10) NOT NULL,
|
||||
Адрес nvarchar(300) NOT NULL,
|
||||
Пол bit NOT NULL,
|
||||
CONSTRAINT [PK_КЛИЕНТ] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
) WITH (IGNORE_DUP_KEY = OFF)
|
||||
|
||||
)
|
||||
GO
|
||||
CREATE TABLE [Товар]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Имя nvarchar(300) NOT NULL,
|
||||
Количество int NOT NULL,
|
||||
Описание nvarchar(300) NOT NULL,
|
||||
Категория nvarchar(300) NOT NULL,
|
||||
CONSTRAINT [PK_ТОВАР] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
) WITH (IGNORE_DUP_KEY = OFF)
|
||||
|
||||
)
|
||||
GO
|
||||
CREATE TABLE [Склад]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
КодПоставщика int NOT NULL,
|
||||
КодТовара int NOT NULL,
|
||||
Количество int NOT NULL,
|
||||
Цена money NOT NULL,
|
||||
Дата date NOT NULL,
|
||||
CONSTRAINT [PK_СКЛАД] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
) WITH (IGNORE_DUP_KEY = OFF)
|
||||
|
||||
)
|
||||
GO
|
||||
CREATE TABLE [Сделка]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Дата date NOT NULL,
|
||||
КодСклада int NOT NULL,
|
||||
КодКлиента int NOT NULL,
|
||||
КодСотрудника int NOT NULL,
|
||||
Количество int NOT NULL,
|
||||
Скидка money NOT NULL,
|
||||
CONSTRAINT [PK_СДЕЛКА] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
) WITH (IGNORE_DUP_KEY = OFF)
|
||||
|
||||
)
|
||||
GO
|
||||
ALTER TABLE [Сотрудник]
|
||||
WITH CHECK ADD CONSTRAINT [Сотрудник_fk0] FOREIGN KEY ([КодНачальника]) REFERENCES [Сотрудник] ([ID])
|
||||
ON UPDATE NO ACTION
|
||||
GO
|
||||
ALTER TABLE [Сотрудник]
|
||||
CHECK CONSTRAINT [Сотрудник_fk0]
|
||||
GO
|
||||
|
||||
|
||||
|
||||
ALTER TABLE [Склад]
|
||||
WITH CHECK ADD CONSTRAINT [Склад_fk0] FOREIGN KEY ([КодПоставщика]) REFERENCES [Поставщик] ([ID])
|
||||
ON UPDATE CASCADE
|
||||
GO
|
||||
ALTER TABLE [Склад]
|
||||
CHECK CONSTRAINT [Склад_fk0]
|
||||
GO
|
||||
ALTER TABLE [Склад]
|
||||
WITH CHECK ADD CONSTRAINT [Склад_fk1] FOREIGN KEY ([КодТовара]) REFERENCES [Товар] ([ID])
|
||||
ON UPDATE CASCADE
|
||||
GO
|
||||
ALTER TABLE [Склад]
|
||||
CHECK CONSTRAINT [Склад_fk1]
|
||||
GO
|
||||
|
||||
ALTER TABLE [Сделка]
|
||||
WITH CHECK ADD CONSTRAINT [Сделка_fk0] FOREIGN KEY ([КодСклада]) REFERENCES [Склад] ([ID])
|
||||
ON UPDATE CASCADE
|
||||
GO
|
||||
ALTER TABLE [Сделка]
|
||||
CHECK CONSTRAINT [Сделка_fk0]
|
||||
GO
|
||||
ALTER TABLE [Сделка]
|
||||
WITH CHECK ADD CONSTRAINT [Сделка_fk1] FOREIGN KEY ([КодКлиента]) REFERENCES [Клиент] ([ID])
|
||||
ON UPDATE CASCADE
|
||||
GO
|
||||
ALTER TABLE [Сделка]
|
||||
CHECK CONSTRAINT [Сделка_fk1]
|
||||
GO
|
||||
ALTER TABLE [Сделка]
|
||||
WITH CHECK ADD CONSTRAINT [Сделка_fk2] FOREIGN KEY ([КодСотрудника]) REFERENCES [Сотрудник] ([ID])
|
||||
ON UPDATE CASCADE
|
||||
GO
|
||||
ALTER TABLE [Сделка]
|
||||
CHECK CONSTRAINT [Сделка_fk2]
|
||||
GO
|
||||
271
4sem/db/lab3.sql
Normal file
271
4sem/db/lab3.sql
Normal file
|
|
@ -0,0 +1,271 @@
|
|||
BEGIN TRANSACTION
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Очистим базу
|
||||
DELETE FROM [Сделка] WHERE 1 > 0;
|
||||
DELETE FROM [Клиент] WHERE 1 > 0;
|
||||
DELETE FROM [Склад] WHERE 1 > 0;
|
||||
DELETE FROM [Поставщик] WHERE 1 > 0;
|
||||
DELETE FROM [Сотрудник] WHERE 1 > 0;
|
||||
DELETE FROM [Товар] WHERE 1 > 0;
|
||||
|
||||
-- Обновим ключи
|
||||
DBCC CHECKIDENT ([Сделка], RESEED, 1);
|
||||
DBCC CHECKIDENT ([Клиент], RESEED, 1);
|
||||
DBCC CHECKIDENT ([Склад], RESEED, 1);
|
||||
DBCC CHECKIDENT ([Поставщик], RESEED, 1);
|
||||
DBCC CHECKIDENT ([Сотрудник], RESEED, 1);
|
||||
DBCC CHECKIDENT ([Товар], RESEED, 1);
|
||||
go
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Генерируем клиентов
|
||||
INSERT INTO [Клиент]([Имя], [Телефон], [Адрес], [Пол])
|
||||
VALUES (N'Агафонова Милана Фёдоровна', '3361876906', N'985019, Свердловская область, город Талдом, шоссе Бухарестская, 82', '0'),
|
||||
(N'Давыдова Александра Александровна', '9114695687', N'264202, Ярославская область, город Воскресенск, шоссе Космонавтов, 60', '0'),
|
||||
(N'Демина Мария Александровна', '9461046614', N'266856, Самарская область, город Шаховская, проезд Домодедовская, 00', '0'),
|
||||
(N'Иванов Иван Александрович', '9968051776', N'581486, Тюменская область, город Наро-Фоминск, пр. Будапештсткая, 49', '1'),
|
||||
(N'Никифоров Руслан Александрович', '8331275435', N'624218, Новгородская область, город Озёры, въезд Домодедовская, 45', '1'),
|
||||
(N'Руднев Олег Владимирович', '9004552583', N'157285, Оренбургская область, город Мытищи, пл. 1905 года, 52', '1'),
|
||||
(N'Самсонов Георгий Кириллович', '9817892552', N'157598, Амурская область, город Талдом, наб. Домодедовская, 71', '1'),
|
||||
(N'Семенова Екатерина Марковна', '9479462287', N'303011, Астраханская область, город Воскресенск, наб. Гоголя, 43', '0'),
|
||||
(N'Тимофеев Михаил Михайлович', '9514816307', N'303937, Белгородская область, город Воскресенск, наб. Ленина, 46', '1'),
|
||||
(N'Фролова Елена Игоревна', '9807420852', N'364746, Иркутская область, город Кашира, пер. Чехова, 27', '0');
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Генерируем поставщиков
|
||||
INSERT INTO [Поставщик]([Имя])
|
||||
VALUES (N'Андреева София Константиновна'),
|
||||
(N'Булгаков Егор Тихонович'),
|
||||
(N'Жукова Виктория Матвеевна'),
|
||||
(N'Иванова София Владиславовна'),
|
||||
(N'Левина Яна Александровна'),
|
||||
(N'Максимов Макар Богданович'),
|
||||
(N'Назаров Савелий Степанович'),
|
||||
(N'Полякова Мария Михайловна'),
|
||||
(N'Соколов Илья Дмитриевич'),
|
||||
(N'Фомин Михаил Сергеевич');
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Генерируем сотрудников
|
||||
-- Создадим менеджера
|
||||
INSERT INTO [Сотрудник]([Имя]) VALUES (N'Баженова Д.');
|
||||
DECLARE @manager INT;
|
||||
set @manager = (SELECT TOP 1 [ID] FROM [Сотрудник] WHERE [КодНачальника] IS NULL);
|
||||
|
||||
-- Начальников отделов
|
||||
INSERT INTO [Сотрудник]([КодНачальника], [Имя])
|
||||
VALUES (@manager, N'Демина Д.'),
|
||||
(@manager, N'Иванов З.');
|
||||
DECLARE @depHead1 INT;
|
||||
DECLARE @depHead2 INT;
|
||||
set @depHead1 = (SELECT TOP 1 [ID] FROM [Сотрудник] WHERE [КодНачальника] IS NOT NULL);
|
||||
set @depHead2 = @depHead1 + 1
|
||||
|
||||
-- И их подчинённых
|
||||
INSERT INTO [Сотрудник]([КодНачальника], [Имя])
|
||||
VALUES (@depHead1, N'Иванова А.'),
|
||||
(@depHead1, N'Иванова П.'),
|
||||
(@depHead1, N'Марков Д.'),
|
||||
(@depHead2, N'Наумов И.'),
|
||||
(@depHead2, N'Попов И.'),
|
||||
(@depHead2, N'Смирнов И.');
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Генерируем товары
|
||||
INSERT INTO [Товар]([Имя], [Количество], [Категория], [Описание])
|
||||
VALUES (N'Золотая мотыга', 1, N'Инструмент', N'Лучшая на рынке мотыга, самая быстрая и прочная'),
|
||||
(N'Перфоратор "Сосед"', 1, N'Иснтрумент', N'Перфорирует всё и вся'),
|
||||
(N'Смектит диоктаэдрический', 10, N'Лекарство', N'Порошок для приготовления суспензии для приёма внутрь'),
|
||||
(N'Ретто', 1, N'Лекарство', N'Таблетки против изжоги'),
|
||||
(N'Панкреатин', 1, N'Лекарство', N'Комплекс ферментов поджелудочной железы'),
|
||||
(N'Хлорпромазин', 1, N'Лекарство', N'Лекарственное средство, обладающее транквилизирующим, ' +
|
||||
N'противосудорожным, снотворным, миорелаксантным и ' +
|
||||
N'седативным действием'),
|
||||
(N'Сосиски "Столичные"', 20, N'Продукт', N'Мясные сосиски'),
|
||||
(N'Сарсапарилла', 1, N'Продукт', N'Корневое пиво, сливочный карамельно-мятный вкус'),
|
||||
(N'Масло Сливочное', 1, N'Продукт', N'Сливочное масло от местного изготовителя'),
|
||||
(N'Подсолнечное масло', 1, N'Продукт', N'Растительное масло, получаемое из семян масличных сортов ' +
|
||||
N'подсолнечника масличного');
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Закинем товары на склады
|
||||
DECLARE @ignoreGoodStart INT;
|
||||
DECLARE @ignoreProviderStart INT;
|
||||
|
||||
SET @ignoreGoodStart = (SELECT TOP 1 ID
|
||||
FROM [Товар]
|
||||
ORDER BY NEWID()) - 2;
|
||||
SET @ignoreProviderStart = (SELECT TOP 1 ID
|
||||
FROM [Поставщик]
|
||||
ORDER BY NEWID()) - 2;
|
||||
|
||||
INSERT INTO [Склад]([КодПоставщика], [КодТовара], [Количество], [Цена], [Дата])
|
||||
SELECT *,
|
||||
ABS(CHECKSUM(NEWID())) % 10 + 1 as AMOUNT,
|
||||
ROUND(ABS(CHECKSUM(NEWID())) % 5000 + 1000, -2) as PRICE,
|
||||
DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 364), '2019-01-01') as DATE
|
||||
FROM (SELECT [Поставщик].ID as PID, [Товар].ID as GID
|
||||
FROM [Поставщик]
|
||||
JOIN [Товар] ON ([Товар].ID NOT BETWEEN @ignoreGoodStart AND @ignoreGoodStart + 3) AND
|
||||
([Поставщик].ID NOT BETWEEN @ignoreProviderStart AND @ignoreProviderStart + 3)) as SQGP
|
||||
ORDER BY DATE
|
||||
|
||||
DECLARE @lastDay DATE;
|
||||
|
||||
SET @lastDay = (SELECT TOP 1 [Дата]
|
||||
FROM [Склад]
|
||||
ORDER BY [Дата] DESC);
|
||||
|
||||
-- Закинем ещё товаров, сдвинутых по дате, отличных по цене
|
||||
INSERT INTO [Склад]([КодПоставщика], [КодТовара], [Количество], [Цена], [Дата])
|
||||
SELECT TOP 5 [КодПоставщика],
|
||||
[КодТовара],
|
||||
[Количество],
|
||||
ROUND([Цена] + (CHECKSUM(NEWID()) % 4000), -2),
|
||||
DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 30), @lastDay) as DATE
|
||||
FROM Склад
|
||||
ORDER BY NEWID();
|
||||
|
||||
SET @lastDay = (SELECT TOP 1 [Дата]
|
||||
FROM [Склад]
|
||||
ORDER BY [Дата] DESC);
|
||||
|
||||
-- Закинем ещё товаров, которые отсутствуют
|
||||
INSERT INTO [Склад]([КодПоставщика], [КодТовара], [Количество], [Цена], [Дата])
|
||||
SELECT TOP 5 [КодПоставщика],
|
||||
[КодТовара],
|
||||
0,
|
||||
[Цена],
|
||||
DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 30), @lastDay) as DATE
|
||||
FROM Склад
|
||||
ORDER BY NEWID();
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Проводим сделки
|
||||
DECLARE @ignoreStoreStart INT;
|
||||
DECLARE @lastManagerId INT;
|
||||
|
||||
SET @ignoreStoreStart = (SELECT TOP 1 ID
|
||||
FROM [Склад]
|
||||
ORDER BY NEWID()) - 2;
|
||||
set @lastManagerId = (SELECT TOP 1 [КодНачальника]
|
||||
FROM [Сотрудник]
|
||||
ORDER BY [КодНачальника] DESC);
|
||||
|
||||
INSERT INTO [Сделка]([Дата], [КодСклада], [КодКлиента], [КодСотрудника], [Количество], [Скидка])
|
||||
SELECT DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 20), SDATE) as DATE,
|
||||
SID,
|
||||
CID,
|
||||
(SELECT TOP 1 [Сотрудник].ID
|
||||
FROM [Сотрудник]
|
||||
WHERE [Сотрудник].ID = @lastManagerId + 1 + (ABS(CHECKSUM(NEWID())) % 6)
|
||||
ORDER BY NEWID()) as WID,
|
||||
ABS(CHECKSUM(NEWID())) % 10 as AMOUNT,
|
||||
ROUND(ABS(CHECKSUM(NEWID())) % 5000 + 1000, -2) as DISCOUNT
|
||||
FROM (SELECT [Клиент].ID as CID, [Склад].ID as SID, [Склад].[Дата] as SDATE
|
||||
FROM [Клиент]
|
||||
JOIN [Склад] ON ([Склад].ID NOT BETWEEN @ignoreStoreStart AND @ignoreStoreStart + 10)) as SQGP
|
||||
ORDER BY DATE
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
COMMIT TRANSACTION
|
||||
|
||||
-- Сколько товаров
|
||||
DECLARE @goodsCount INT;
|
||||
SET @goodsCount = (SELECT count(ID)
|
||||
FROM [Товар]);
|
||||
SELECT @goodsCount as GOODS_COUNT;
|
||||
|
||||
-- Сколько товаров нет на складе
|
||||
DECLARE @goodsInStorage INT;
|
||||
SET @goodsInStorage = (SELECT count(*)
|
||||
FROM (SELECT DISTINCT [Склад].[КодТовара]
|
||||
FROM [Склад]
|
||||
JOIN [Товар] ON [Товар].ID = [Склад].[КодТовара]) as GIDONS);
|
||||
SELECT @goodsCount - @goodsInStorage as GOODS_NOT_ON_STORAGE;
|
||||
|
||||
-- Сколько есть поставщиков
|
||||
DECLARE @providersCount INT;
|
||||
SET @providersCount = (SELECT count(ID)
|
||||
FROM [Поставщик]);
|
||||
SELECT @providersCount as PROVIDERS_COUNT;
|
||||
|
||||
-- Сколько поставщиков не поставляют товары
|
||||
DECLARE @providersProvideCount INT;
|
||||
SET @providersProvideCount = (
|
||||
SELECT count(*)
|
||||
FROM (
|
||||
SELECT DISTINCT [Склад].[КодПоставщика]
|
||||
from [Склад]
|
||||
JOIN [Поставщик] ON [Поставщик].ID = [Склад].[КодПоставщика]
|
||||
) as PIDPG
|
||||
)
|
||||
SELECT @providersCount - @providersProvideCount as PROVIDERS_DONT_PROVIDE_COUNT;
|
||||
|
||||
-- Менеджер и кол-во менеджеров
|
||||
DECLARE @managerId INT;
|
||||
SET @managerId = (SELECT ID FROM [Сотрудник] WHERE [КодНачальника] IS NULL);
|
||||
SELECT N'Начальник', * FROM [Сотрудник] WHERE ID = @managerId;
|
||||
|
||||
-- Главы отделов и кол-во подчинённых
|
||||
DECLARE @depHead1_ INT;
|
||||
DECLARE @depHead2_ INT;
|
||||
|
||||
SET @depHead1_ = (SELECT TOP 1 ID FROM [Сотрудник] WHERE [КодНачальника] = @managerId);
|
||||
SET @depHead2_ = @depHead1_ + 1;
|
||||
|
||||
SELECT N'Глава отдела', * FROM [Сотрудник] WHERE [КодНачальника] = @managerId;
|
||||
|
||||
-- Сотрудники отделов
|
||||
SELECT N'Глава отдела', * FROM [Сотрудник] WHERE [КодНачальника] BETWEEN @depHead1_ AND @depHead2_;
|
||||
|
||||
-- Кол-во записей на складе
|
||||
SELECT count(ID) FROM [Склад];
|
||||
|
||||
-- Один товар поставлен разными поставщиками по разной цене.
|
||||
DECLARE @randGood INT;
|
||||
SET @randGood = (SELECT TOP 1 [Склад].[КодТовара] FROM [Склад] ORDER BY NEWID());
|
||||
SELECT DISTINCT * FROM [Склад] WHERE [КодТовара] = @randGood;
|
||||
|
||||
-- Один товар одного поставщика в разные даты поставлялся по разным ценам.
|
||||
DECLARE @randProvider INT;
|
||||
SET @randProvider = (SELECT TOP 1 [Склад].[КодПоставщика] FROM [Склад] ORDER BY NEWID());
|
||||
SET @randGood = (SELECT TOP 1 [Склад].[КодТовара] FROM [Склад] WHERE [КодПоставщика] = @randProvider ORDER BY NEWID());
|
||||
SELECT * FROM [Склад] WHERE [КодПоставщика] = @randProvider AND [КодТовара] = @randGood;
|
||||
|
||||
-- Некоторые товары закончились на складе.
|
||||
SELECT * FROM [Склад] WHERE [Количество] = 0;
|
||||
|
||||
-- Кол-во клиентов, а так же мужчин и женщин среди них
|
||||
DECLARE @clients INT;
|
||||
DECLARE @maleClients INT;
|
||||
DECLARE @femaleClients INT;
|
||||
|
||||
SET @clients = (SELECT count(ID)
|
||||
FROM [Клиент]);
|
||||
SET @maleClients = (SELECT count(ID)
|
||||
FROM [Клиент]
|
||||
WHERE [Пол] = 1);
|
||||
SET @femaleClients = @clients - @maleClients;
|
||||
SELECT @clients as CLIENTS, @maleClients as MALES, @femaleClients AS FEMALES;
|
||||
|
||||
-- Все клиенты совершили покупку единожды
|
||||
DECLARE @doneDeal INT;
|
||||
SET @doneDeal = (SELECT count(*)
|
||||
FROM (SELECT DISTINCT [Сделка].[КодКлиента]
|
||||
FROM [Сделка]) as CIDDD);
|
||||
SELECT @clients as CLIENT, @doneDeal as DONE_DEAL_AT_LEAST_ONCE;
|
||||
|
||||
-- Не все товары, имеющиеся на складе, продавались
|
||||
DECLARE @storagesAmount INT;
|
||||
SET @storagesAmount = (SELECT count(ID) FROM [Склад]);
|
||||
SELECT @storagesAmount as STORAGES_AMOUNT, count(*) as UNIQUE_STORAGES_IN_DEALS FROM (SELECT [КодСклада] FROM [Сделка] INTERSECT SELECT ID FROM [Склад]) as SIDWD;
|
||||
22
4sem/db/lab4.sql
Normal file
22
4sem/db/lab4.sql
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
SELECT
|
||||
-- Вывести количество сделок, зафиксированных в БД.
|
||||
(SELECT count(*) FROM [Сделка]) AS DEALS_COUNT,
|
||||
|
||||
-- Определить среднее арифметическое значение количества товаров на складе.
|
||||
(SELECT AVG([Склад].Количество) FROM [Склад]) AS AVERAGE_GOODS_COUNT,
|
||||
|
||||
-- Определить общее количество товаров на складе.
|
||||
(SELECT SUM([Склад].Количество) FROM [Склад]) AS ALL_GOODS_COUNT,
|
||||
|
||||
-- Определить максимальное количество товаров на складе.
|
||||
(SELECT MAX([Склад].Количество) FROM [Склад]) AS MAX_GOODS_COUNT,
|
||||
|
||||
-- Вывести значение косинуса для угла 60º.
|
||||
COS(RADIANS(60.0)) AS COS60,
|
||||
|
||||
-- Получить целое случайное число в диапазоне [-7; 2].
|
||||
-- [-7; 3) -> [-7; 2]
|
||||
FLOOR(RAND() * (3 - (-7)) + -7) AS RAND_IN_m7_TO_p2,
|
||||
|
||||
-- Определить (вывести в виде числа от 1 до 7) текущий день недели.
|
||||
DAY(GETDATE()) AS CURRENT_DAY;
|
||||
29
4sem/db/lab5.sql
Normal file
29
4sem/db/lab5.sql
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
-- Сортировать поставщиков в алфавитном (обратном) порядке.
|
||||
SELECT * FROM [Поставщик] ORDER BY [Имя] DESC;
|
||||
|
||||
-- Вывести поставщика(ов) с самым длинным названием.
|
||||
SELECT TOP 2 * FROM [Поставщик] ORDER BY LEN([Имя]) DESC;
|
||||
|
||||
-- Вывести всех покупателей с фамилией, начинающейся на букву «В».
|
||||
SELECT * FROM [Клиент] WHERE [Клиент].[Имя] LIKE N'И%';
|
||||
|
||||
-- Вывести всех покупателей с фамилией, начинающейся с букв в диапазоне от "В" до
|
||||
-- "К", где вторая буква «о».
|
||||
-- АБ[ВГДЕЁЖЗИК]ЛМНОПРСТУФХЦЧШЩЭЮЯ
|
||||
SELECT * FROM [Клиент] WHERE [Клиент].[Имя] LIKE N'[ВГДЕЁЖЗИК]е%';
|
||||
|
||||
-- Определите количество сделок за текущий календарный месяц.
|
||||
SELECT count(*) FROM [Сделка] WHERE MONTH(Дата) = MONTH(GETDATE());
|
||||
|
||||
-- Определите количество сделок, зафиксированных в заданные дни недели
|
||||
-- (например, по вторникам и средам).
|
||||
DECLARE @MON INT = 1;
|
||||
DECLARE @TUE INT = 2;
|
||||
DECLARE @WED INT = 3;
|
||||
DECLARE @THU INT = 4;
|
||||
DECLARE @FRI INT = 5;
|
||||
DECLARE @SAT INT = 6;
|
||||
DECLARE @SUN INT = 7;
|
||||
DECLARE @daysList TABLE (ID INT);
|
||||
INSERT @daysList(ID) VALUES (@MON),(@TUE);
|
||||
SELECT count(*) FROM [Сделка] WHERE DATEPART(DW, [Дата]) in (SELECT ID FROM @daysList);
|
||||
55
4sem/db/lab6.sql
Normal file
55
4sem/db/lab6.sql
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
-- Вывести наименования товаров, количество которых на складе максимально (на
|
||||
-- складе должно быть как минимум два товара, количество которых одинаково и
|
||||
-- равно максимальному).
|
||||
SELECT DISTINCT (SELECT TOP 1 [Товар].[Имя] FROM [Товар] WHERE [Товар].ID = [Склад].КодТовара) as NAME
|
||||
FROM [Склад]
|
||||
WHERE [Склад].[Количество] = (SELECT MAX([Склад].[Количество]) FROM [Склад]);
|
||||
|
||||
-- Вывести в порядке, обратном алфавитному, наименования товаров, количество
|
||||
-- которых на складе находится в заданном диапазоне.
|
||||
DECLARE @goodsAmountFrom INT = 3;
|
||||
DECLARE @goodsAmountTo INT = 7;
|
||||
SELECT DISTINCT (SELECT TOP 1 [Товар].[Имя] FROM [Товар] WHERE [Товар].ID = [Склад].КодТовара) as NAME
|
||||
FROM [Склад]
|
||||
WHERE [Склад].[Количество] BETWEEN @goodsAmountFrom AND @goodsAmountTo
|
||||
ORDER BY NAME DESC;
|
||||
|
||||
-- Вывести поставщиков, которые хотя бы раз осуществили поставку, в алфавитном
|
||||
-- порядке.
|
||||
SELECT DISTINCT (SELECT TOP 1 [Поставщик].Имя
|
||||
FROM [Поставщик]
|
||||
WHERE NOT EXISTS(SELECT * FROM [Склад] WHERE [Склад].КодПоставщика = [Поставщик].ID)) as NAME
|
||||
FROM [Склад]
|
||||
ORDER BY NAME;
|
||||
|
||||
-- 30 дней с даты последней покупки действует дополнительная скидка на все товары.
|
||||
-- Вывести список покупателей, имеющих возможность воспользоваться указанной
|
||||
-- скидкой.
|
||||
-- YYYY-MM-DD
|
||||
DECLARE @desiredDate DATE = '2020-04-20';
|
||||
SELECT DISTINCT (SELECT [Клиент].[Имя] FROM [Клиент] WHERE [Клиент].ID = [Сделка].[КодКлиента]) as NAME
|
||||
FROM [Сделка]
|
||||
WHERE DATEDIFF(DAY, [Сделка].[Дата], @desiredDate) <= 30;
|
||||
|
||||
-- Вывести список товаров, названия которых начинающиеся с букв «д» и «л»,
|
||||
-- стоимость которых не более 20% от максимальной.
|
||||
SELECT (SELECT [Товар].[Имя] FROM [Товар] WHERE [Товар].ID = [Склад].[КодТовара]) as NAME
|
||||
FROM [Склад]
|
||||
WHERE ([Склад].Цена / (SELECT MAX([Склад].[Цена]) FROM [Склад])) <= .8
|
||||
AND EXISTS(SELECT * FROM [Товар] WHERE [Товар].ID = [Склад].[КодТовара] AND [Товар].[Имя] LIKE N'[мс]%');
|
||||
|
||||
-- Вывести поставщиков, которые не поставляют товары, названия которых
|
||||
-- начинающиеся с букв «д» и «л»
|
||||
SELECT DISTINCT [Поставщик].[Имя]
|
||||
FROM [Поставщик]
|
||||
WHERE NOT EXISTS(SELECT *
|
||||
FROM [Склад]
|
||||
WHERE [Склад].[КодПоставщика] = [Поставщик].ID
|
||||
AND EXISTS(SELECT *
|
||||
FROM [Товар]
|
||||
WHERE [Склад].[КодТовара] = [Товар].ID
|
||||
AND [Товар].[Имя] LIKE N'[мс]%'));
|
||||
|
||||
-- Показать список клиентов с указанием их пола («мужчина» или «женщина»).
|
||||
SELECT [Имя], (IIF([Пол] = 0, N'Женщина', N'Мужчина'))
|
||||
FROM [Клиент];
|
||||
34
4sem/db/lab7.sql
Normal file
34
4sem/db/lab7.sql
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
-- Показать какой поставщик поставил каждый товар на склад (INNER JOIN).
|
||||
SELECT DISTINCT G.[Имя], P.[Имя] FROM [Склад]
|
||||
INNER JOIN [Поставщик] as P on P.ID = [Склад].[КодПоставщика]
|
||||
INNER JOIN [Товар] as G on G.ID = [Склад].[КодТовара];
|
||||
|
||||
-- Вывести список товаров, которыми торгует фирма, и их поставщиков вне
|
||||
-- зависимости от наличия поставок (LEFT JOIN).
|
||||
SELECT [Товар].[Имя], P.[Имя] FROM [Товар]
|
||||
LEFT JOIN [Склад] as S on S.[КодТовара] = [Товар].ID
|
||||
LEFT JOIN [Поставщик] as P on P.ID = S.[КодПоставщика];
|
||||
|
||||
-- Вывести информацию о покупаемых со склада товарах и их покупателях, включая
|
||||
-- товары, отсутствующие в списке реализованных товаров (RIGHT JOIN)
|
||||
SELECT G.[Имя],
|
||||
IIF(C.[Имя] is NULL, N'Не определён', C.[Имя]),
|
||||
IIF([Сделка].[Количество] is NULL, N'Не определено', STR([Сделка].[Количество]))
|
||||
FROM [Сделка]
|
||||
INNER JOIN [Склад] as S on S.ID = [Сделка].КодСклада
|
||||
INNER JOIN [Клиент] as C on C.ID = [Сделка].[КодКлиента]
|
||||
RIGHT JOIN [Товар] as G on G.ID = S.[КодТовара];
|
||||
|
||||
-- Вывести список поставщиков, которые хотя бы раз осуществляли поставку на склад
|
||||
-- (полусоединение).
|
||||
SELECT DISTINCT [Поставщик].[Имя] FROM [Поставщик]
|
||||
JOIN [Склад] AS S on [Поставщик].ID = S.[КодПоставщика]
|
||||
|
||||
-- Выведите список сотрудников с указанием их прямых начальников
|
||||
-- (самосоединение). Для главного начальника в столбец «Начальник» вывести
|
||||
-- «не определен».
|
||||
SELECT
|
||||
[Сотрудник].[Имя],
|
||||
IIF(B.[Имя] is NULL, N'Не определён', B.[Имя])
|
||||
FROM [Сотрудник]
|
||||
LEFT JOIN [Сотрудник] as B on B.ID = [Сотрудник].[КодНачальника];
|
||||
59
4sem/db/lab8-1.sql
Normal file
59
4sem/db/lab8-1.sql
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
-- Провести оценку количества товара на складе по наименованиям: менее 10 – мало,
|
||||
-- от 10 до 100 – достаточно, более 100 – избыточно.
|
||||
SELECT G.[Имя],
|
||||
SUM([Склад].[Количество]) as AMOUNT,
|
||||
case
|
||||
when SUM([Склад].[Количество]) < 10 then N'Мало'
|
||||
when SUM([Склад].[Количество]) < 101 then N'Достаточно'
|
||||
else N'Избыточно'
|
||||
end as ESTIMATION
|
||||
FROM [Склад]
|
||||
JOIN [Товар] as G on G.ID = [Склад].[КодТовара]
|
||||
GROUP BY G.[Имя];
|
||||
|
||||
-- Вывести наименования товаров, количество которых на складе от 1 до 10 (35 и 45)
|
||||
SELECT *
|
||||
FROM (SELECT G.[Имя],
|
||||
SUM([Склад].[Количество]) as AMOUNT
|
||||
FROM [Склад]
|
||||
JOIN [Товар] as G on G.ID = [Склад].[КодТовара]
|
||||
GROUP BY G.[Имя]) as SQNG
|
||||
WHERE AMOUNT BETWEEN 35 AND 45;
|
||||
|
||||
-- Определить тройку товаров, выручка за которые самая большая.
|
||||
SELECT TOP 3 G.[Имя],
|
||||
SUM(D.[Количество] * [Склад].[Цена]) as AMOUNT
|
||||
FROM [Склад]
|
||||
JOIN [Товар] as G on G.ID = [Склад].[КодТовара]
|
||||
JOIN [Сделка] as D on D.[КодСклада] = [Склад].ID
|
||||
GROUP BY G.Имя
|
||||
ORDER BY AMOUNT DESC;
|
||||
|
||||
-- Определить суммарную стоимость продаж каждого товара по месяцам.
|
||||
SELECT G.[Имя],
|
||||
YEAR(D.[Дата]) as YEAR,
|
||||
DATENAME(MONTH, D.[Дата]) as MONTH,
|
||||
SUM(D.[Количество] * [Склад].[Цена]) as AMOUNT
|
||||
FROM [Склад]
|
||||
JOIN [Товар] as G on G.ID = [Склад].[КодТовара]
|
||||
JOIN [Сделка] as D on D.[КодСклада] = [Склад].ID
|
||||
GROUP BY G.[Имя], YEAR(D.[Дата]), DATENAME(MONTH, D.[Дата])
|
||||
ORDER BY AMOUNT DESC;
|
||||
|
||||
-- Показать месяца, в которых продажи Молока 3,2% (или любого другого товара,
|
||||
-- хранящегося на складе с разными ID) были ниже 300 денег.
|
||||
DECLARE @randomGoodsId INT = (SELECT TOP 1 ID
|
||||
FROM [Товар]
|
||||
ORDER BY NEWID());
|
||||
DECLARE @thresholdPrice INT = 200000;
|
||||
SELECT *
|
||||
FROM (SELECT G.[Имя],
|
||||
YEAR(D.[Дата]) as YEAR,
|
||||
DATENAME(MONTH, D.[Дата]) as MONTH,
|
||||
SUM(D.[Количество] * [Склад].[Цена]) as AMOUNT
|
||||
FROM [Склад]
|
||||
JOIN [Товар] as G on G.ID = [Склад].[КодТовара]
|
||||
JOIN [Сделка] as D on D.[КодСклада] = [Склад].ID
|
||||
WHERE [Склад].КодТовара = @randomGoodsId
|
||||
GROUP BY G.[Имя], YEAR(D.[Дата]), DATENAME(MONTH, D.[Дата])) as SQG
|
||||
WHERE AMOUNT <= @thresholdPrice;
|
||||
36
4sem/db/lab8-2.sql
Normal file
36
4sem/db/lab8-2.sql
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
-- Ранжируйте сотрудников по объемам продаж и выведите тройку лидеров.
|
||||
WITH trades AS (
|
||||
SELECT DISTINCT W.[Имя] AS NAME,
|
||||
SUM([Сделка].[Количество] * S.Цена) OVER (PARTITION BY [КодСотрудника]) AS DEALS_SUM
|
||||
|
||||
FROM [Сделка]
|
||||
JOIN [Склад] AS S ON S.ID = [Сделка].[КодСклада]
|
||||
JOIN [Сотрудник] AS W ON W.ID = [Сделка].[КодСотрудника]
|
||||
)
|
||||
|
||||
SELECT TOP 3 NAME,
|
||||
DEALS_SUM,
|
||||
DENSE_RANK() OVER (ORDER BY DEALS_SUM DESC) AS RANK
|
||||
FROM trades
|
||||
ORDER BY DEALS_SUM DESC;
|
||||
|
||||
-- Вывести суммы сделок по месяцам для каждого сотрудника и показать разницу с
|
||||
-- предыдущим месяцем, в котором были зафиксированы сделки
|
||||
WITH trades AS (
|
||||
SELECT DISTINCT W.[Имя] AS NAME,
|
||||
YEAR([Сделка].[Дата]) AS CURR_YEAR,
|
||||
MONTH([Сделка].[Дата]) AS CURR_MONTH,
|
||||
SUM([Сделка].[Количество] * S.Цена)
|
||||
OVER (PARTITION BY [КодСотрудника], YEAR([Сделка].[Дата]), MONTH([Сделка].[Дата])) AS DEALS_SUM_CURR_MONTH
|
||||
|
||||
FROM [Сделка]
|
||||
JOIN [Склад] AS S ON S.ID = [Сделка].[КодСклада]
|
||||
JOIN [Сотрудник] AS W ON W.ID = [Сделка].[КодСотрудника]
|
||||
)
|
||||
|
||||
SELECT NAME,
|
||||
CURR_YEAR,
|
||||
CURR_MONTH,
|
||||
DEALS_SUM_CURR_MONTH,
|
||||
DEALS_SUM_CURR_MONTH - COALESCE(LAG(DEALS_SUM_CURR_MONTH) OVER (PARTITION BY NAME ORDER BY NAME), 0.0) AS DIFF_WITH_LAST_MONTH
|
||||
FROM trades;
|
||||
312
4sem/db/lab9.sql
Normal file
312
4sem/db/lab9.sql
Normal file
|
|
@ -0,0 +1,312 @@
|
|||
BEGIN TRANSACTION
|
||||
|
||||
use dean;
|
||||
|
||||
CREATE TABLE [Специальность]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Шифр nvarchar(10) NOT NULL,
|
||||
Наименование nvarchar(100) NOT NULL,
|
||||
ФормаОбучения nvarchar(20) NOT NULL,
|
||||
Уровень nvarchar(20) NOT NULL,
|
||||
ПродолжительностьОбучения int NOT NULL,
|
||||
Описание nvarchar(4000) NOT NULL,
|
||||
CONSTRAINT [PK_СПЕЦИАЛЬНОСТЬ] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (IGNORE_DUP_KEY = OFF)
|
||||
);
|
||||
go;
|
||||
|
||||
CREATE TABLE [Группа]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Название nvarchar(30) NOT NULL,
|
||||
КодСпециальности int NOT NULL,
|
||||
ЗачётнаяКнижкаСтаросты int NULL,
|
||||
ТабельныйНомерКуратора int NOT NULL,
|
||||
CONSTRAINT [PK_ГРУППА] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (IGNORE_DUP_KEY = OFF)
|
||||
);
|
||||
go;
|
||||
|
||||
CREATE TABLE [Студент]
|
||||
(
|
||||
НомерЗачетнойКнижки int IDENTITY (1,1),
|
||||
Фамилия nvarchar(30) NOT NULL,
|
||||
Имя nvarchar(30) NOT NULL,
|
||||
Отчество nvarchar(30) NOT NULL,
|
||||
Группа int NOT NULL,
|
||||
ГодПоступления date NOT NULL,
|
||||
CONSTRAINT [PK_СТУДЕНТ] PRIMARY KEY CLUSTERED (НомерЗачетнойКнижки ASC) WITH (IGNORE_DUP_KEY = OFF)
|
||||
);
|
||||
go;
|
||||
|
||||
CREATE TABLE [Преподаватель]
|
||||
(
|
||||
ТабельныйНомер int IDENTITY (1,1),
|
||||
Фамилия nvarchar(30) NOT NULL,
|
||||
Имя nvarchar(30) NOT NULL,
|
||||
Отчество nvarchar(30) NOT NULL,
|
||||
УчёнаяСтепень nvarchar(50) NOT NULL,
|
||||
УчёноеЗвание nvarchar(50) NOT NULL,
|
||||
Кафедра nvarchar(50) NOT NULL,
|
||||
CONSTRAINT [PK_ПРЕПОДАВАТЕЛЬ] PRIMARY KEY CLUSTERED (ТабельныйНомер ASC) WITH (IGNORE_DUP_KEY = OFF)
|
||||
);
|
||||
go;
|
||||
|
||||
CREATE TABLE [Дисциплина]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Название nvarchar(100) NOT NULL,
|
||||
КодСпециальности int NOT NULL,
|
||||
Семестр int NOT NULL,
|
||||
Объём int NOT NULL,
|
||||
Отчётность nvarchar(50) NOT NULL,
|
||||
CONSTRAINT [PK_ДИСЦИПЛИНА] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (IGNORE_DUP_KEY = OFF)
|
||||
);
|
||||
go;
|
||||
|
||||
CREATE TABLE [Изучение]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Студент int NOT NULL,
|
||||
Дисциплина int NOT NULL,
|
||||
Дата date NOT NULL,
|
||||
Оценка int NOT NULL,
|
||||
CONSTRAINT [PK_ИЗУЧЕНИЕ] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (IGNORE_DUP_KEY = OFF)
|
||||
);
|
||||
go;
|
||||
|
||||
CREATE TABLE [Преподавание]
|
||||
(
|
||||
ID int IDENTITY (1,1),
|
||||
Дисциплина int NOT NULL,
|
||||
Преподаватель int NOT NULL,
|
||||
CONSTRAINT [PK_ПРЕПОДАВАНИЕ] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (IGNORE_DUP_KEY = OFF)
|
||||
);
|
||||
go;
|
||||
|
||||
ALTER TABLE [Группа]
|
||||
WITH CHECK ADD CONSTRAINT [Группа_fk0] FOREIGN KEY ([КодСпециальности]) REFERENCES [Специальность] ([ID])
|
||||
ON UPDATE CASCADE;
|
||||
go;
|
||||
|
||||
ALTER TABLE [Группа]
|
||||
WITH CHECK ADD CONSTRAINT [Группа_fk1] FOREIGN KEY ([ЗачётнаяКнижкаСтаросты]) REFERENCES [Студент] ([НомерЗачетнойКнижки])
|
||||
ON UPDATE CASCADE;
|
||||
go;
|
||||
|
||||
ALTER TABLE [Группа]
|
||||
WITH CHECK ADD CONSTRAINT [Группа_fk2] FOREIGN KEY ([ТабельныйНомерКуратора]) REFERENCES [Преподаватель] ([ТабельныйНомер])
|
||||
ON UPDATE CASCADE;
|
||||
go;
|
||||
|
||||
|
||||
ALTER TABLE [Студент]
|
||||
WITH CHECK ADD CONSTRAINT [Студент_fk0] FOREIGN KEY ([Группа]) REFERENCES [Группа] ([ID])
|
||||
ON UPDATE NO ACTION;
|
||||
go;
|
||||
|
||||
|
||||
ALTER TABLE [Дисциплина]
|
||||
WITH CHECK ADD CONSTRAINT [Специальность_fk0] FOREIGN KEY (КодСпециальности) REFERENCES [Специальность] ([ID])
|
||||
ON UPDATE CASCADE;
|
||||
go;
|
||||
|
||||
|
||||
ALTER TABLE [Изучение]
|
||||
WITH CHECK ADD CONSTRAINT [Изучение_fk0] FOREIGN KEY (Студент) REFERENCES [Студент] ([НомерЗачетнойКнижки])
|
||||
ON UPDATE CASCADE;
|
||||
go;
|
||||
|
||||
ALTER TABLE [Изучение]
|
||||
WITH CHECK ADD CONSTRAINT [Изучение_fk1] FOREIGN KEY (Дисциплина) REFERENCES [Дисциплина] ([ID])
|
||||
ON UPDATE CASCADE;
|
||||
go;
|
||||
|
||||
|
||||
ALTER TABLE [Преподавание]
|
||||
WITH CHECK ADD CONSTRAINT [Преподавание_fk0] FOREIGN KEY (Дисциплина) REFERENCES [Дисциплина] ([ID])
|
||||
ON UPDATE CASCADE;
|
||||
go;
|
||||
|
||||
ALTER TABLE [Преподавание]
|
||||
WITH CHECK ADD CONSTRAINT [Преподавание_fk1] FOREIGN KEY (Преподаватель) REFERENCES [Преподаватель] ([ТабельныйНомер])
|
||||
ON UPDATE CASCADE;
|
||||
go;
|
||||
|
||||
COMMIT TRANSACTION
|
||||
|
||||
BEGIN TRANSACTION
|
||||
|
||||
INSERT INTO [Преподаватель]([Фамилия], [Имя], [Отчество], [УчёнаяСтепень], [УчёноеЗвание], [Кафедра])
|
||||
VALUES (N'Казаков', N'Олег', N'Владимирович', N'Кандидат технических наук', N'Профессор',
|
||||
N'Информатика и вычислительная техника'),
|
||||
(N'Селиванов', N'Кирилл', N'Владимирович', N'Отсутствует', N'Старший преподаватель',
|
||||
N'Информатика и вычислительная техника'),
|
||||
(N'Оленева', N'Татьяна', N'Сергеевна', N'Отсутствует', N'Старший преподаватель',
|
||||
N'Информатика и вычислительная техника'),
|
||||
(N'Хантимиров', N'Илья', N'Андреевич', N'Отсутствует', N'Ассистент', N'Информатика и вычислительная техника');
|
||||
|
||||
INSERT INTO [Специальность]([Шифр], [Наименование], [ФормаОбучения], [Уровень], [ПродолжительностьОбучения], [Описание])
|
||||
VALUES (N'09.03.01', N'Информатика и вычислительная техника', N'Очная', N'Бакалавриат', 4,
|
||||
N'Для того чтобы стать квалифицированным специалистом в выбранном направлении, студенту предстоит научиться:\n\nопределять сферу исследования, собирать, проводить проверку, обрабатывать и анализировать первичные сведения для проектирования;\nразрабатывать программное обеспечение, используя современные инструментальные приложения и средства;\nанализировать технические данные и научную информацию, делать выводы, опираясь на опыт зарубежных и российских коллег по теме проектирования;\nобучать сотрудников компании, использовать современные методы и автоматизированные программные средства для исследования и проектирования;\nосуществлять техническое обслуживание ЭВМ, программных средств и периферийной аппаратуры;\nустанавливать необходимые программные системы и приложения, настраивать и обеспечивать нормальную работу программно-аппаратных средств;\nанализировать показатели технического состояния, амортизации у вычислительного оборудования;\nпроизводить мероприятия по текущему ремонту и профилактике качественной работы систем;\nналаживать взаимосвязь между элементами и узлами вычислительных приборов;\nмонтировать, проводить тестирования и вводить в эксплуатацию вычислительные и информационные сети;\nработать с программными языками и писать приложения на них.'),
|
||||
(N'09.03.02', N'Информационные системы и технологии', N'Очная', N'Бакалавриат', 4,
|
||||
N'Бакалавров, получающих образование в области информационных систем и технологий, учат:\n\nосуществлять комплексный анализ разрабатываемых проектов и проводить консультации, помогающие обеспечить подготовку производственного процесса и технического обслуживания;\nизучать взаимосвязи в информационных комплексах и проводить системный анализ заданной области;\nсоздавать прикладные и базовые технологии;\nпроводить комплекс работ, направленных на освоение и финишную модернизацию технологических процессов на этапе подготовки производственного процесса нового продукта;\nпринимать непосредственное участие в вычислительных тестированиях и экспериментах, направленных на проверку точности и актуальности применяемых математических моделей;\nкорректировать стратегию проекта, исходя из инфраструктурного обеспечения предприятия и действующих в нем информационных систем;\nсобирать конечную программную систему, используя для этого готовые элементы и компоненты;\nобеспечивать непрерывную работу и сопровождать информационные технологии и системы, опираясь на требования по качеству и надежности;\nсоставлять доступные инструкции для персонала по применению правильной техники эксплуатации.'),
|
||||
(N'09.03.04', N'Программная инженерия', N'Очная', N'Бакалавриат', 4,
|
||||
N'Изучение данной специальности позволит студентам:\n\nучаствовать в осуществлении научных наблюдений и экспериментов в области глубокого анализа программных проектов, продукции, инструментов и методов изучаемого направления;\nобрабатывать и изучать возможности удовлетворения предъявленных заказчиком к разработчику требованиям;\nконструировать компоненты и составляющие программных изделий в необходимом для проектирования объеме в рамках определенного задания;\nадаптировать и использовать средства автоматизированного испытания, проектирования, разработки и обслуживания продукции;\nосуществлять деятельность, направленную на обучение пользователей и их аттестацию в области эксплуатации компьютерных систем;\nустанавливать, настраивать, осваивать и администрировать программное обеспечение;\nпроводить профилактические и корректирующие работы, связанные с эффективным использованием установленных требованиями продуктов;\nразрабатывать пакет документов и формы отчетности;\nсоздавать новые методические программы и разработки в области повышения квалификации и установления общего базового уровня технического персонала в области эксплуатации систем;\nсоздавать положительный эмоциональный и деловой фон во взаимоотношениях с заказчиком;\nиспользовать стандартные инструменты для обеспечения контроля, оценки и качества необходимого уровня программных продуктов.'),
|
||||
|
||||
(N'09.04.01', N'Информатика и вычислительная техника', N'Очная', N'Магистратура', 2,
|
||||
N'Магистры, получившие дипломы в этой области, умеют:\n\nмоделировать изучаемые процессы и изделия;\nсоздавать новые способы и средства конструирования новых устройств и процессов;\nпродумывать процесс автоматизации принимаемых решений;\nсамостоятельно производить испытания и тестирования, обстоятельно изучать их результаты;\nвыполнять работу ассистента на профильных кафедрах ВУЗов в преподавательской сфере;\nразрабатывать и проводить учебные курсы, которые контролируют доценты и профессоры;\nписать методические пособия, применяемые студентами в процессе учебы;\nпроектировать автоматизированные системы, обоснованно выбирать аппаратно-программные средства информатизации и автоматизации;\nконструировать сложные изделия, к которым относятся также и программные комплексы, применяя средства автоматизации и передовой опыт;\nосуществлять проекты, направленные на создание программ, комплексов и информационных баз;\nсоздавать проекты по объединению информационных систем, опираясь на методики и типовые стандарты в области документооборота и логистической поддержки;\nанализировать продуктивность конструируемых систем, выполняя технико-экономический и функционально-стоимостной анализ;\nсоздавать документы, определяющие нормы и технические стандарты для разработанных программ и проектов.'),
|
||||
(N'09.04.02', N'Информационные системы и технологии', N'Очная', N'Магистратура', 2,
|
||||
N'Магистры информационных технологий и систем с легкостью справляются со следующими профессиональными обязанностями:\n\nопределяют основную проектную стратегию, обозначают цели, необходимые для достижений в области проектирования, выбирают основные показатели эффективности и продуктивности, а также ограничивают сферу применения информационных технологий и систем;\nразрабатывают персональные задания для исполнителей в области конструирования отдельных составляющих и элементов, используя при этом методологию системной инженерии;\nприводят к общему виду и классифицируют по типам принимаемые решения;\nорганизовывают конструктивную работу в сфере взаимодействия коллективов заказчика и производителя;\nосуществляют поиск компромиссных решений в долгосрочной и краткосрочной перспективе, находят наилучшие варианты;\nизучают и создают собственные объектные модели в сфере машино- и приборостроения, науки, образования и техники;\nиспользуют определенную методику и способы для выполнения моделирования объектов и процессов;\nпредсказывают направления и темпы развития в сфере информационных технологий и систем;\nобеспечивают методическое наполнение учебного процесса в различных образовательных учреждениях;\nразрабатывают новые идеи, способные составить высокую конкуренцию тем, что действуют на рынке.'),
|
||||
(N'09.04.04', N'Программная инженерия', N'Очная', N'Магистратура', 2,
|
||||
N'Для получения степени магистра по программной инженерии учащемуся предстоит научиться:\n\nсоздавать новые средства, способы и методы, необходимые для осуществления процесса изучения объектов программной инженерии, опираясь на унифицированные тенденции в сфере развития профессиональной области;\nразрабатывать программы и проекты, направленные на удовлетворение требований, а также осуществлять контрольные и управляющие функции;\nиспользовать системный подход, моделирование и структурный анализ для выполнения проектных задач;\nприменять новейшие технологии в области конструирования программных комплексов и систем, используя средства автоматизации в процессах планирования, управления и контроля над качеством проектируемой продукции;\nпланировать и координировать работу в процессе разработки программных приложений;\nвыступать в роли эксперта по обучению пользователей необходимым навыкам для использования продукта;\nпроводить анализ и делать выводы на основе полученных сведений, создавая технико-экономическую базу для обоснования принятых решений;\nделать выбор в пользу экономической или технической модели развития и сопровождать на всех этапах жизненного цикла программный продукт;\nоптимизировать принятые проектные и технологические решения, обеспечивая необходимые условия для поддержания высокого уровня качества объектов.');
|
||||
|
||||
DECLARE @firstTeacherID INT = (SELECT TOP 1 ID
|
||||
FROM [Специальность]
|
||||
ORDER BY ID);
|
||||
DECLARE @firstSpecialityID INT = (SELECT TOP 1 ID
|
||||
FROM [Специальность]
|
||||
ORDER BY ID);
|
||||
INSERT INTO [Группа]([Название], [КодСпециальности], [ЗачётнаяКнижкаСтаросты], [ТабельныйНомерКуратора])
|
||||
VALUES (N'КИ20-07Б', @firstSpecialityID, NULL, @firstTeacherID),
|
||||
(N'КИ20-08Б', @firstSpecialityID + 2, NULL, @firstTeacherID + 1),
|
||||
(N'КИ16-07Б', @firstSpecialityID + 3, NULL, @firstTeacherID + 2),
|
||||
(N'КИ16-08Б', @firstSpecialityID + 5, NULL, @firstTeacherID + 3);
|
||||
|
||||
DECLARE @firstGroupID INT = (SELECT TOP 1 ID
|
||||
FROM [Группа]
|
||||
ORDER BY ID);
|
||||
INSERT INTO [Студент]([Фамилия], [Имя], [Отчество], [Группа], [ГодПоступления])
|
||||
VALUES (N'Муравьёв', N'Вячеслав', N'Геннадиевич', @firstGroupID, '2020-09-01'),
|
||||
(N'Сафонов', N'Мстислав', N'Федорович', @firstGroupID, '2020-09-01'),
|
||||
(N'Воронов', N'Терентий', N'Созонович', @firstGroupID, '2020-09-01'),
|
||||
(N'Козлова', N'Томила', N'Рудольфовна', @firstGroupID, '2020-09-01'),
|
||||
(N'Полякова', N'Изольда', N'Леонидовна', @firstGroupID, '2020-09-01'),
|
||||
(N'Михеева', N'Янина', N'Давидовна', @firstGroupID, '2020-09-01'),
|
||||
(N'Мухина', N'Милена', N'Ростиславовна', @firstGroupID, '2020-09-01'),
|
||||
|
||||
(N'Дьячкова', N'Беатриса', N'Ильяовна', @firstGroupID + 1, '2020-09-01'),
|
||||
(N'Евсеева', N'Нинна', N'Мэлоровна', @firstGroupID + 1, '2020-09-01'),
|
||||
(N'Князев', N'Виссарион', N'Ильяович', @firstGroupID + 1, '2020-09-01'),
|
||||
(N'Панфилов', N'Моисей', N'Михайлович', @firstGroupID + 1, '2020-09-01'),
|
||||
(N'Вишняков', N'Юлиан', N'Григорьевич', @firstGroupID + 1, '2020-09-01'),
|
||||
(N'Самсонова', N'Агния', N'Парфеньевна', @firstGroupID + 1, '2020-09-01'),
|
||||
(N'Ермакова', N'Елена', N'Феликсовна', @firstGroupID + 1, '2020-09-01'),
|
||||
|
||||
(N'Мишин', N'Харитон', N'Протасьевич', @firstGroupID + 2, '2016-09-01'),
|
||||
(N'Калинина', N'Мэри', N'Аристарховна', @firstGroupID + 2, '2016-09-01'),
|
||||
(N'Петухова', N'Наталия', N'Владленовна', @firstGroupID + 2, '2016-09-01'),
|
||||
(N'Назаров', N'Исак', N'Егорович', @firstGroupID + 2, '2016-09-01'),
|
||||
(N'Кузнецов', N'Варлаам', N'Ярославович', @firstGroupID + 2, '2016-09-01'),
|
||||
(N'Трофимова', N'Ванесса', N'Мироновна', @firstGroupID + 2, '2016-09-01'),
|
||||
(N'Мухин', N'Родион', N'Авксентьевич', @firstGroupID + 2, '2016-09-01'),
|
||||
|
||||
(N'Шарапова', N'Богдана', N'Васильевна', @firstGroupID + 3, '2016-09-01'),
|
||||
(N'Шарапова', N'Моника', N'Филатовна', @firstGroupID + 3, '2016-09-01'),
|
||||
(N'Рожков', N'Флор', N'Ростиславович', @firstGroupID + 3, '2016-09-01'),
|
||||
(N'Красильников', N'Ипполит', N'Романович', @firstGroupID + 3, '2016-09-01'),
|
||||
(N'Белоусова', N'Бронислава', N'Валерьяновна', @firstGroupID + 3, '2016-09-01'),
|
||||
(N'Николаев', N'Корней', N'Альбертович', @firstGroupID + 3, '2016-09-01'),
|
||||
(N'Рыбаков', N'Даниил', N'Тарасович', @firstGroupID + 3, '2016-09-01');
|
||||
|
||||
UPDATE [Группа]
|
||||
SET [ЗачётнаяКнижкаСтаросты] = (SELECT TOP 1 [НомерЗачетнойКнижки] FROM [Студент] WHERE [Группа] = 1 ORDER BY NEWID())
|
||||
FROM [Группа]
|
||||
WHERE ID = 1;
|
||||
|
||||
UPDATE [Группа]
|
||||
SET [ЗачётнаяКнижкаСтаросты] = (SELECT TOP 1 [НомерЗачетнойКнижки] FROM [Студент] WHERE [Группа] = 2 ORDER BY NEWID())
|
||||
FROM [Группа]
|
||||
WHERE ID = 2;
|
||||
|
||||
UPDATE [Группа]
|
||||
SET [ЗачётнаяКнижкаСтаросты] = (SELECT TOP 1 [НомерЗачетнойКнижки] FROM [Студент] WHERE [Группа] = 3 ORDER BY NEWID())
|
||||
FROM [Группа]
|
||||
WHERE ID = 3;
|
||||
|
||||
UPDATE [Группа]
|
||||
SET [ЗачётнаяКнижкаСтаросты] = (SELECT TOP 1 [НомерЗачетнойКнижки] FROM [Студент] WHERE [Группа] = 4 ORDER BY NEWID())
|
||||
FROM [Группа]
|
||||
WHERE ID = 4;
|
||||
|
||||
/*
|
||||
Учились 2 семестра. В каждом было 3 зачета и 2 экзамена по четырем дисциплинам (по
|
||||
одной дисциплине предусмотрены и зачет, и экзамен)
|
||||
|
||||
На каждую специальность по 8 дисциплин [ 4 на семестр D: ]
|
||||
*/
|
||||
INSERT INTO [Дисциплина]([Название], [КодСпециальности], [Семестр], [Объём], [Отчётность])
|
||||
VALUES (N'История России', @firstSpecialityID, 1, 120, N'Зачёт'),
|
||||
(N'Алгебра и геометрия', @firstSpecialityID, 1, 120, N'Зачёт'),
|
||||
(N'Математический анализ', @firstSpecialityID, 1, 240, N'Зачёт и Экзамен'),
|
||||
(N'Теория вероятностей', @firstSpecialityID, 1, 180, N'Экзамен'),
|
||||
|
||||
(N'Основы программирования', @firstSpecialityID, 2, 120, N'Зачёт'),
|
||||
(N'Алгоритмы и структуры данных', @firstSpecialityID, 2, 120, N'Зачёт'),
|
||||
(N'Теория и практика речевого общения', @firstSpecialityID, 2, 240, N'Зачёт и Экзамен'),
|
||||
(N'Философия', @firstSpecialityID, 2, 180, N'Экзамен'),
|
||||
|
||||
|
||||
(N'История России', @firstSpecialityID + 2, 1, 120, N'Зачёт'),
|
||||
(N'Алгебра и геометрия', @firstSpecialityID + 2, 1, 120, N'Зачёт'),
|
||||
(N'Математический анализ', @firstSpecialityID + 2, 1, 240, N'Зачёт и Экзамен'),
|
||||
(N'Теория вероятностей', @firstSpecialityID + 2, 1, 180, N'Экзамен'),
|
||||
|
||||
(N'Решение оптимизационных задач программными средствами', @firstSpecialityID + 2, 2, 120, N'Зачёт'),
|
||||
(N'Базы данных', @firstSpecialityID + 2, 2, 120, N'Зачёт'),
|
||||
(N'Теория и практика речевого общения', @firstSpecialityID + 2, 2, 240, N'Зачёт и Экзамен'),
|
||||
(N'Философия', @firstSpecialityID + 2, 2, 180, N'Экзамен'),
|
||||
|
||||
|
||||
(N'Архитектура информационных систем', @firstSpecialityID + 3, 1, 120, N'Зачёт'),
|
||||
(N'Автоматизированное управление бизнес-процессами и финансами', @firstSpecialityID + 3, 1, 120, N'Зачёт'),
|
||||
(N'Теория и практика речевого общения', @firstSpecialityID + 3, 1, 240, N'Зачёт и Экзамен'),
|
||||
(N'Философия', @firstSpecialityID + 3, 1, 180, N'Экзамен'),
|
||||
|
||||
(N'Космические информационные системы и технологии', @firstSpecialityID + 3, 2, 120, N'Зачёт'),
|
||||
(N'Безопасность и защита программных систем', @firstSpecialityID + 3, 2, 120, N'Зачёт'),
|
||||
(N'Вычислительные машины, системы, комплексы и сети', @firstSpecialityID + 3, 2, 240, N'Зачёт и Экзамен'),
|
||||
(N'Теория вероятностей', @firstSpecialityID + 3, 2, 180, N'Экзамен'),
|
||||
|
||||
|
||||
(N'Нейронные сети', @firstSpecialityID + 5, 1, 120, N'Зачёт'),
|
||||
(N'Операционные системы и ядра', @firstSpecialityID + 5, 1, 120, N'Зачёт'),
|
||||
(N'Теория и практика речевого общения', @firstSpecialityID + 5, 1, 240, N'Зачёт и Экзамен'),
|
||||
(N'Философия', @firstSpecialityID + 5, 1, 180, N'Экзамен'),
|
||||
|
||||
(N'Цифровые технологии сложных инженерных объектов', @firstSpecialityID + 5, 2, 120, N'Зачёт'),
|
||||
(N'Разработка программно-информационных систем', @firstSpecialityID + 5, 2, 120, N'Зачёт'),
|
||||
(N'Корпоративные информационные системы', @firstSpecialityID + 5, 2, 240, N'Зачёт и Экзамен'),
|
||||
(N'Компьютерные системы и сети', @firstSpecialityID + 5, 2, 180, N'Экзамен');
|
||||
|
||||
DECLARE @firstDisciplineID INT = (SELECT TOP 1 ID
|
||||
FROM [Дисциплина]
|
||||
ORDER BY ID);
|
||||
|
||||
INSERT INTO [Преподавание]([Дисциплина], [Преподаватель])
|
||||
VALUES (@firstDisciplineID, @firstTeacherID),
|
||||
(@firstDisciplineID + 1, @firstTeacherID + 1),
|
||||
(@firstDisciplineID + 2, @firstTeacherID + 2),
|
||||
(@firstDisciplineID + 3, @firstTeacherID + 3);
|
||||
|
||||
|
||||
DECLARE @copyFirstDisciplineID INT = @firstDisciplineID;
|
||||
WHILE EXISTS(SELECT *
|
||||
FROM [Дисциплина]
|
||||
WHERE ID = @copyFirstDisciplineID)
|
||||
BEGIN
|
||||
INSERT INTO [Преподавание]([Дисциплина], [Преподаватель])
|
||||
VALUES (@copyFirstDisciplineID, (SELECT TOP 1 [ТабельныйНомер] FROM [Преподаватель] ORDER BY NEWID()));
|
||||
|
||||
SET @copyFirstDisciplineID = @copyFirstDisciplineID + 1;
|
||||
END
|
||||
|
||||
INSERT INTO [Изучение]([Студент], [Дисциплина], [Дата], [Оценка])
|
||||
SELECT TOP 50 S.[НомерЗачетнойКнижки],
|
||||
D.ID,
|
||||
DATEADD(DAY, 40 + (CHECKSUM(NEWID()) % 30), '2020-01-01'),
|
||||
IIF(D.Отчётность = N'Зачёт', (0 + ABS(CHECKSUM(NEWID())) % 2), (2 + ABS(CHECKSUM(NEWID())) % 4))
|
||||
FROM [Студент] AS S,
|
||||
[Дисциплина] AS D
|
||||
ORDER BY NEWID()
|
||||
|
||||
COMMIT TRANSACTION
|
||||
Loading…
Add table
Add a link
Reference in a new issue