Teraz już widać, żc w wierszach od 2) do 6) jest tworzony zbiór tych nazw studiów, które występują w relacji film, ale nie należą do relacji Studio. Dzięki umieszczeniu w wierszu 2) słowa kluczowego DISTINCT wiadomo, żc każde studio występuje w tworzonym zbiorze tylko jeden raz, bez względu na to, ile filmów zostało tam wyprodukowanych. W końcu elementy tego zbioru, uzupełnione wartościami NUIjL jako składowymi atrybutów adres i prezC#, są wstawiane dzięki poleceniu z wiersza 1) do relacji Studio.
Instrukcja usuwania składa się z:
1. słowa kluczowego DELETE FROM,
2. nazwy relacji, powiedzmy R,
3. słowa kluczowego WHERE oraz
4. warunku.
Synchronizacja wstawiania
Na rysunku 5.12 pokazano przykład, który doskonale ilustruje pewną subtelną cechę semantyki instrukcji SQL. W zasadzie przetwarzanie instrukcji z wierszy od 2) do 6) powinno zostać zakończone, zanim nastąpi wstawienie opisane w wierszu 1). Chodzi o to, żeby krotki dodawane do relacji studio nie zaburzyły warunku z wiersza 4). Jednakże ze względu na efektywność przetwarzania może się zdarzyć, żc każde nowe znalezione studio zostanie wstawione natychmiast po znalezieniu, w trakcie wykonywania instrukcji z wierszy od 2) do 6).
W tym konkretnym przykładzie nie ma znaczenia, czy nowe krotki są wstawiane natychmiast po znalezieniu, czy dopiero po znalezieniu wszystkich krotek. Jednakże bywają takie sytuacje, kiedy wynik zalety od sposobu wykonania wstawień. Widać to na przykładzie z rys. 5.12, jeśli usuniemy z wiersza 2) słowo kluczowe CISTINCT. Jeśli wykonamy polecenie z wierszy od 2) do 6), zanim cokolwiek zostanie wstawione, to nazwa występująca kilkakrotnie w relacji Film w' wyniku podzapytania również wystąpi wielokrotnie, a więc także zostanie kilkakrotnie w-stawiona do relacji studio. Jeśli natomiast nowe studio wstawimy do relacji Studio natychmiast po znalezieniu go podczas wykonywania polecenia z wierszy 2) do 6), ta nazwa nie zostanie wpisana ponownie. Stanie sic tak, ponieważ nazwa została już wstawiona do relacji Studio, zatem nie spełnia ona wrarunku wyszukiwania z wierszy od 4) do 6), a tym bardziej nic zostanie uwzględniona w wyniku zapytania z wierszy od 2) do 6).
A więc postać tę można zapisać schematycznie w następujący sposób:
DE LETE FROM R WHERE <warunck>;
W wyniku takiej instrukcji każda krotka relacji R, która spełnia warunek 4), zostanie z niej usunięta.
PRZYKŁAD 5.29
Informacja o tym, że Sydney Greenstreet występował w filmie Orzeł Maltański można usunąć z relacji:
GwiazdyW{tytułFilmu, rokFilmu, nazwiskoGwiazdy) stosując następującą instrukcję języka SQL:
DELETE FROM GwiazdyW
WHERE tytułFilmu = 'Orzeł Maltański' AND rokFilmu = 1942 AND
nazwiskoGwiazdy = 'Sydney Greenstreet';
Zauważmy, że w przeciwieństwie do instrukcji insert, w instrukcji DELETE nie można po prostu wypisać wartości składowych usuwanej krotki, a trzeba do jej określenia użyć klauzuli WHERE.
□
Wstawianie, usuwanie oraz duplikaty'
Wstawianie i usuwanie w ciekawy sposób współdziała z duplikatami krotek, które są dopuszczalne w relacjach systemu SQL. Przede wszystkim instrukcja insert wstawia nowa krotkę bez względu na to, czy taka krotka już występuje w relacji, czy jeszcze nie. Oznacza to na przykład, żc jeśli w relacji GwiazdyW istnieje już krotka z filmem Orzeł Maltański i aktorem Scdncycm Greenstreetem, to wykonanie instrukcji INSERT, opisanej w przy kładzie 5.29, spowoduje wstawienie kolejnej takiej samej krotki. Jeśli po tym wstawieniu zostanie wykonane usuwanie, które opisano w przykładzie 5.29, to obie krotki spełnią warunek z klauzuli WHERE, a więc obie krotki zostaną usunięte. Niespodzianką tutaj jest, żc wstawianie, po którym następuje usuwanie, daje w wyniku relacje, która jest inna niż. relacja GwiazdyW sprzed tych dwóch działań. Inna niespodzianka polega na tym, że instrukcja usuwania, w której opisuje się jedną krotkę, w efekcie usuwa więcej niż tylko jedną krotkę. W $QL nic ma możliwości usunięcia tylko jednej krotki, jeśli w relacji występuje kilka identycznych krotek.
PRZYKŁAD 5.30
Oto kolejny przykład użycia instrukcji usuwania. Tym razem z relacji
FiImDyr(nazwisko, adres, cert#, cenaSieci)