Widok (VIEW) w relacyjnej bazie danych tworzy się w celu
CREATE TABLE ... AS SELECT. Widok nie przechowuje danych.SELECT, z którego korzysta się jak z tabeli, zawsze na aktualnych danych.CREATE INDEX. Widok wykonuje zapisane zapytanie przy każdym odczycie.Widok to zapisane w bazie zapytanie SELECT, które ma nazwę i używa się go tak jak tabeli. Sam nie przechowuje danych: za każdym razem, gdy ktoś z niego czyta, baza wykonuje zapisane zapytanie na aktualnych danych z tabel źródłowych.
Przykład: CREATE VIEW klienci_platynowi AS SELECT imie, nazwisko FROM klienci WHERE status = 'Platynowy';, a potem SELECT * FROM klienci_platynowi;. Widoki upraszczają powtarzane złożone zapytania z łączeniem tabel i pozwalają ukryć kolumny, np. pensje, nadając użytkownikowi prawo tylko do widoku. Usuwa się je poleceniem DROP VIEW, bez wpływu na dane w tabelach.
Listę widoków w bazie pokazuje SHOW FULL TABLES WHERE Table_type = 'VIEW';.
Każda błędna odpowiedź opisuje inny obiekt bazy. Trwała kopia danych powstaje np. przez CREATE TABLE kopia AS SELECT * FROM klienci;. Kopia od tej chwili żyje własnym życiem i nie widzi późniejszych zmian w tabeli źródłowej. Widok przeciwnie: zawsze pokazuje stan bieżący, bo niczego nie kopiuje.
Relacje między tabelami definiuje się kluczami obcymi, FOREIGN KEY ... REFERENCES .... Widok może łączyć tabele przez JOIN w swoim zapytaniu, ale nie tworzy powiązania w strukturze bazy i nie pilnuje spójności danych.
Przyspieszenie wyszukiwania daje indeks: CREATE INDEX idx_nazwisko ON klienci (nazwisko);. Widok nie przyspiesza zapytań, bo baza i tak wykonuje to samo zapytanie co bez niego. Jego zaletą jest wygoda i bezpieczeństwo, a nie wydajność.
Dobrze mieć w głowie podział: tabela przechowuje, indeks przyspiesza, klucz obcy wiąże, a widok pokazuje wynik zapytania.