Практическое занятие № 4

Тема: Выборка данных из нескольких таблиц.

Цель работы: получить практические навыки по выборке данных из нескольких таблиц одновременно, по группировке выбранных данных в запросах

 

Ход работы

 

Пусть имеется БД "dbase" в формате SQL Server.  Данная БД состоит из 6 таблиц со следующей структурой:

 

Таблицы связаны так:

 

Главная таблица Подчиненная таблица Поле для связи Тип связи
otdelen spec id_otd 1 :
spec grupy id_spec 1 :
grupy students id_grup 1 :
students ocenki id_stud 1 :
predmety ocenki id_predmet 1 :

 

 

Выполните подключение БД к серверу.

 

Указания: разархивируйте архив.

Запустите утилиту "Microsoft SQL Server Management Studio", пройдите регистрацию введя информацию: Параметры подлинности = Проверка подлинности SQL Server, Имя пользователя=sa, пароль=111 (у Вас может быть свой пароль).

В дереве объектов вызовите контекстное меню папки "Базы данных" и выберите команду "Присоединить". В правой части появится окно, в котором с помощью кнопки "Добавить" укажите файл из архива и щелкните ОК.

В результате у вас на сервере будет зарегистрирована новая БД.

Для создания запроса выберите в левой части нужную БД и щелкните на кнопке "Создать запрос"   В правой части окна введите текст запроса.

 

 Для выполнения запроса щелкните на кнопке "Выполнить" . В нижней части окна отобразится набор отобранных данных.

 

Группировка данных по одной таблице (для повторения прошлой темы)

 

Запрос 1. Определите количество парней и девушек по всему учебному заведению.

 

Запрос 2. Определите количество парней и девушек по всему учебному заведению, которые учатся на бюджетной основе.

 

Запрос 3. Определите сколько имен имеется в таблице и сколько студентов имеют эти имена

.

 

Группировка данных по нескольким таблицам

 

Запрос 4. Для каждой группы подсчитать количество студентов в ней.

 

Группировка данных с выбором по группам

 

Запрос 5. Вывести список групп, у которых количество студентов больше 20 человек.

 

Отбор данных по множеству таблиц

 

Запрос 6. Выведите специальность, группу, ФИО студентов (отбор по трем таблицам). Отсортируйте результат по группе и фамилии.

 

Запрос 7. Выведите фамилию, имя, название предмета и оценку всех студентов (отбор по трем таблицам). Отсортируйте результат по фамилии и предмету.

 

Запрос 8. Измените предыдущий запрос так, чтобы  отобразился список всех студентов, даже тех, у которых нет оценок.

 

Запрос 9. Выведите ФИО и средний балл каждого студента. Отсортировать по фамилии.

 

Запрос 10. Измените предыдущий запрос. Выведите ФИО и средний балл каждого студента, включая тех, у кого нет оценок.

 

Запрос 11. Определите, сколько студентов по техникуму сдали физику на 5 (отбор по трем таблицам).

 

Запрос 12. Определите средний балл мальчиков и девочек по каждой группе (средний балл считается по оценкам из таблицы ocenki) (отбор по 3 таблицам).

 

Запрос 13. Определите средний балл мальчиков и девочек по каждой группе, которые учатся на контрактной основе (средний балл считается по оценкам из таблицы ocenki) (отбор по 3 таблицам).

 

Запрос 14. Определите средний балл студентов, которые учатся на бюджетной основе и по контракту. Округлите результат до двух знаков. (средний балл считается по оценкам из таблицы ocenki) (отбор по 2 таблицам).

 

Запрос 15. Для каждого отделения определить количество студентов (отбор по 4 таблицам).

 

Запрос 16. Для каждого отделения определить количество студентов обучающихся на бюджетной и контрактной форме обучения (отбор по 4 таблицам)

.

Запрос 17. Для каждой группы выведите средний балл по каждому предмету (отбор по 4 таблицам). Отсортировать по группе и предмету.

 

Запрос 18. Для каждого предмета определите средний балл в каждой группе (отбор по 3 таблицам). Отсортировать по предмету и группе.

 

Запрос 19. Определите средний балл студентов по каждому предмету (отбор по 2 таблицам).

.

Запрос 20. Для каждого предмета определите сколько студентов учатся на 4 и выше (отбор по 3 таблицам).

 

 

Выполнение работы

 

Запрос 1.

 

Указания: в правой части окна запроса введите команду

 

select pol,

       count(*) as kol_stud

from students

group by pol;

 

Для выполнения запроса щелкните на команде Выполнить. Если запрос выполнен верно, то в нижней части окна вы увидите результат его работы.

 

Запрос 2.

 

Указания: в правой части окна запроса перейдите на закладку "Редактор" и введите команду

 

select pol,

       count(*) as kol_stud

from students

where finance like 'Госзаказ'

group by pol;

 

Запрос 3.

 

Указания: введите команду

 

select imya,

       count(*) as kol_stud

from students

group by imya;

 

Запрос 4.

 

Указания: введите команду

 

select nazv_grup,

       count(id_stud) as kol_stud

from grupy inner join students on grupy.id_grup=students.id_grup

group by nazv_grup;

 

Запрос 5.

 

Указания: введите команду

 

select nazv_grup,

       count(id_stud) as kol_stud

from grupy inner join students on grupy.id_grup=students.id_grup

group by nazv_grup

having count(id_stud)>20;

 

Запрос 6.

 

Указания: введите команду

 

select nazv_spec, nazv_grup, fam, imya, otch

from spec inner join grupy on spec.id_spec = grupy.id_spec

          inner join students on grupy.id_grup = students.id_grup

order by nazv_grup, fam;

 

Запрос 7.

 

Указания: введите команду

 

select fam,

       imya,

       nazv_predmet,

       ocenka

from students inner join ocenki on students.id_stud=ocenki.id_stud

              inner join predmety on predmety.id_predmet=ocenki.id_predmet

order by fam, nazv_predmet;

 

Запрос 8.

 

Указания: для отображения всех студентов нужно связать таблицы операцией left outer join.

 

Введите команду

 

select fam,

       imya,

       nazv_predmet,

       ocenka

from students left outer join ocenki on students.id_stud=ocenki.id_stud

              left outer join predmety on predmety.id_predmet=ocenki.id_predmet

order by fam, nazv_predmet;

 

Запрос 9.

 

Указания: введите команду

 

select fam, imya, otch, avg(ocenka) as srbal

from grupy inner join students on grupy.id_grup = students.id_grup

           inner join ocenki on students.id_stud=ocenki.id_stud

group by fam, imya, otch

order by fam;

 

Запрос 10.

 

Указания: заменим тип связывания таблиц на left outer join:

 

select fam, imya, otch, avg(ocenka) as srbal

from grupy left outer join students on grupy.id_grup = students.id_grup

           left outer join ocenki on students.id_stud=ocenki.id_stud

group by fam, imya, otch

order by fam;

 

Запрос 11.

 

Указания: введите команду

 

select count(students.id_stud) as kol_stud

from students inner join ocenki on students.id_stud=ocenki.id_stud

              inner join predmety on predmety.id_predmet=ocenki.id_predmet

where nazv_predmet = 'Физика' and ocenka=5;

 

Запрос 12.

 

Указания: введите команду

 

select nazv_grup,

       pol,

       avg(ocenka) as srbal

from grupy inner join students on grupy.id_grup=students.id_grup

           inner join ocenki on students.id_stud=ocenki.id_stud

group by nazv_grup, pol;

 

Запрос 13.

 

Указания: к предыдущему запросу добавляем условие where

 

select nazv_grup,

       pol,

       avg(ocenka) as srbal

from grupy inner join students on grupy.id_grup=students.id_grup

           inner join ocenki on students.id_stud=ocenki.id_stud

where finance = 'Контракт'

group by nazv_grup, pol;

 

Запрос 14.

 

Указания: введите команду

 

select finance,

       round(avg(ocenka),2) as sred_bal

from students inner join ocenki on students.id_stud=ocenki.id_stud

group by finance;

 

Запрос 15.

 

Указания: введите команду

 

select nazv_otd,

       count(id_stud) as kol_stud

from otdelen inner join spec on otdelen.id_otd=spec.id_otd

             inner join grupy on spec.id_spec=grupy.id_spec

             inner join students on grupy.id_grup=students.id_grup

group by nazv_otd;

 

Запрос 16.

 

Указания: введите команду

 

select nazv_otd,

       finance,

       count(id_stud) as kol_stud

from otdelen inner join spec on otdelen.id_otd=spec.id_otd

             inner join grupy on spec.id_spec=grupy.id_spec

             inner join students on grupy.id_grup=students.id_grup

group by nazv_otd, finance;

 

Запрос 17.

 

Указания: введите команду

 

select nazv_grup,

       nazv_predmet,

       round(avg(ocenka),2) as sredbal

from grupy inner join students on grupy.id_grup=students.id_grup

           inner join ocenki on students.id_stud=ocenki.id_stud

           inner join predmety on predmety.id_predmet=ocenki.id_predmet

group by nazv_grup, nazv_predmet

order by nazv_grup, nazv_predmet;

 

Запрос 18. Изменим порядок полей в запросе:

 

Указания: введите команду

 

select nazv_predmet,

       nazv_grup,

       round(avg(ocenka),2) as sredbal

from grupy inner join students on grupy.id_grup=students.id_grup

           inner join ocenki on students.id_stud=ocenki.id_stud

           inner join predmety on predmety.id_predmet=ocenki.id_predmet

group by nazv_predmet, nazv_grup

order by nazv_predmet, nazv_grup;

 

Запрос 19.

 

Указания: введите команду

 

select nazv_predmet,

       round(avg(ocenka),2) as sredbal

from predmety inner join ocenki on predmety.id_predmet = ocenki.id_predmet

group by nazv_predmet;

 

Запрос 20.

 

Указания: введите команду

 

select nazv_predmet,

       count(students.id_stud) as kol_stud

from students inner join ocenki on students.id_stud=ocenki.id_stud

              inner join predmety on predmety.id_predmet = ocenki.id_predmet

where ocenka>=4

group by nazv_predmet;

 

Скачайте исходную БД в формате MySQL.  Выполните все рассмотренные выше запросы в этой СУБД.

 

Указания: распакуйте архив. В архиве находится файл со скриптом БД.

 

Запустите утилиту EMS SQL Manager for MySQL. В правой части окна программы выберите команду "Выполнить SQL скрипт". В новом окне выберите команду "Выполнить скрипт из файла". В диалоговом окне укажите распакованный файл скрипта. Если появится окно регистрации, то укажите Пользовать=root, Пароль=111. Если такого окна не появилось, то нажимайте в окне ОК. Появится сообщение, что скрипт выполнен успешно и появится окно для регистрации БД. Перенесите ее в правую часть окна и нажмите ОК. В результате БД будет установлена, зарегистрирована и готова к работе.

В левой части окна можете открыть БД, просмотреть ее таблицы.

 

Для выполнения запросов в окне выполните команду "Инструменты - Показать редактор SQL". В результате в правой части окна откроется поле для ввода тестов запросов.

 

Скачайте исходную БД в формате SQLite.  Выполните все рассмотренные выше запросы в этой СУБД.

 

Указания: распакуйте. В архиве находится файл БД.

 

Запустите утилиту SQLIte Expert Pro. На панели инструментов щелкните на кнопке "Open Database" (вторая слева) и в диалоге открытия файла укажите распакованный файл БД. После подключения должен отобразится значок БД.

В правой части окна перейдите на закладку "SQL"В верхней части вводите текст запроса и нажимайте на кнопку "Execute SQL"Если в запросе нет ошибок, то в нижней части будет отображаться результат отбора.