← К оглавлению занятия

💻 Примеры

⚡ Кратко: примеры

  • Представление на все строки таблицы Employees.
  • Представление с ограниченным набором столбцов.
  • Представление с фильтром и вычисляемыми столбцами.
  • Использование WITH CHECK OPTION.

💻 Примеры

Исходная таблица Employees

CREATE TABLE Employees (
    EmployeeID INT AUTO_INCREMENT PRIMARY KEY,
    FirstName VARCHAR(50) NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    Department VARCHAR(50),
    City VARCHAR(50),
    Salary DECIMAL(10, 2),
    HireDate DATE
);

INSERT INTO Employees (FirstName, LastName, Department, City, Salary, HireDate)
VALUES ('Alice', 'Green', 'Sales', 'Berlin', 55000.00, '2022-03-15'),
       ('Bob', 'Smith', 'Engineering', 'Hamburg', 60000.00, '2023-07-01'),
       ('Charlie', 'Johnson', 'Sales', 'Berlin', 52000.00, '2021-11-20'),
       ('Diana', 'Williams', 'HR', 'Munich', 58000.00, '2020-05-10'),
       ('Edward', 'Brown', 'Engineering', 'Berlin', 61000.00, '2024-01-15');

Представление на все строки

CREATE VIEW All_Employees_View AS
SELECT * FROM Employees;

Представление с ограниченным набором столбцов

CREATE VIEW Employee_Names_View AS
SELECT EmployeeID, FirstName, LastName
FROM Employees;

Представление с фильтром

CREATE VIEW Berlin_Employees_View AS
SELECT EmployeeID, FirstName, LastName, Department, Salary
FROM Employees
WHERE City = 'Berlin';

Представление с вычисляемыми столбцами

CREATE VIEW Employee_Summary_View AS
SELECT
    EmployeeID,
    FirstName,
    LastName,
    Department,
    Salary,
    Salary * 12 AS Annual_Salary,
    CASE
        WHEN Salary >= 60000 THEN 'High'
        WHEN Salary >= 55000 THEN 'Medium'
        ELSE 'Low'
    END AS Salary_Level
FROM Employees;

Запрос к представлению

SELECT FirstName, LastName, Annual_Salary
FROM Employee_Summary_View
WHERE Salary_Level = 'High';

Представление с защитой от изменений

CREATE VIEW Berlin_Employees_Secure_View AS
SELECT * FROM Employees
WHERE City = 'Berlin'
WITH CHECK OPTION;

-- Ошибка: строка не попадает под условие WHERE
INSERT INTO Berlin_Employees_Secure_View (FirstName, LastName, City)
VALUES ('Frank', 'White', 'Hamburg');