Вы находитесь на странице: 1из 5

УНИВЕРСИТЕТ ИТМО

Факультет программной инженерии и компьютерной техники


Дисциплина «Информационные системы и базы данных»

Лабораторная работа №3
Вариант 45678

Студент
Калинин Даниил,
Ушаков Максим
P33141
Преподаватель
Сагайдак А. А.

Санкт-Петербург, 2023 г.
Задание

Реализация запросов на SQL


---1---

SELECT Н_ЛЮДИ.ИД, Н_ВЕДОМОСТИ.ДАТА


FROM Н_ЛЮДИ
LEFT JOIN Н_ВЕДОМОСТИ ON Н_ЛЮДИ.ИД = Н_ВЕДОМОСТИ.ЧЛВК_ИД
WHERE Н_ЛЮДИ.ИМЯ > 'Владимир'
AND (Н_ВЕДОМОСТИ.ИД = 1250972 OR Н_ВЕДОМОСТИ.ИД = 1250981);

---2---

SELECT Н_ЛЮДИ.ИМЯ, Н_ВЕДОМОСТИ.ЧЛВК_ИД, Н_СЕССИЯ.ИД


FROM Н_ЛЮДИ
RIGHT JOIN Н_ВЕДОМОСТИ ON Н_ЛЮДИ.ИД = Н_ВЕДОМОСТИ.ЧЛВК_ИД
RIGHT JOIN Н_СЕССИЯ ON Н_ВЕДОМОСТИ.ЧЛВК_ИД = Н_СЕССИЯ.ЧЛВК_ИД
WHERE Н_ЛЮДИ.ОТЧЕСТВО < 'Александрович'
AND Н_ВЕДОМОСТИ.ЧЛВК_ИД < 163249;
---3---

SELECT COUNT(*) AS “Количество студентов”


FROM Н_ЛЮДИ AS ЛЮДИ
JOIN Н_УЧЕНИКИ AS УЧЕНИКИ ON ЛЮДИ.ИД = УЧЕНИКИ.ЧЛВК_ИД
JOIN Н_ПЛАНЫ AS ПЛАНЫ ON УЧЕНИКИ.ПЛАН_ИД = ПЛАНЫ.ИД
JOIN Н_ФОРМЫ_ОБУЧЕНИЯ AS ФОРМЫ ON ПЛАНЫ.ФО_ИД = ФОРМЫ.ИД
WHERE ФОРМЫ.НАИМЕНОВАНИЕ = 'вечерняя'
AND DATE_PART('year', AGE(ЛЮДИ.ДАТА_РОЖДЕНИЯ, CURRENT_DATE)) < 20;

---4---

SELECT НГП.ПЛАН_ИД
FROM Н_ГРУППЫ_ПЛАНОВ AS НГП
LEFT JOIN Н_УЧЕНИКИ AS УЧЕНИКИ ON НГП.ПЛАН_ИД = УЧЕНИКИ.ПЛАН_ИД
WHERE УЧЕНИКИ.ГРУППА LIKE 'ФКТИУ%'
GROUP BY НГП.ПЛАН_ИД
HAVING COUNT(УЧЕНИКИ.ГРУППА) < 2;

---5---

WITH Group4100Avg AS (
SELECT
Н_УЧЕНИКИ.ГРУППА AS GroupNumber,
Н_УЧЕНИКИ.ЧЛВК_ИД,
AVG(Ведомости.БАЛЛЫ) AS Avg_Grade
FROM
public.Н_УЧЕНИКИ
JOIN public.Н_ВЕДОМОСТИ AS Ведомости ON Н_УЧЕНИКИ.ЧЛВК_ИД =
Ведомости.ЧЛВК_ИД
WHERE
Н_УЧЕНИКИ.ГРУППА = '4100'
GROUP BY
Н_УЧЕНИКИ.ГРУППА, Н_УЧЕНИКИ.ЧЛВК_ИД
),
Group3100Min AS (
SELECT
MIN(Ведомости.БАЛЛЫ) AS Min_Grade
FROM
public.Н_УЧЕНИКИ
JOIN public.Н_ВЕДОМОСТИ AS Ведомости ON Н_УЧЕНИКИ.ИД = Ведомости.ЧЛВК_ИД
WHERE
Н_УЧЕНИКИ.ГРУППА = '3100'
)
SELECT
G4100.GroupNumber AS Number,
CONCAT_WS(' ', L.ФАМИЛИЯ, L.ИМЯ, L.ОТЧЕСТВО) AS Full_Name,
G4100.Avg_Grade AS Avg_Grade
FROM
Group4100Avg G4100
JOIN public.Н_ЛЮДИ L ON G4100.ЧЛВК_ИД = L.ИД
JOIN Group3100Min G3100 ON 1=1
WHERE
G4100.Avg_Grade = G3100.Min_Grade;

---6---

SELECT
Н_ГРУППЫ_ПЛАНОВ.ГРУППА AS "Номер группы",
CONCAT_WS(' ', Н_ЛЮДИ.ФАМИЛИЯ, Н_ЛЮДИ.ИМЯ, Н_ЛЮДИ.ОТЧЕСТВО) AS "ФИО
студента",
Н_УЧЕНИКИ.ПРИМЕЧАНИЕ AS "Номер пункта приказа"
FROM Н_УЧЕНИКИ
JOIN Н_ГРУППЫ_ПЛАНОВ ON Н_УЧЕНИКИ.ГРУППА = Н_ГРУППЫ_ПЛАНОВ.ГРУППА
JOIN Н_ЛЮДИ ON Н_УЧЕНИКИ.ЧЛВК_ИД = Н_ЛЮДИ.ИД
JOIN Н_ПЛАНЫ AS ПЛАНЫ ON Н_УЧЕНИКИ.ПЛАН_ИД = ПЛАНЫ.ИД
JOIN Н_ФОРМЫ_ОБУЧЕНИЯ AS ФОРМЫ ON ПЛАНЫ.ФО_ИД = ФОРМЫ.ИД
WHERE
Н_УЧЕНИКИ.СОСТОЯНИЕ = 'Отчислен'
AND ФОРМЫ.НАИМЕНОВАНИЕ = 'Очная'
AND DATE(Н_УЧЕНИКИ.КОНЕЦ) = '2012-09-01';

---7---

SELECT
ФАМИЛИЯ AS Фамилия,
COUNT(DISTINCT ИД) AS Количество
FROM
public.Н_ЛЮДИ
GROUP BY
ФАМИЛИЯ
HAVING
COUNT(DISTINCT ИД) > 1;

Вывод
В результате выполнения работы был освоен язык DML SQL, предназначенный для
работы с данными, хранящимися внутри базы данных.

Вам также может понравиться