diff --git a/labs/lab2/report.pdf b/labs/lab2/report.pdf index db4a250..9cd79ce 100644 Binary files a/labs/lab2/report.pdf and b/labs/lab2/report.pdf differ diff --git a/labs/lab2/report.typ b/labs/lab2/report.typ index 5264ac4..c6370fa 100644 --- a/labs/lab2/report.typ +++ b/labs/lab2/report.typ @@ -64,68 +64,36 @@ === Цель работы -Изучение и практическое освоение основных конструкций языка SQL для работы с реляционными базами данных, включая: +Изучение и освоение SQL для работы с реляционными базами данных, включая: -- Формирование запросов на выборку данных с использованием оператора `SELECT` +- Формирование запросов на выборку данных с оператором `SELECT` -- Применение предложений `WHERE` и `ORDER BY` для фильтрации и сортировки данных +- Применение `WHERE` и `ORDER BY` для фильтрации и сортировки данных -- Использование встроенных функций SQL для обработки числовых, символьных данных и дат +- Использование функций SQL для обработки данных - Работу с условными выражениями для формирования вычисляемых полей -- Получение навыков создания сложных запросов с применением различных операторов и функций SQL +- Получение навыков создания запросов с применением операторов и функций === Задачи, решаемые при выполнении работы -- Освоить базовые операции с таблицами: - - Изучить структуру таблиц базы данных - - Выполнить выборку данных из таблиц с использованием оператора SELECT - - Научиться задавать псевдонимы для столбцов - - Освоить сортировку данных с помощью предложения ORDER BY - -- Научиться фильтровать и ограничивать выборку данных: - - Применять предложение WHERE для фильтрации строк по различным условиям - - Использовать операторы сравнения и логические операторы - - Работать с диапазонами значений и списками - - Выполнять выборку уникальных значений с помощью DISTINCT - -- Освоить работу с числовыми функциями: - - Применять функции округления - - Выполнять арифметические операции над числовыми данными - - Создавать вычисляемые поля в результатах запросов - -- Изучить символьные функции: - - Использовать функции конкатенации строк - - Применять функции изменения регистра - - Работать с функциями определения длины строк - - Использовать функции поиска позиции символов - -- Освоить функции работы с датами: - - Выполнять операции с датами и временем - - Вычислять разницу между датами - - Извлекать компоненты дат - - Применять функции преобразования типов данных - -- Научиться использовать условные выражения: - - Применять функцию COALESCE для обработки NULL-значений - - Использовать конструкцию CASE для создания условной логики в запросах - - Формировать сложные вычисляемые поля с использованием условий - -- Развить навыки анализа и отладки SQL-запросов: - - Находить и исправлять синтаксические ошибки в запросах - - Оптимизировать структуру запросов для получения требуемых результатов - +- Изучить операции с таблицами. +- Научиться фильтровать и ограничивать данные. +- Освоить работу с числовыми функциями. +- Изучить символьные функции. +- Освоить функции работы с датами. +- Научиться использовать условные выражения. +- Развить навыки анализа и отладки SQL-запросов. === Исходные данные -Для выполнения практической работы используется учебная база данных `EmployeesDepartments`, содержащая информацию о сотрудниках компании и структуре отделов. - +Для выполнения используется база данных `EmployeesDepartments`. 1. Таблица `EMPLOYEES` -Содержит информацию о сотрудниках компании со следующими полями: +Содержит информацию о сотрудниках компании с полями: - `EMPLOYEE_ID` – идентификационный номер сотрудника (числовой) - `FIRST_NAME` – имя сотрудника (строковый) - `LAST_NAME` – фамилия сотрудника (строковый) @@ -140,7 +108,7 @@ 2. Таблица DEPARTMENTS -Содержит информацию об отделах компании со следующими полями: +Содержит информацию об отделах компании с полями: - `DEPARTMENT_ID` – идентификационный номер отдела (числовой) - `DEPARTMENT_NAME` – название отдела (строковый) - `MANAGER_ID` – идентификатор руководителя отдела (числовой) @@ -181,8 +149,8 @@ FROM "EmployeesDepartments"."EMPLOYEES" - Нет запятой перед `"SAL"`. - Использовать `*` вместо `x`. -- Неправильно задан псевдоним: нужен `AS` и, раз в псевдониме пробел, - кавычки (например `AS "ANNUAL SALARY"`). -- Неправильное название стобца: вместо `SAL` должно быть `SALARY`. +- Нужен `AS` и, раз в псевдониме пробел, - кавычки. +- Вместо `SAL` должно быть `SALARY`. Исправленная версия (Рис. 2): @@ -220,7 +188,7 @@ WHERE table_name = 'DEPARTMENTS' ORDER BY ordinal_position; ``` -Этот запрос извлекает данные таблицы `DEPARTMENTS` из представления `information_schema.columns`. +Извлекает данные таблицы `DEPARTMENTS` из представления `information_schema.columns`. - `column_name` — имя столбца; - `is_nullable` — может ли столбец содержать null; - `data_type` — тип данных столбца. @@ -284,7 +252,7 @@ ORDER BY ordinal_position; Этот запрос извлекает информацию о столбцах таблицы `EMPLOYEES`: - `Name` — имя столбца; -- `Null?` — может ли столбец содержать NULL; +- `Null?` — может ли столбец содержать null; - `Type` — тип данных столбца. Фильтрация по `table_schema` и `table_name` позволяет получить данные только для нужной таблицы. Сортировка по `ordinal_position` отображает столбцы в том порядке, в котором они были созданы в таблице. Результат запроса приведен на рисунке 5. @@ -324,7 +292,7 @@ ORDER BY "EMPLOYEE_ID"; - `JOB_ID` — код должности; - `HIRE_DATE` — дата найма. -Сортировка по `EMPLOYEE_ID` обеспечивает упорядоченный вывод. Использование точных имён столбцов с кавычками гарантирует корректное выполнение запроса в PostgreSQL с регистрозависимыми именами. Результат выполнения запроса представлен на рисунке 6. +Сортировка по `EMPLOYEE_ID` обеспечивает упорядоченный вывод. Результат выполнения запроса представлен на рисунке 6. #align(center)[ #figure( @@ -334,8 +302,6 @@ ORDER BY "EMPLOYEE_ID"; ) ] - - ===== 1.6 Составьте запрос для вывода неповторяющихся должностей из таблицы EMPLOYEES, результат должен соответствовать таблице 5. #align(center)[ @@ -1166,10 +1132,10 @@ FROM "EmployeesDepartments"."EMPLOYEES"; === Выводы и анализ результатов работы -В ходе выполнения работы были успешно освоены основные конструкции языка SQL для работы с реляционными базами данных. Все поставленные задачи выполнены, запросы составлены корректно и возвращают ожидаемые результаты. +В ходе выполнения работы освоены конструкции SQL для работы с реляционными базами данных. - Научился формировать запросы на выборку данных с использованием оператора `SELECT` - - Освоил использование предложений `WHERE` для фильтрации данных по различным условиям + - Освоил использование `WHERE` для фильтрации данных по различным условиям - Изучил применение `ORDER BY` для сортировки результатов запросов - Научился использовать `DISTINCT` для выборки уникальных значений - Освоил создание псевдонимов для столбцов с помощью `AS` @@ -1179,7 +1145,7 @@ FROM "EmployeesDepartments"."EMPLOYEES"; - Научился работать с `NULL` значениями через `IS NULL` и `IS NOT NULL` - Применил оператор `LIKE` для поиска по шаблону в текстовых данных - Освоил функции округления `ROUND()` для математических вычислений - - Научился выполнять арифметические операции в запросах (сложение, вычитание, умножение, деление) + - Научился выполнять арифметические операции в запросах - Создавал вычисляемые поля для расчёта новых значений на основе существующих данных - Применил функцию `CONCAT()` для объединения нескольких строковых значений - Использовал `INITCAP()` для форматирования текста с заглавной первой буквой @@ -1190,25 +1156,13 @@ FROM "EmployeesDepartments"."EMPLOYEES"; - Применил `EXTRACT()` для извлечения компонентов даты - Использовал функцию `AGE()` для вычисления разницы между датами - Научился форматировать даты с помощью `TO_CHAR()` для вывода дней недели - - Выполнил сложные вычисления с датами, такие как расчёт количества отработанных месяцев + - Выполнил сложные вычисления с датами - Освоил функцию `COALESCE()` для обработки `NULL` значений и замены их на заданные значения - - Применил конструкцию `CASE ... WHEN ... THEN ... ELSE ... END` для создания условной логики непосредственно в запросах - - Научился создавать сложные вычисляемые поля с использованием множественных условий - - Развил навыки поиска и исправления синтаксических ошибок в SQL-запросах - - Научился анализировать структуру таблиц через `information_schema.columns` - - Понял важность правильного использования кавычек для регистрозависимых имён в PostgreSQL - - Освоил методику пошаговой разработки сложных запросов - + - Применил конструкцию `CASE ... WHEN ... THEN ... ELSE ... END` для создания условной логики в запросах + - Научился создавать сложные поля с использованием множественных условий В процессе выполнения работы возникли следующие сложности: -- В PostgreSQL при создании объектов с кавычками имена становятся регистрозависимыми. Решение: последовательное использование двойных кавычек для всех идентификаторов таблиц и столбцов. - -- Особенности сравнения и обработки NULL потребовали использования специальных конструкций. Решение: изучение документации и применение соответствующих функций. - -- Получение названий дней недели на английском языке потребовало использования функции `TO_CHAR()` с правильным форматом. Решение: применение модификатора `FM` для удаления лишних пробелов. - -- Расчёт количества месяцев между датами потребовал комбинирования функций `AGE()` и `EXTRACT()`. Решение: декомпозиция задачи на вычисление отдельно лет и месяцев с последующим их объединением. - -В результате выполнения практической работы была достигнута поставленная цель: освоены основные конструкции SQL и получены практические навыки составления запросов различной сложности для работы с реляционными базами данных. +- При создании объектов с кавычками имена становятся регистрозависимыми. +- Получение названий дней недели на английском языке потребовало использования функции `TO_CHAR()`.