Views

Geschätzte Lektüre: 4 Minuten 313 Ansichten

Views – Gespeicherte Abfragen

Ein View (auch Sicht) ist eine gespeicherte Abfrage, die wie eine virtuelle Tabelle verwendet werden kann. Ein View speichert keine Daten selbst, sondern stellt das Ergebnis einer SELECT-Abfrage bereit. Bei jedem Zugriff auf den View wird die zugrundeliegende Abfrage ausgeführt.

Views bieten mehrere Vorteile:

  • Wiederverwendbarkeit: Komplexe Abfragen werden einmal definiert und können mehrfach verwendet werden.
  • Sicherheit: Views können bestimmte Spalten oder Zeilen ausblenden (z. B. vertrauliche Kundendaten).
  • Abstraktion: Die zugrundeliegende Tabellenstruktur kann geändert werden, ohne dass Anwendungen, die auf dem View basieren, angepasst werden müssen.

Beispiel 1: View für die Umsatzübersicht pro Kunde

CREATE VIEW kunden_umsatz AS
SELECT 
    k.id,
    k.vorname,
    k.nachname,
    k.email,
    COUNT(DISTINCT b.id) AS anzahl_bestellungen,
    COALESCE(SUM(bp.menge * bp.einzelpreis), 0) AS gesamtumsatz
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunden_id
LEFT JOIN bestellpositionen bp ON b.id = bp.bestellung_id
GROUP BY k.id, k.vorname, k.nachname, k.email;

Nach der Ausführung dieses CREATE VIEW-Befehls können Sie den View wie eine normale Tabelle abfragen:

-- Alle Kunden mit Umsatz über 100 Euro
SELECT * FROM kunden_umsatz WHERE gesamtumsatz > 100;

-- Die umsatzstärksten Kunden
SELECT vorname, nachname, gesamtumsatz 
FROM kunden_umsatz 
ORDER BY gesamtumsatz DESC;

Beispiel 2: View für Bestelldetails

CREATE VIEW bestell_details AS
SELECT 
    b.id AS bestellung_id,
    b.bestelldatum,
    b.status,
    CONCAT(k.vorname, ' ', k.nachname) AS kunde,
    COUNT(bp.id) AS anzahl_positionen,
    SUM(bp.menge * bp.einzelpreis) AS gesamtwert
FROM bestellungen b
INNER JOIN kunden k ON b.kunden_id = k.id
LEFT JOIN bestellpositionen bp ON b.id = bp.bestellung_id
GROUP BY b.id, b.bestelldatum, b.status, k.vorname, k.nachname;

View entfernen:

DROP VIEW IF EXISTS kunden_umsatz;

Dieses Dokument teilen

Views

Oder Link kopieren

INHALT

Abonnieren

×
Cancel