Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
24.01.2026
Размер:
194.13 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра Систем автоматизированного проектирования

отчет

по лабораторной работе №3

по дисциплине «Базы Данных»

Тема: Выполнение запросов по нескольким таблицам

Студенты гр. 3352

________________

Гареева К.Р.

________________

Жигунова О.М.

Преподаватель

________________

Горяинов С.В.

Санкт-Петербург

2025

Цель работы

Научиться соединять данные из нескольких таблиц.

Ход работы

Упражнение 1 - создание списка почтовой рассылки с использованием оператора “JOIN”.

Запрос 1:

SELECT

CONCAT(m.firstname, ' ',

m.middleinitial, ' ',

m.lastname) AS name,

a.street,

a.city,

a.state,

a.zip

FROM member AS m

JOIN adult AS a

ON m.member_no = a.member_no;

Функция CONCAT собирает ФИО в одну строку. Предложение JOIN связывает таблицы member и adult по общему ключу, а именно по совпадающему member_no (рис. 1).

Рисунок 1 - Результат выполнения 1-го запроса.

Упражнение 2 - объединение нескольких таблиц и сортировка результатов.

Запрос 2:

SELECT

c.isbn, c.copy_no, c.on_loan,

t.title,

i.translation, i.cover

FROM copy AS c

INNER JOIN title AS t

ON c.title_no = t.title_no

INNER JOIN item AS i

ON c.isbn = i.isbn

WHERE c.isbn IN (1, 500, 1000)

ORDER BY c.isbn ASC;

Выбираем поля из трёх таблиц. Соединяем copy с title через title_no, copy с item через isbn с помощью FROM … INNER JOIN … Ограничиваем результат строками, где ISBN равен 1, 500 или 1000 и сортируем результат по ISBN по возрастанию (рис. 2).

Рисунок 2 - Результат выполнения 2-го запроса.

Упражнение 3 - Объединение таблиц с использованием OUTER JOIN.

Запрос 3:

SELECT

CONCAT (m.lastname + ' ' + m.firstname + ' ' + m.middleinitial, '') AS name,

m.member_no, r.isbn,

CONVERT(CHAR(8), r.log_date, 0) AS date

FROM member AS m

LEFT OUTER JOIN reservation AS r

ON m.member_no = r.member_no

WHERE m.member_no IN (250, 341, 1675)

ORDER BY m.member_no;

Запрос выводит информацию о трёх читателях (с номерами 250, 341 и 1675) и их бронированиях книг. Поле даты бронирования преобразуется в символьный формат с использованием стиля 0. Таблица member соединяется с таблицей reservation с помощью операции LEFT OUTER JOIN по полю member_no. В результат попадут все выбранные читатели, даже если у них нет записей о бронировании (рис. 3).

Рисунок 3 - Результат выполнения 3-го запроса.

Упражнение 4 - Использование оператора UNION для соединения результирующих наборов

Запрос 4:

SELECT

a.member_no,

COUNT(j.member_no) AS numkids

FROM adult AS a

INNER JOIN juvenile AS j

ON a.member_no = j.adult_member_no

WHERE a.state = 'AZ'

GROUP BY a.member_no

HAVING COUNT(j.member_no) > 2;

Считаем с помощью агрегатной функции COUNT, сколько у взрослого детей зарегистрировано в библиотеке, берём только тех взрослых, кто живёт в Аризоне, группируем по каждому читателю. По условие фильтрации для количества детей (больше 2) (рис. 4).

Рисунок 4 - Результат выполнения 4-го запроса.

Запрос 5:

SELECT

a.member_no,

COUNT(j.member_no) AS numkids

FROM adult AS a

INNER JOIN juvenile AS j

ON a.member_no = j.adult_member_no

WHERE a.state = 'AZ'

GROUP BY a.member_no

HAVING COUNT(j.member_no) > 2

UNION

SELECT

a.member_no,

COUNT(j.member_no) AS numkids

FROM adult AS a

INNER JOIN juvenile AS j

ON a.member_no = j.adult_member_no

WHERE a.state = 'CA'

GROUP BY a.member_no

HAVING COUNT(j.member_no) > 3;

Мы продублировали запрос и изменили нижнюю часть кода в соответствии с заданием. Между двумя запросами стоит оператор UNION, который объединяет таблицы в одну (рис. 5).

Рисунок 5 - Результат выполнения 5-го запроса.

Вывод:

В ходе выполнения лабораторной работы были изучены и применены различные виды соединений таблиц (INNER JOIN, LEFT OUTER JOIN) и операции объединения наборов данных (UNION). Были рассмотрены способы группировки и фильтрации данных с помощью предложений GROUP BY и HAVING, а также сортировка результатов при помощи ORDER BY. Кроме того, использовались функции CONCAT и CONVERT для объединения и преобразования данных, а также агрегатная функция COUNT для подсчёта записей. В результате работы были получены навыки составления сложных SQL-запросов, объединяющих данные из нескольких таблиц и выполняющих над ними различные операции обработки.

Соседние файлы в папке БД_лабы(11 лаб, 5 семестр)