Tabela Pracownicy zawiera dane pracowników z różnych działów, co określa pole liczbowe dzial. Ponieważ zazwyczaj są wykonywane kwerendy tylko na dziale równym 2, to można uprościć zapytania do tabeli, tworząc wirtualną tabelę o nazwie Prac_dzial2 za pomocą zapytania
A.
VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2;
B.
CREATE VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2;
C.
VIEW Prac_dzial2 SELECT FROM Pracownicy WHERE dzial=2;
D.
CREATE VIEW Prac_dzial2 AS SELECT * FROM Pracownicy WHERE dzial=2;
Pytanie z egzaminu CKE, styczeń 2023 (arkusz EE.09-SG-23.01).
Instrukcja CREATE VIEW Prac_dzial2 AS SELECT * FROM Pracownicy WHERE dzial=2; jest poprawna, bo dokładnie realizuje utworzenie widoku, czyli wirtualnej tabeli opartej na wyniku zapytania SELECT. W SQL widok nie przechowuje zwykle osobnej kopii danych, tylko zapamiętuje definicję zapytania. Dzięki temu można potem pisać prostsze zapytania, np. SELECT * FROM Prac_dzial2; zamiast za każdym razem dopisywać warunek WHERE dzial=2. To jest bardzo praktyczne, zwłaszcza gdy ten sam filtr pojawia się często w raportach, formularzach albo aplikacji webowej. Słowo CREATE oznacza utworzenie obiektu w bazie, VIEW wskazuje typ obiektu, AS łączy nazwę widoku z zapytaniem, a SELECT * FROM Pracownicy WHERE dzial=2 określa dane widoczne przez ten widok. Moim zdaniem to jeden z czytelniejszych mechanizmów SQL, bo poprawia porządek w bazie i zmniejsza ryzyko pomyłek przy powtarzaniu warunków. W praktyce branżowej warto jednak czasem zamiast SELECT * podać konkretne kolumny, bo jest to stabilniejsze przy zmianach struktury tabeli.
W tworzeniu widoku w SQL ważna jest pełna składnia polecenia, a nie tylko ogólna intuicja, że chodzi o tabelę i warunek WHERE. Widok jest obiektem bazy danych, dlatego jego definicja powinna zaczynać się od CREATE VIEW, bo bez CREATE serwer nie wie, że ma utworzyć nowy obiekt. Samo słowo VIEW nie jest wystarczającą instrukcją wykonywalną w standardowym SQL, nawet jeśli dla człowieka brzmi sensownie. Drugim częstym problemem jest pominięcie części AS SELECT. Widok musi być zbudowany na podstawie zapytania SELECT, ponieważ baza musi wiedzieć, jakie kolumny i rekordy mają być widoczne przez tę wirtualną tabelę. Zapis CREATE VIEW Prac_dzial2 FROM Pracownicy WHERE dzial=2 wygląda podobnie do fragmentu zapytania, ale brakuje w nim SELECT, czyli najważniejszej części pobierającej dane. Jeszcze gorzej, gdy pojawia się samo SELECT FROM bez listy kolumn, bo po SELECT trzeba wskazać kolumny, np. * albo konkretne nazwy pól. Typowy błąd myślowy polega tu na traktowaniu VIEW jak skróconej wersji SELECT-a. A to nie skrót, tylko definicja obiektu w schemacie bazy. Poprawny zapis musi więc zawierać pełną konstrukcję CREATE VIEW nazwa AS SELECT ... FROM ... WHERE ...; i dopiero wtedy można korzystać z widoku tak, jak z tabeli w kolejnych kwerendach.