BD-1st-2.4-lab7.tresc-1.1-Slajd30
Tworzenie relacji przez podzapytanie
Polecenie CREATE TABLE tworzące relację można rozbudować o możliwość podania zapytania, którego wyniki posłużą do wypełnienia nowo utworzonej relacji. W tej wersji polecenia CREATE TABLE, na liście atrybutów nie podajemy typów atrybutów, a jedynie wartości domyślne i ograniczenia integralnościowe. Zapytanie wypełniające relację jest podawane po słowie kluczowym AS za listą atrybutów. Jeżeli wynik zapytania nie spełnia ograniczeń integralnościowych zdefiniowanych na liście atrybutów, próba utworzenia relacji kończy się błędem. Ogólną składnię rozbudowanego polecenia przedstawiono na przykładzie (1). Ważne jest tutaj, aby liczba atrybutów w relacji wynikowej zapytania była taka sama jak liczba wyrażeń zdefiniowanych w klauzuli SELECT. Rozważmy przykład (2). Przykład ten przedstawia polecenie tworzące relację ROCZNE_PLACE z atrybutami NAZWISKO (z ograniczeniem „klucz podstawowy”), ETAT i PLACA, i zapisujące do tej relacji wynik zapytania, które zwraca nazwisko, etat i roczną płacę wszystkich pracowników.
Możliwe jest również pominięcie listy atrybutów i podanie tylko zapytania. Wówczas tworzona jest relacja z atrybutami o nazwach i typach takich jakie są zawarte w relacji wynikowej zapytania. Przykładowo, wersja polecenia z przykładu (2), w której nie definiuje się listy atrybutów wygląda następująco:
CREATE TABLE roczne_place
AS SELECT nazwisko, etat, 12 * (placa_pod + NVL(placa_dod,0)) as placa
FROM pracownicy;
Oczywiście, w tej wersji polecenia CREATE TABLE nie jest możliwe definiowanie ograniczeń integralnościowych. Możliwe jest jednak późniejsze ich dodanie za pomocą polecenia ALTER TABLE opisanego na kolejnych slajdach.