ullman173 (2)

ullman173 (2)



352 5. JĘZYK BAZ DANYCH SQI-

d) Wyjaśnić, w jaki sposób zmienić wyrażenie utworzone w punkcie c) tak, aby było ono równoważne wyrażeniu, które pasuje do rozwiązania z przykładu 5.40.

!Ćwiczenie 5.8.5. Każde z zap>tań z ćwiczenia 5.8.3 należy wyrazić jako zapytanie lub perspektywę w terminach algebry relacji, zastąpić w zapytaniach perspektywy ich definicjami algebraicznymi, a następnie jak najbardziej uprościć wyrażenia wynikowe. W końcu należy zapisać zapytania w SQL: które są rów'now'azne otrzymanym wyrażeniom, a które odnoszą się tylko do tabel bazowy ch.

Ćwiczenie 5.8.6. Za pomocą tabel bazowych:

Klasy (klasa, t.yp, kraj, liczbaDział, działo, wyporność)

Okręty(na2vra, klasa, wodowanie)

z ćwiczenia 4.1.3 należy:

a)    Zdefiniować perspektywę OkrętyBrytyjskie, która dla wszystkich okrętów' brytyjskich zawiera ich klasy, typy, liczby dział, kaliber dział, wyporność oraz rok wodowania.

b)    Korzystając z perspektywy zdefiniowanej w a), należy utworzyć zapytanie o liczbę dział i wyporność wszystkich brytyjskich okrętów bojowych, które zwodowano przed 1919 r.

!c) Należ>' przedstawić zapytanie z punktu b) i perspektywę z a) jako wyrażenia algebry relacji, następnie zastąpić w wyrażeniu zapytania perspektywę jej wyrażeniem, a potem uprościć powstałe wyrażenie.

!d) Zapisać wyrażenie z punktu c) jako zapytanie SQL, które dotyczy tabel bazowych Klasy i Okręty.

5.9. Wartości NULL oraz złączenia zewnętrzne

W bieżącym podrozdziale omówimy sposób korzystania w języku SQL z wartości NULL. Bardzo ważne zastosowanie NULL zachodzi przy wyliczaniu złączenie wówczas, gdy należy chronić dane, a krotka z jednej relacji nic daje się połączyć z żadną krotką pewnej innej relacji. Taka wersja złączenia nazywa się złączeniem zewnętrznym. Omówimy kilka wariantów implementacji złączenia zewnętrznego. Operator złączenia zewnętrznego jest dostępny w standardzie SQL2, ale wcześniejsze wersje SQL przeważnie już dopuszczają stosowanie wartości NULL.

5.9.1. Działania na wartości NULL

W naszej książce już kilka razy- omówiono zastosowanie wartości NULL w języku SQL. W punkcie 4.7.4 omówiono na przykład zastosowanie NULT-przy reprezentowaniu wartości nieznanych lub nieistniejących. Wartości NULL są stosowane w krotkach wstawianych do relacji wówczas, gdy w poleceniu nie określono wszystkich składowych wstawianej krotki. Wartość NUi jest wstawiana zamiast brakujących wartości, chyba że określono inne wart' ści domniemane. Przekonamy się, źc źródłem pojawienia się w bazie danyt wartości NULL są także złączenia zewnętrzne.

Pułapki związane z NULL

Istnieje pokusa, aby w SQL2 stosować wartość NULL wówczas, gdy nie można określić wartości, która „nie jest znana, ale na pewno istnieje”. Jednakże ta intuicja w niektórych sytuacjach okazuje się zawodna. Załóżmy na przykład, że * stanowi pewną składową, której dziedziną są liczby całkowite. A zatem należy sądzić, że bez względu na wartość x wyrażenie 0 * x będzie miało wartość 0, ponieważ dowolna wartość całkowita przemnożona przez 0 daje w wyniku 0. Ale gdy * ma wartość NULL, to stosuje się zasadę (1) z p. 5.9.1, czyli iloczyn 0 i NULL ma wartość NULL. Możn< by też sądzić, że * x przyjmuje wartość 0, ponieważ bez względu n< wartość .v różnica z wartością a: daje w wyniku 0. Jednakże i w tym przypadku stosuje się zasadę (1) i w wyniku powstaje wartość NULL.

Przy? działaniach z wartością NULL należy pamiętać dwie reguły:

1.    Jeśli jako argument działania arytmetycznego takiego jak x lub + w stępuje NULL i pewna inna wartość, być może też NUTU, to wynikłe jest wartość NULL.

2.    Przy' porównywaniu wartości NULL z pewną inną wartością, być mo także NULL, za pomocą operatorów- algebraicznych takich jak = lub w wyniku powstaje wartość UNKNCWN (nieznana). Wartość UNKNOt jest trzecią, obok true i FALSE, wartością logiczną: będzie o n mowa w dalszym ciągu.

Trzeba jednak pamiętać również o tym, iż wartość NULL, mimo że kor; sta się z niej w- krotkach, nie jest stałą. Nie można więc jej traktow-ać przy wy cza ni u wartości wyrażeń tak samo, jak traktuje się argumenty- innego rodzaju.

PRZYKŁAD 5.45

Załóżmy, że wartością * jest NULL. Zatem wartością * + 3 jest także NUI Jednakże NULL + 3 nie jest poprawnym wyrażeniem w SQL. Z podobne powodu wartością .v - 3 jest UNKNOWN, ponieważ nie można stwierdzić c wartością*, która jest zapisana jako NULL, jest 3, czy też nic, a z kolei wy żenić null = 3 nie jest poprawnym wyrażeniem w $QL.

Czasami można sprawdzić, czy wartością * jest NULL, stosując wyrażei x IS NULL. Przyjmuje ono wartość TRUE, gdy wartością* jest NULL, a w


Wyszukiwarka

Podobne podstrony:
ullman141 (2) 288 5 JĘZYK BAZ DANYCH SQI. W przykładzie 5.1 występuje porównanie: nazwaStudia = Dis
79737 ullman155 (2) 316 5. JĘZYK BAZ DANYCH SQI- 316 5. JĘZYK BAZ DANYCH SQI- Koszt usuwania powtórz
26440 ullman141 (2) 288 5 JĘZYK BAZ DANYCH SQI. W przykładzie 5.1 występuje porównanie: nazwaStudia
ullman172 (2) o_>u 5. JĘZYK BAZ DANYCH SQI. ^tytui arok - 19?9 ^cytui, rok ^nazwoStudi* - Paramo
ullman142 (2) 290 5. JEŻYK BAZ DANYCH SQL drugiego tekstu. Podobnie jak to występowało w przypadku t

więcej podobnych podstron