Введение
В этой лабораторной работе вы научитесь работать с представлениями MySQL (MySQL views). Представление — это виртуальная таблица, основанная на результирующем наборе SQL-запроса. Представления полезны для упрощения сложных запросов, скрытия сложности данных и обеспечения уровня абстракции для доступа к данным. Вы научитесь создавать, обновлять, запрашивать и удалять представления MySQL.
Вы начнете с подключения к серверу MySQL, создания базы данных с именем company и ее заполнения таблицей employees. Затем вы создадите представление с именем sales_employees, которое будет фильтровать таблицу employees, чтобы отображать только сотрудников из отдела 'Sales'. Вы узнаете, как проверить структуру представления и запрашивать его как обычную таблицу.
Подключение к MySQL и создание базы данных/таблицы
На этом шаге вы подключитесь к серверу MySQL и настроите необходимую базу данных и таблицу для лабораторной работы. Это включает создание базы данных с именем company и таблицы employees внутри нее, заполненной некоторыми образцами данных.
Сначала откройте терминал в виртуальной машине LabEx. Вы должны уже находиться в каталоге ~/project.
Подключитесь к серверу MySQL от имени пользователя root. Поскольку у вас есть привилегии sudo, а пользователь root в MySQL настроен на использование плагина auth_socket, вы можете подключиться без пароля, используя sudo.
sudo mysql -u root
Теперь вы находитесь в оболочке MySQL. Приглашение изменится на mysql>.
В оболочке MySQL создайте базу данных с именем company:
CREATE DATABASE company;
Переключитесь на базу данных company, чтобы последующие команды выполнялись в пределах этой базы данных:
USE company;
Теперь создайте таблицу с именем employees для хранения информации о сотрудниках:
CREATE TABLE employees (
id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
salary DECIMAL(10, 2),
department VARCHAR(50)
);
Вставьте некоторые образцы данных в таблицу employees:
INSERT INTO employees (id, first_name, last_name, salary, department) VALUES
(1, 'John', 'Doe', 60000.00, 'Sales'),
(2, 'Jane', 'Smith', 75000.00, 'Marketing'),
(3, 'Robert', 'Jones', 50000.00, 'Sales'),
(4, 'Emily', 'Brown', 80000.00, 'Engineering'),
(5, 'Michael', 'Davis', 65000.00, 'Marketing');
Вы можете проверить данные в таблице employees, выбрав все строки:
SELECT * FROM employees;
Вывод должен показать вставленные данные о сотрудниках:
+----+------------+-----------+----------+-------------+
| id | first_name | last_name | last_name | department |
+----+------------+-----------+----------+-------------+
| 1 | John | Doe | 60000.00 | Sales |
| 2 | Jane | Smith | 75000.00 | Marketing |
| 3 | Robert | Jones | 50000.00 | Sales |
| 4 | Emily | Brown | 80000.00 | Engineering |
| 5 | Michael | Davis | 65000.00 | Marketing |
+----+------------+-----------+----------+-------------+
5 rows in set (0.00 sec)
Вы успешно подключились к MySQL, создали базу данных и заполнили таблицу данными.
Создание представления
На этом шаге вы создадите представление на основе таблицы employees. Представление — это сохраненный SQL-запрос, который действует как виртуальная таблица. Оно само по себе не хранит данные, а представляет данные из одной или нескольких базовых таблиц.
Вы должны по-прежнему находиться в оболочке MySQL, подключенной к базе данных company. Если нет, переподключитесь, используя sudo mysql -u root, а затем USE company;.
Мы создадим представление с именем sales_employees, которое будет отображать только сотрудников, работающих в отделе 'Sales'. Это представление будет выбирать определенные столбцы из таблицы employees.
CREATE VIEW sales_employees AS
SELECT id, first_name, last_name, salary
FROM employees
WHERE department = 'Sales';
Это оператор определяет представление с именем sales_employees. Определение представления — это запрос SELECT, следующий за ключевым словом AS. Этот запрос выбирает столбцы id, first_name, last_name и salary из таблицы employees, но только для строк, где столбец department равен 'Sales'.
Чтобы убедиться, что представление было создано, вы можете вывести список таблиц и представлений в текущей базе данных:
SHOW TABLES;
Вы должны увидеть в списке как employees, так и sales_employees.
+-------------------+
| Tables_in_company |
+-------------------+
| employees |
| sales_employees |
+-------------------+
2 rows in set (0.00 sec)
Вы также можете описать структуру представления, точно так же, как вы бы сделали это для таблицы:
DESCRIBE sales_employees;
Это покажет столбцы, включенные в представление:
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| id | int | NO | | NULL | |
| first_name | varchar(50) | YES | | NULL | |
| last_name | varchar(50) | YES | | NULL | |
| salary | decimal(10,2) | YES | | NULL | |
+------------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
Вы успешно создали представление с именем sales_employees.
Запрос данных с использованием представления
На этом шаге вы научитесь запрашивать данные с использованием созданного вами представления sales_employees. Представления можно запрашивать так же, как и обычные таблицы, предоставляя упрощенный способ доступа к определенным подмножествам данных.
Вы должны по-прежнему находиться в оболочке MySQL, подключенной к базе данных company. Если нет, переподключитесь, используя sudo mysql -u root, а затем USE company;.
Чтобы получить все данные из представления sales_employees, используйте стандартный оператор SELECT:
SELECT * FROM sales_employees;
Этот запрос выполняет базовый оператор SELECT, определенный в представлении, и возвращает результат. Вы должны увидеть только сотрудников из отдела 'Sales':
+------+------------+-----------+----------+
| id | first_name | last_name | salary |
+------+------------+-----------+----------+
| 1 | John | Doe | 60000.00 |
| 3 | Robert | Jones | 50000.00 |
+------+------------+-----------+----------+
2 rows in set (0.00 sec)
Вы также можете применять дополнительную фильтрацию или сортировку к данным, полученным из представления. Например, чтобы найти сотрудника отдела продаж с зарплатой выше 55000:
SELECT * FROM sales_employees WHERE salary > 55000;
Это вернет только те строки из представления, где зарплата больше 55000:
+------+------------+-----------+----------+
| id | first_name | last_name | salary |
+------+------------+-----------+----------+
| 1 | John | Doe | 60000.00 |
+------+------------+-----------+----------+
1 row in set (0.00 sec)
Вы также можете выбирать определенные столбцы из представления:
SELECT first_name, last_name FROM sales_employees;
Это отобразит только имена и фамилии сотрудников отдела продаж:
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| John | Doe |
| Robert | Jones |
+------------+-----------+
2 rows in set (0.00 sec)
Запрос представления по сути такой же, как и запрос таблицы, но представление предоставляет предопределенный фильтр и выборку столбцов из исходного источника данных.
Обновление определения представления с помощью ALTER VIEW
На этом шаге вы научитесь изменять определение существующего представления с помощью оператора ALTER VIEW. Это полезно, когда вам нужно изменить столбцы, включенные в представление, или критерии фильтрации.
Вы должны по-прежнему находиться в оболочке MySQL, подключенной к базе данных company. Если нет, переподключитесь, используя sudo mysql -u root, а затем USE company;.
В настоящее время представление sales_employees включает id, first_name, last_name и salary. Давайте изменим представление, чтобы оно также включало столбец department.
ALTER VIEW sales_employees AS
SELECT id, first_name, last_name, salary, department
FROM employees
WHERE department = 'Sales';
Этот оператор использует ALTER VIEW, за которым следует имя представления и новый запрос SELECT, определяющий представление. Новый запрос теперь включает столбец department.
Чтобы проверить, было ли представление обновлено, опишите его снова:
DESCRIBE sales_employees;
Теперь вы должны увидеть столбец department в выводе:
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| id | int | NO | | NULL | |
| first_name | varchar(50) | YES | | NULL | |
| last_name | varchar(50) | YES | | NULL | |
| salary | decimal(10,2) | YES | | NULL | |
| department | varchar(50) | YES | | NULL | |
+------------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
Запросите обновленное представление, чтобы увидеть новый столбец:
SELECT * FROM sales_employees;
Вывод теперь будет включать столбец department:
+------+------------+-----------+----------+------------+
| id | first_name | last_name | salary | department |
+------+------------+-----------+----------+------------+
| 1 | John | Doe | 60000.00 | Sales |
| 3 | Robert | Jones | 50000.00 | Sales |
+------+------------+-----------+----------+------------+
2 rows in set (0.00 sec)
Вы успешно обновили определение представления sales_employees.
Удаление представления и очистка
На этом заключительном шаге вы научитесь удалять (дропать) представление и очищать базу данных и таблицу, созданные в ходе этой лабораторной работы.
Вы должны по-прежнему находиться в оболочке MySQL, подключенной к базе данных company. Если нет, переподключитесь, используя sudo mysql -u root, а затем USE company;.
Чтобы удалить представление sales_employees, используйте оператор DROP VIEW:
DROP VIEW sales_employees;
Эта команда безвозвратно удаляет представление sales_employees из базы данных company.
Чтобы подтвердить, что представление было удалено, вы можете попытаться описать его:
DESCRIBE sales_employees;
Это должно привести к сообщению об ошибке, указывающему, что представление не существует:
ERROR 1146 (42S02): Table 'company.sales_employees' doesn't exist
Теперь давайте очистим таблицу employees и базу данных company.
Удалите таблицу employees:
DROP TABLE employees;
Удалите базу данных company:
DROP DATABASE company;
Вы можете выйти из оболочки MySQL, набрав:
exit
Вы успешно удалили представление, таблицу и базу данных, очистив ресурсы, использованные в этой лабораторной работе.
Резюме
В этой лабораторной работе вы научились работать с представлениями MySQL. Вы начали с подключения к серверу MySQL и настройки базы данных и таблицы. Затем вы создали представление с именем sales_employees для предоставления отфильтрованного представления таблицы employees.
Вы практиковались в запросах к представлению с помощью операторов SELECT, демонстрируя, как представления упрощают доступ к данным. Вы также узнали, как изменять определение существующего представления с помощью оператора ALTER VIEW для включения дополнительных столбцов. Наконец, вы узнали, как удалять представление с помощью оператора DROP VIEW и очистили базу данных и таблицу.
Теперь вы понимаете основные концепции и операции для работы с представлениями MySQL, которые являются ценными инструментами для управления и доступа к данным в базе данных.



