SELECT s.*
FROM dbo.Student s
JOIN dbo.Specialization sp ON s.Номер = sp.Номер
JOIN dbo.Department d ON sp.Шифр = d.Шифр
WHERE d.Факультет = 'ит';
SELECT DISTINCT d.Факультет, d.Шифр, d.Название, e.Фамилия AS Фамилия_Заведующего
FROM dbo.Department d
JOIN dbo.Specialization sp ON d.Шифр = sp.Шифр
JOIN dbo.Employee e ON d.Шифр = e.Шифр AND e.Должность = 'зав. кафедрой';
SELECT e1.Таб_номер, e1.Фамилия, e2.Таб_номер AS Таб_номер_Шефа, e2.Фамилия AS Фамилия_Шефа
FROM dbo.Employee e1
LEFT JOIN dbo.Employee e2 ON e1.Шеф = e2.Таб_номер
WHERE e1.Должность <> 'зав. кафедрой' OR e1.Должность IS NULL;
-- Примечание: LEFT JOIN и условие WHERE корректно оставят поле пустым у топ-менеджмента / зав. кафедрами
SELECT s.Рег_номер, s.Фамилия, COUNT(ex.Код) AS Кол_во_сданных
FROM dbo.Student s
JOIN dbo.Exam1 ex ON s.Рег_номер = ex.Рег_номер
WHERE ex.Оценка >= 3
GROUP BY s.Рег_номер, s.Фамилия
HAVING COUNT(ex.Код) >= 2;
SELECT e.Таб_номер, e.Фамилия, e.Зарплата
FROM dbo.Employee e
JOIN dbo.Engineer1 eng ON e.Tab_номер = eng.Таб_номер
WHERE e.Зарплата < 20000;
SELECT DISTINCT s.Рег_номер, s.Фамилия
FROM dbo.Student s
JOIN dbo.Exam1 ex ON s.Рег_номер = ex.Рег_номер
WHERE ex.Аудитория = 'т505' AND ex.Оценка >= 3; -- Вместо 'т505' можно подставить любую аудиторию
SELECT s.Рег_номер, s.Фамилия,
SUM(CASE WHEN ex.Оценка >= 3 THEN 1 ELSE 0 END) AS Количество_сданных,
AVG(CAST(ex.Оценка AS FLOAT)) AS Средний_балл
FROM dbo.Student s
JOIN dbo.Exam1 ex ON s.Рег_номер = ex.Рег_номер
GROUP BY s.Рег_номер, s.Фамилия
HAVING AVG(CAST(ex.Оценка AS FLOAT)) >= 4.0;
SELECT e.Фамилия, e.Зарплата, t.Степень
FROM dbo.Employee e
JOIN dbo.Head_Department hd ON e.Таб_номер = hd.Таб_номер
LEFT JOIN dbo.Teacher t ON e.Таб_номер = t.Таб_номер;
-- LEFT JOIN используется на случай, если кто-то из зав.кафедрой отсутствует в таблице преподавателей
SELECT e.Таб_номер, e.Фамилия, t.Звание, t.Степень
FROM dbo.Employee e
JOIN dbo.Teacher t ON e.Таб_номер = t.Таб_номер
WHERE t.Звание = 'профессор';
SELECT disc.Название AS Дисциплина, e.Фамилия, e.Должность, t.Степень, ex.Дата, ex.Аудитория
FROM dbo.Exam1 ex
JOIN dbo.Discipline disc ON ex.Код = disc.Код
JOIN dbo.Employee e ON ex.Таб_номер = e.Таб_номер
LEFT JOIN dbo.Teacher t ON e.Таб_номер = t.Таб_номер
WHERE ex.Дата BETWEEN '2015-06-01' AND '2015-06-15' -- Интервал дат меняется при необходимости
ORDER BY ex.Дата ASC;
SELECT e.Фамилия, COUNT(*) AS Количество_принятых
FROM dbo.Employee e
JOIN dbo.Exam1 ex ON e.Таб_номер = ex.Таб_номер
GROUP BY e.Таб_номер, e.Фамилия
HAVING COUNT(*) > 3;
SELECT s.Рег_номер, s.Фамилия
FROM dbo.Student s
WHERE s.Рег_номер NOT IN (
SELECT ex.Рег_номер
FROM dbo.Exam1 ex
WHERE ex.Дата = '2015-06-05' AND ex.Оценка >= 3 -- Дата для примера взята из таблицы
);