zabika.ru 1

Пример запроса на базе данных

SELECT СТУДЕНТЫ.ФАМИЛИЯ, ДИСЦИПЛИНЫ.НАЗВАНИЕ, УСПЕВАЕМОСТЬ.ОЦЕНКА

FROM СТУДЕНТЫ INNER JOIN

(ДИСЦИПЛИНЫ INNER JOIN
УСПЕВАЕМОСТЬ ON

ДИСЦИПЛИНЫ.НОМЕР_ДИСЦИПЛИНЫ = УСПЕВАЕМОСТЬ.НОМЕР_ДИСЦИПЛИНЫ)

ON СТУДЕНТЫ.НОМЕР_СТУДЕНТА = УСПЕВАЕМОСТЬ.НОМЕР_СТУДЕНТА;

1. Вывести список студентов, сдавших все запланированные учебным планам дисциплины


  1. Посчитать количество сданных экзаменов (кто сколько сдал экзаменов)


Исходные данные берем из 2-х таблиц СТУДЕНТЫ и УСПЕВАЕМОСТЬ


Основной запрос из таблицы СТУДЕНТЫ: выбираем Фамилию и количество оценок из таблицы успеваемости в подзапросе

SELECT

ФАМИЛИЯ,

(
Подзапрос_из_таблицы_УСПЕВАЕМОСТЬ) AS [КолвоСданныхЭкзаменов]

FROM
СТУДЕНТЫ
Добавляем подзапрос из таблицы успеваемость:
SELECT ФАМИЛИЯ,

(SELECT COUNT(
*) FROM УСПЕВАЕМОСТЬ

WHERE
ОЦЕНКА > 2 AND

УСПЕВАЕМОСТЬ.НОМЕР_СТУДЕНТА = СТУДЕНТЫ.НОМЕР_СТУДЕНТА)


AS [
КолвоСданныхЭкзаменов]

FROM
СТУДЕНТЫ



2. Выяснить у студента его специальность

SELECT СТУДЕНТЫ.ФАМИЛИЯ, СПЕЦИАЛЬНОСТИ.КОД_СПЕЦИАЛЬНОСТИ

FROM
СПЕЦИАЛЬНОСТИ

INNER JOIN


(ГРУППЫ INNER JOIN
СТУДЕНТЫ ON

ГРУППЫ.НОМЕР_ГРУППЫ = СТУДЕНТЫ.НОМЕР_ГРУППЫ) ON СПЕЦИАЛЬНОСТИ.КОД_СПЕЦИАЛЬНОСТИ = ГРУППЫ.КОД_СПЕЦИАЛЬНОСТИ;

3. Посчитать, сколько экзаменов сдать на этой специальность

Задание 2.

Вывести список студентов, с указанием количества экзаменов по учебному плану для каждого.
1. Получаем таблицу кодов специальностей с количеством экзаменов (дисциплин)

SELECT КОД_СПЕЦИАЛЬНОСТИ, Count(*) AS КолвоЭкзаменов FROM

УЧЕБНЫЕ_ПЛАНЫ

GROUP BY КОД_СПЕЦИАЛЬНОСТИ


2. Получаем таблицу студентов и их специальностей

SELECT Фамилия, Имя, Отчество,

(SELECT КОД_СПЕЦИАЛЬНОСТИ FROM ГРУППЫ WHERE ГРУППЫ.НОМЕР_ГРУППЫ = СТУДЕНТЫ.НОМЕР_ГРУППЫ) AS КОД_СПЕЦИАЛЬНОСТИ

FROM СТУДЕНТЫ



Пересекаем 2 таблицы LEFT JOIN
SELECT Фамилия, Имя, Отчество, КолвоЭкзаменов

FROM

( SELECT

Фамилия,

Имя,

Отчество,

(SELECT КОД_СПЕЦИАЛЬНОСТИ FROM ГРУППЫ

WHERE ГРУППЫ.НОМЕР_ГРУППЫ = СТУДЕНТЫ.НОМЕР_ГРУППЫ) AS

КОД_СПЕЦИАЛЬНОСТИ

FROM СТУДЕНТЫ ) AS T1

LEFT JOIN

( SELECT КОД_СПЕЦИАЛЬНОСТИ, Count(*) AS КолвоЭкзаменов

FROM УЧЕБНЫЕ_ПЛАНЫ

GROUP BY КОД_СПЕЦИАЛЬНОСТИ ) AS T2

ON T1.КОД_СПЕЦИАЛЬНОСТИ = T2.КОД_СПЕЦИАЛЬНОСТИ


Более короткое решение:
SELECT Фамилия, Имя, Отчество, КоличествоЭкзаменов

FROM

СТУДЕНТЫ

LEFT JOIN

(SELECT НОМЕР_ГРУППЫ, count(*) AS КоличествоЭкзаменов

FROM

ГРУППЫ INNER JOIN УЧЕБНЫЕ_ПЛАНЫ


ON ГРУППЫ.КОД_СПЕЦИАЛЬНОСТИ = УЧЕБНЫЕ_ПЛАНЫ.КОД_СПЕЦИАЛЬНОСТИ

GROUP BY НОМЕР_ГРУППЫ) AS КолвоЭкзаменовДляГруппы

ON СТУДЕНТЫ.НОМЕР_ГРУППЫ = КолвоЭкзаменовДляГруппы.НОМЕР_ГРУППЫ
SELECT СТУДЕНТЫ.ФАМИЛИЯ, COUNT(*) AS КоличествоЭкзаменов

FROM

УЧЕБНЫЕ_ПЛАНЫ,

ГРУППЫ INNER JOIN

СТУДЕНТЫ ON ГРУППЫ.НОМЕР_ГРУППЫ = СТУДЕНТЫ.НОМЕР_ГРУППЫ

WHERE УЧЕБНЫЕ_ПЛАНЫ.КОД_СПЕЦИАЛЬНОСТИ = ГРУППЫ.КОД_СПЕЦИАЛЬНОСТИ

GROUP BY СТУДЕНТЫ.ФАМИЛИЯ



5.

SELECT * FROM

(SELECT СПЕЦИАЛЬНОСТИ.НАЗВАНИЕ_СПЕЦИАЛЬНОСТИ,

(SELECT COUNT(*) FROM ГРУППЫ WHERE ГРУППЫ.КОД_СПЕЦИАЛЬНОСТИ = СПЕЦИАЛЬНОСТИ.КОД_СПЕЦИАЛЬНОСТИ) AS КолвоГрупп

FROM СПЕЦИАЛЬНОСТИ)

WHERE КолвоГрупп = (SELECT MAX(КолвоГрупп) AS МаксКолвоГрупп FROM

(SELECT (SELECT COUNT(*) FROM ГРУППЫ WHERE ГРУППЫ.КОД_СПЕЦИАЛЬНОСТИ = СПЕЦИАЛЬНОСТИ.КОД_СПЕЦИАЛЬНОСТИ) AS КолвоГрупп

FROM СПЕЦИАЛЬНОСТИ))

SELECT * FROM ПРЕПОДАВАТЕЛИ

WHERE ЗАРПЛАТА =

(SELECT MIN(ЗАРПЛАТА) FROM ПРЕПОДАВАТЕЛИ

WHERE ПОДЧИНЯЕТСЯ = (SELECT НОМЕР_ПРЕПОДАВАТЕЛЯ FROM ПРЕПОДАВАТЕЛИ WHERE ФАМИЛИЯ = 'Абдулов'))

AND ПОДЧИНЯЕТСЯ = (SELECT НОМЕР_ПРЕПОДАВАТЕЛЯ FROM ПРЕПОДАВАТЕЛИ WHERE ФАМИЛИЯ = 'Абдулов');