upd lab2
This commit is contained in:
Binary file not shown.
@@ -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()`.
|
||||
|
||||
Reference in New Issue
Block a user