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


--6.1 Вывести из таблиц «Кафедра», «Специальность» и «Студент» данные о студентах, которые обучаются на данном факультете (например, «ит»).
SELECT 
    С.Рег_номер,
    С.Фамилия AS Студент,
    П.Направление,
    К.Название AS Кафедра,
    К.Факультет
FROM Студент С
INNER JOIN Специальность П ON С.Номер = П.Номер
INNER JOIN Кафедра К ON П.Шифр = К.Шифр
WHERE K.Факультет = 'ит';

--6.2 Вывести из таблиц «Кафедра», «Специальность» и «Сотрудник» данные о выпускающих кафедрах (факультет, шифр, название, фамилию заведующего). Выпускающей считается та кафедра, на которую есть ссылки в таблице «Специальность».
SELECT DISTINCT
    К.Факультет,
    К.Шифр,
    К.Название AS Кафедра,
    СОТ.Фамилия AS Заведующий
FROM Кафедра К
INNER JOIN Специальность П ON К.Шифр = П.Шифр
INNER JOIN Сотрудник СОТ ON К.Шифр = СОТ.Шифр
WHERE СОТ.Должность LIKE '%зав. кафедрой%';

--6.3 Вывести в запросе для каждого сотрудника номер и фамилию его непосредственного руководителя. Для заведующих кафедрами поле руководителя оставить пустым.
SELECT 
    С.Таб_номер AS Таб_номер_Сотрудника,
    С.Фамилия AS Сотрудник,
    IIF(С.Таб_номер = С.Шеф, NULL, С.Шеф) AS Таб_номер_Руководителя,
    IIF(С.Таб_номер = С.Шеф, NULL, Р.Фамилия) AS Руководитель
FROM Сотрудник С
LEFT JOIN Сотрудник Р ON С.Шеф = Р.Таб_номер;

--6.4 Вывести список студентов, сдавших минимум два экзамена.
SELECT 
    С.Рег_номер,
    С.Фамилия,
    COUNT(Э.Код) AS Количество_экзаменов
FROM Студент С
INNER JOIN Экзамен Э ON С.Рег_номер = Э.Рег_номер
GROUP BY С.Рег_номер, С.Фамилия
HAVING COUNT(Э.Код) >= 2;

--6.5 Вывести список инженеров с зарплатой, меньшей 20000 руб.
SELECT 
    С.Таб_номер,
    С.Фамилия,
    С.Должность,
    С.Зарплата,
    ИНЖ.Специализация AS Специализация_Инженера
FROM Сотрудник С
INNER JOIN Инженер ИНЖ ON С.Таб_номер = ИНЖ.Таб_номер
WHERE С.Должность LIKE '%инженер%' AND С.Зарплата < 20000;

--6.6 Вывести список студентов, сдавших экзамены в заданной аудитории (например, 'T505').
SELECT DISTINCT 
    С.Рег_номер,
    С.Фамилия,
    Э.Аудитория
FROM Студент С
INNER JOIN Экзамен Э ON С.Рег_номер = Э.Рег_номер
WHERE Э.Аудитория = 'T505';

--6.7 Вывести из таблиц «Студент» и «Экзамен» учетные номера и фамилии студентов, а также количество сданных экзаменов и средний балл для каждого студента только для тех студентов, у которых средний балл не меньше заданного (например, 4).
SELECT 
    С.Рег_номер,
    С.Фамилия,
    COUNT(Э.Оценка) AS [Количество экзаменов],
    AVG(CAST(Э.Оценка AS FLOAT)) AS [Средний балл]
FROM Студент С
INNER JOIN Экзамен Э ON С.Рег_номер = Э.Рег_номер
GROUP BY С.Рег_номер, С.Фамилия
HAVING AVG(CAST(Э.Оценка AS FLOAT)) >= 4;

--6.8 Вывести список заведующих кафедрами и их зарплаты, и степень.
SELECT 
    С.Фамилия AS Заведующий,
    С.Зарплата,
    П.Степень
FROM Сотрудник С
INNER JOIN Зав_кафедрой З ON С.Таб_номер = З.Таб_номер
INNER JOIN Преподаватель П ON С.Таб_номер = П.Таб_номер
WHERE С.Должность LIKE '%зав. кафедрой%';

--6.9 Вывести список профессоров.
SELECT 
    С.Таб_номер,
    С.Фамилия,
    С.Должность,
    П.Звание,
    П.Степень
FROM Сотрудник С
INNER JOIN Преподаватель П ON С.Таб_номер = П.Таб_номер
WHERE П.Звание = 'профессор';

--6.10 Вывести название дисциплины, фамилию, должность и степень преподавателя, дату и место проведения экзаменов в хронологическом порядке в заданном интервале даты.
SELECT DISTINCT
    Д.Название AS Дисциплина,
    С.Фамилия,
    С.Должность,
    П.Степень,
    Э.Дата,
    Э.Аудитория
FROM Экзамен Э
INNER JOIN Дисциплина Д ON Э.Код = Д.Код
INNER JOIN Сотрудник С ON Э.Таб_номер = С.Таб_номер
INNER JOIN Преподаватель П ON Э.Таб_номер = П.Таб_номер
WHERE Э.Дата BETWEEN '2015-06-05' AND '2015-06-15'
ORDER BY Э.Дата;

--6.11 Вывести фамилию преподавателей, принявших более трех экзаменов.
SELECT 
    С.Фамилия,
    COUNT(Э.Дата) AS [Количество экзаменов]
FROM Экзамен Э
INNER JOIN Сотрудник С ON Э.Таб_номер = С.Таб_номер
GROUP BY С.Фамилия
HAVING COUNT(Э.Дата) > 3;

--6.12 Вывести список студентов, не сдавших ни одного экзамена в указанной дате (например, в дату '05.06.2015').
SELECT 
    С.Рег_номер,
    С.Фамилия
FROM Студент С
WHERE С.Рег_номер NOT IN (
    SELECT Э.Рег_номер 
    FROM Экзамен Э 
    WHERE Э.Дата = '05.06.2015'
);