Дополнительные статьи

Представления

Последнее обновление: 01.12.2021

Представления по сути представляют виртуальные таблицы. Но в отличии от стандартных таблиц представления содержат запросы, которые динамически извлекают используемые данные.

Представления предоставляют ряд преимуществ. Они упрощают комплексные SQL-операции. Они защищают данные, так как представления могут дать доступ к части таблицы, а не ко всей таблице. Представления также позволяют возвращать отформатированные значения из таблиц в нужной и удобной форме.

Для создания представления используется команда CREATE VIEW, которая имеет следующую форму:

CREATE VIEW [IF NOT EXISTS] название_представления [(столбец_1, столбец_2, ....)]
AS выражение_SELECT

Например, пусть у нас есть три связанных таблицы:

DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS products;
DROP TABLE IF EXISTS customers;
CREATE TABLE products
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    company TEXT NOT NULL,
    items_count INTEGER DEFAULT 0,
    price INTEGER
);

CREATE TABLE customers
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);
CREATE TABLE orders
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    product_id INTEGER NOT NULL,
    customer_id INTEGER NOT NULL,
	created_at TEXT NOT NULL,
    items_count INTEGER DEFAULT 1,
    price INTEGER NOT NULL,
    FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE,
    FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE
);

Пусть эти таблицы будут содержать следующие данные:

INSERT INTO products (name, company, items_count, price)
VALUES
('iPhone 13', 'Apple', 3, 76000),
('iPhone 12', 'Apple', 2, 51000),
('Galaxy S21', 'Samsung', 2, 56000),
('Galaxy S20', 'Samsung', 1, 41000),
('P40 Pro', 'Huawei', 5, 36000);

INSERT INTO customers(name) VALUES ('Tom'), ('Bob'),('Sam');

INSERT INTO orders (product_id, customer_id, created_at, items_count, price)
VALUES
( 
    (SELECT id FROM products WHERE name='Galaxy S21'),
    (SELECT id FROM customers WHERE name='Tom'),
    '2021-11-30', 
    2, 
    (SELECT price FROM products WHERE name='Galaxy S21')
),
( 
    (SELECT id FROM products WHERE name='iPhone 12'),
    (SELECT id FROM customers WHERE name='Tom'),
    '2021-11-29',  
    1, 
    (SELECT price FROM products WHERE name='iPhone 12')
),
( 
    (SELECT id FROM products WHERE name='iPhone 12'),
    (SELECT id FROM customers WHERE name='Bob'),
    '2021-11-29',  
    1, 
    (SELECT price FROM products WHERE name='iPhone 12')
);

Теперь добавим в базу данных, в которой содержатся данные таблицы, следующее представление:

CREATE VIEW IF NOT EXISTS orders_products_customers AS 
SELECT orders.created_at AS order_date, 
		customers.name AS customer,
		products.name As product  
FROM orders 
INNER JOIN products ON orders.product_id = products.id
INNER JOIN customers ON orders.customer_id = customers.id;

То есть данное представление фактически будет возвращать сводные данные из трех таблиц. И после его создания мы сможем его увидеть в узле Views у выбранной базы данных в SQL Server Management Studio:

Создание представлений с помощью команды CREATE View в SQLite

Теперь используем созданное выше представление для получения данных:

SELECT * FROM orders_products_customers;
Представления Views в SQLite

При создании представлений следует учитывать, что представления, как и таблицы, должны иметь уникальные имена в рамках той же базы данных.

Удаление представления

Для удаления представления вызывается команда DROP VIEW:

DROP VIEW IF EXISTS orders_products_customers;

Также стоит отметить, что при удалении таблиц также следует удалить и представления, которые используют эти таблицы.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850