БД_лабы(11 лаб, 5 семестр) / БД_ЛР1
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра Систем автоматизированного проектирования
отчет
по лабораторной работе №1
по дисциплине «Базы Данных»
Тема: Выполнение выборки из таблицы
Студентки гр. 3352 |
________________ |
Гареева К.Р. |
|
________________ |
Жигунова О.М. |
Преподаватель |
________________ |
Горяинов С.В. |
Санкт-Петербург
2025
Цель работы
Знакомство с командой SELECT и её опциями.
Ход выполнения
Упражнение 1 – извлечение данных из БД
Запрос 1:
SELECT title, title_no FROM title
Данный запрос с командой SELECT выводит таблицу с названиями книг и соответствующими идентификаторами. Предложение FROM указывает источник данных.
Напишем дополнительный запрос, который выводит дату и количество обработанных записей:
SELECT
GETDATE() AS [Текущая_дата_и_время],
@@ROWCOUNT AS [Количество_обработанных_записей];
В результате получаем таблицу с данными (рис. 1).
Рисунок 1 - Результат выполнения 1-го запроса
Запрос 2:
SELECT title, title_no
FROM title WHERE title_no = 10;
Предложение WHERE - это составная часть SELECT, которая находит и выводит название книги с номером 10 (рис. 2).
Рисунок 2 - Результат выполнения 2-го запроса
Запрос 3:
SELECT member_no, fine_assessed
FROM loanhist
WHERE fine_assessed <= 9 and fine_assessed >= 8;
Запрос выводит номера читательских билетов тех людей, у которых штраф от 8 до 9 долларов (рис. 3).
Рисунок 3 - Результат выполнения 3-го запроса
Запрос 4:
SELECT author, title_no
FROM title
WHERE author like 'Charles Dickens' or author like 'Jane Austen';
Выводятся только те записи, где значение в поле author точно совпадает со строкой Charles Dickens или Jane Austen (рис. 4).
Рисунок 4 - Результат выполнения 4-го запроса
Запрос 5:
SELECT title, title_no
FROM title
WHERE title like '%Adventures%';
Выбирает те записи, где значение в поле author встречается слово Adventures в любой части строки (рис. 5).
Рисунок 5 - Результат выполнения 5-го запрос.
Запрос 6:
SELECT member_no, fine_assessed, fine_paid
FROM loanhist
WHERE fine_paid is NULL;
Возвращает строки, содержащие NULL для поля с fine_paid (неоплаченным штрафом) (рис. 6).
Рисунок 6 - Результат выполнения 6-го запроса
Упражнение 2 - управления результирующими наборами
Опция DISTINCT
Запрос 7:
SELECT DISTINCT city, state FROM adult;
SELECT * FROM title ORDER BY title;
Показывает две таблицы: в первой название города и штата, где живет читатель; во второй - названия из столбца title, идущие по алфавиту с помощью ORDER BY. DISTINCT убирает дубликаты в указанном столбце (рис. 7).
Рисунок 7 - Результат выполнения 7-го запроса
Вычисление значений, применение псевдонимов для вычисляемых полей
Запрос 8.1:
SELECT member_no, isbn, fine_assessed
FROM loanhist
WHERE fine_assessed IS NOT NULL;
Выводит таблицу с номером читателя, книгой и суммой штрафа, при этом отбирает строки, где штраф был начислен (рис. 8.1).
Рисунок 8.1 - Результат выполнения запроса 8.1
Запрос 8.2:
SELECT member_no, isbn, fine_assessed * 2 as double_file
FROM loanhist
WHERE fine_assessed IS NOT NULL;
Выводит таблицу с номером читателя, книгой и суммой штрафа, умноженной на 2, при этом отбирает строки, где штраф был начислен (рис. 8.2).
Рисунок 8.2 - Результат выполнения запроса 8.2
3) Форматирование результирующего набора с помощью функций обработки строк
Запрос 9.1:
SELECT CONCAT_WS(' ', firstname, middleinitial, lastname)
FROM member
WHERE lastname like '%Anderson%';
CONCAT_WS пропускает строки, в которых какой-то аргумент равен NULL, объединяя имя, инициал и фамилию с пробелом между ними. При этом стоит условие выбора тех читателей, фамилия которых содержит Anderson (рис. 9.1).
Рисунок 9.1 - Результат выполнения запроса 9.1
Запрос 9.2:
SELECT CONCAT_WS(' ', firstname, middleinitial, lastname) as email_name
FROM member
WHERE lastname like '%Anderson%';
Выводит такую же таблицу, как в предыдущем запросе, только название столбца теперь - email_name (рис. 9.2).
Рисунок 9.2 - Результат выполнения запроса 9.2
Запрос 9.3:
SELECT LOWER(CONCAT_WS(' ', firstname, middleinitial, SUBSTRING(lastname, 1, 2))) as email_name
FROM member
WHERE lastname like '%Anderson%';
Выводит эту же таблицу с именами в нижнем регистре. Функция SUBSTRING берет фамилию и выводит первые две буквы (рис. 9.3).
Рисунок 9.3 - Результат выполнения запроса 9.3
4) Обработка символьных значений
Запрос 10.1:
SELECT title, title_no FROM title;
SELECT CONCAT('The title is:', title, ', title number ', title_no) FROM title;
Первый запрос выводит два столбика из title, второй запрос записывает подряд текст и значения в одну колонку. Во время выполнения запроса может возникнуть ошибка из-за числового типа title_no (рис. 10.1).
Рисунок 10.1 - Результат выполнения запроса 10.1
Запрос 10.2:
SELECT title, title_no FROM title;
SELECT CONCAT('The title is:', title, ', title number ', title_no) FROM title;
SELECT CONCAT('The title is:', title, ', title number ', CONVERT(VARCHAR, title_no)) FROM title;
Ошибка исключается за счет VARCHAR (рис. 10.2).
Рисунок 10.2 - Результат выполнения запроса 10.2
Упражнение 3 - Использование системных функций.
Запрос 11:
sp_who
Показывает список текущих подключений и процессов (рис. 11).
Рисунок 11 - Результат выполнения запроса 11
Запрос 12:
SELECT @@spid;
Возвращает идентификатор серверного процесса (рис. 12).
Рисунок 12 - Результат выполнения запроса 12
Запрос 13:
EXEC sp_who 53;
sp_who принимает параметр 53 и возвращает информацию только об этом процессе (если он существует) (рис. 13).
Рисунок 13 - Результат выполнения запроса 13
Запрос 14:
SELECT @@version
Возвращает строку с полной информацией о версии SQL Server: выпуск, номер сборки и тд (рис. 14).
Рисунок 14 - Результат выполнения запроса 14
Запрос 15:
SELECT USER_NAME(), DB_NAME(), @@servername
user_name показывает имя пользователя, от которого выполняется текущая сессия; db_name возвращает имя текущей базы данных; @@servername - имя машины (рис. 15).
Рисунок 15 - Результат выполнения запроса 15
Запрос 16:
USE library
SELECT *
FROM information_schema.tables Where table_type = 'base table'
Use library переключает контекст на library; information_schema.tables хранит информацию обо всех таблицах базы данных; base table отбирает пользовательские таблицы (рис. 16).
Рисунок 16 - Результат выполнения запроса 16
Вывод
В ходе выполнения лабораторной работы были изучены основные возможности команды SELECT и его предложений (FROM, WHERE, ORDER BY, DISTINCT), а также использование логических операторов для фильтрации данных. Были освоены приёмы управления результирующими наборами, применение псевдонимов и вычисляемых полей, а также функции обработки строк — CONCAT, CONCAT_WS, LOWER, SUBSTRING и функция приведения типов CONVERT. Изучены системные функции и переменные SQL Server (GETDATE(), @@ROWCOUNT, @@SPID, @@VERSION, USER_NAME(), DB_NAME(), @@SERVERNAME) и системная процедура sp_who, предназначенная для анализа подключений. Кроме того, был рассмотрен системный представление information_schema.tables, позволяющее получать информацию о структуре базы данных.
