Erstellt eine View. Eine View ist eine “virtuelle Tabelle”.

CREATE VIEW produkte_view AS
SELECT ...
 
-- View anfragen
SELECT * FROM produkte_view
CREATE VIEW teure_produkte AS SELECT * FROM produkte WHERE preis > 10
 
SELECT * FROM teure_produkte WHERE hersteller = 'Monsterfood'
 
-- Wird ausgeführt als
SELECT * 
FROM (SELECT * FROM produkte WHERE preis > 10) 
WHERE hersteller = 'Monsterfood'

Explain

Gibt die optimierte Query zurück

EXPLAIN SELECT * FROM teure_produkte

Einsatz von Views: Vereinfachung, Datenunabhängigkeit (egal wie das interne Schema ist, die Anwendungen können einfach über die View zugreifen), Datenschutz (Man erlaubt nur Anfragen auf die Views zu für SIcherheit)

INSERT, UPDATE und DELETE sind auf simplen Projektion/Selektion-Views erlaubt

CHECK OPTION

Stellt sicher, dass beim ändern der Tabelle das WHERE-Prädikat erfüllt sein muss

CREATE VIEW teure_produkte AS 
SELECT * 
FROM produkte 
WHERE preis > 10
WITH CHECK OPTION
 
-- Sowas wäre nicht mehr möglich (Kosten 2 < 10):
INSERT INTO teure_produkte VALUES (100, 'Apfel', 2, NULL);

MATERIALIZED VIEW - Materialistische Schichten

Views sind nur virtuell, sie speichern nicht wirklich Daten. Materialized Views speichern jedoch tatsächlich das Ergebnis der Anfrage zum Anfragezeitpunkt. Um die Daten zu aktualisieren, müssen sie refreshed werden.

CREATE MATERIALIZED VIEW anz_produkte AS
SELECT COUNT(*) AS anz FROM produkte
 
REFRESH MATERIALIZED VIEW anz_produkte