This commit is contained in:
nik
2025-10-24 22:38:22 +03:00
parent ab5c2444e6
commit 1d68306e16
2 changed files with 28 additions and 74 deletions

Binary file not shown.

View File

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