БД_лабы(11 лаб, 5 семестр) / БД_ЛР3
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра Систем автоматизированного проектирования
отчет
по лабораторной работе №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-запросов, объединяющих данные из нескольких таблиц и выполняющих над ними различные операции обработки.
