56661 ullman178 (2)

56661 ullman178 (2)



5. JĘZYK BAZ DANYGII SQL

.'Ćwiczenie 5.9.5. W przykładzie 5.46 rozważaliśmy zapytanie

SELECT *

FROM Film

WHERE długość <- 120 OR długość > 120;

Jego wynik nie jest intuicyjny, gdy w jakiejś krotce długość przyjmuje wartość null. Należy podać prostsze zapytanie równoważne z pojedynczym warunkiem w klauzuli WHERE (a nie koniunkcję ani alternatywę).

!Ć\viczenie 5.9.6. Operatory złączeń, o których była mowa w bieżącym rozdziale, są nadmiarowe w tym sensie, że można je zastąpić wyrażeniem typu selcct-from-where. Należy omówić wyrażenia select-from-where, którymi można zastąpić wyrażenia zapisane poniżej:

*a) R CROSS JOIN S;

b)    R NATURAL JOIN S;

c)    r JOIN S ON C; (gdzie C jest pewnym warunkiem zapisanym w SQ1.).

!!Ćwiczenie 5.9.7. Operatory' złączenia zewnętrznego zawsze można zastąpić zapytaniami SQL, które zawierają inne operatory' z SQL. Należy- określić, w jaki sposób utworzyć wyrażenia w SQL, które nie korzystają w sposób jawny z operatorów złączenia ani złączenia zewnętrznego

a)    R NATURAL LEFT OUTER JOIN S;

b)    R NATURAL FUŁL OUTER JOIN S;

c)    R FULL OUTER JOIN s ON C; (gdzie C jest pewnym warunkiem zapisanym w SQL).

5.10.Rekurencja w języku SQL

W bieżącym podrozdziale skupimy uwagę na pewnym charakterystycznym aspekcie SQL3 - na zapytaniach rekurencyjnych - które zaczynają już się pojawiać w systemach komercyjnych. W poprzednich rozdziałach opisywaliśmy te cechy SQL, które obowiązują w praw-ie wszystkich implementacjach komercyjnych. Standard SQL2 został formalnie zatwierdzony, ale zapytania rekurencyjnc nie są tam dołączone i ich opis opiera się na pewnych roboczych wersjach opisu standardu $QL3, a więc może odbiegać od wersji zaimplementowanych.

Koncepcja rekurcncji w SQL3 jest zbliżona do reguł rekurencyjnych Da-talogu, które opisano w' podrozdziale 4.4. Istnieje jednak między nimi kilka różnic. Po pierwsze w standardzie SQL dopuszcza się tylko rekurencję liniową, czyli Jaką, która opisuje się jednym podzadanicm rekurencyjnym. Poza tym

wymaganie dotyczące stratyfikacji było omawiane dla operatora negai w p. 4.4.4, w SQL3 rozciąga się na inne operatory, mogące w przy padku rek rencji prowadzić do niejednoznaczności wyniku, np. do agregacji.

5.10.1. Definiowanie relacji typu IDB w języku SQL3 •

W podrozdziale 4.4 rozróżniliśmy relacje typu EDB (ekstensjom ne bazy danych), które zapisuje się w postaci tabel, od relacji typu IDB (i tensjonalne bazy danych), które definiuje się za pomocą reguł Datalog W języku SQL występuje instrukcja identyfikowana słow-em kluczowy WITH, która umożliwia definiowanie relacji typu IDB. Ich definicji moźi od razu używać w tej samej instrukcji. Prosta postać instrukcji WITH je następująca:

WITH R AS edefinicja R> <zaoytar.ie określone na R>

A więc definiuje się roboczą relację R, a następnie korzysta się z ni w zapytaniu. W bardziej ogólnej postaci po WITH może wystąpić kilka d finicji relacji, oddzielonych przecinkami. Każda z definiowanych rela< może być rekurencyjna. Część z nich może być wzajemnie rekurencyjr tzn. każdą z nich można zdefiniow-ać za pomocą innej, także samej sieb Definicja każdej relacji, która jest objęta rekurencją, musi być poprzedzo słowem kluczowym RECURSIVE. Ogólna postać instrukcji WITH jest nasi pująca:

1.    Słowo kluczowe WITH.

2.    Jedna lub kilka definicji. Definicje oddziela się przecinkami, a każ

z nich składa się z następujących elementów:

a)    opcjonalne słowo kluczowe RECURSIVE, jeśli definiowana relac jest rekurencyjna;

b)    nazwa definiowanej relacji;

c)    słow-o kluczowe AS;

d)    zapytanie, które określa relację.

3.    Zapytanie, które może dotyczyć dowolnej z definiowanych rei

cji, a którego wynik jest jednocześnie wynikiem działania instruk*

WITH.

Trzeba zauw-ażyć, że inaczej niż w przypadku innych definicji rela< zdefiniowane w instrukcji WITH są dostępne tylko w obrębie tej instrukc a nie można korzystać z nich gdzie indziej. Jeśli relacja ma być trwała, trzeba ją zdefiniować w schemacie bazy danych poza instrukcją WITH.


Wyszukiwarka

Podobne podstrony:
70987 ullman154 (2) .5 l*ł 5. JĘZYK BAZ DANYCH SQL MĆwiczenie 5.3.6. Można już było uprzednio dostrz
ullman138 (2) 5_Język baz danych SQL Język SQL stanowi najbardziej popularny mechanizm definiowania
ullman154 (2) .5 l*ł 5. JĘZYK BAZ DANYCH SQL MĆwiczenie 5.3.6. Można już było uprzednio dostrzec, że
ullman138 (2) 5_Język baz danych SQL Język SQL stanowi najbardziej popularny mechanizm definiowania
ullman146 (2) 5. JĘZYK BAZ DANYCH SQL zmienną krotkową i kropką. A więc zmienna krotkowa jest inną n
ullman176 (2) 5. jęZYK. BAZ DANYCH SQL Złączenie naturalne w języku $QL2 ma dokładnie takie same wła
69806 ullman184 (2) 374    5 JI-ZYK BAZ DANYCH SQL Ćwiczenie 5.10.2. W ćwiczeniu 4.4.
ullman184 (2) 374    5 JI-ZYK BAZ DANYCH SQL Ćwiczenie 5.10.2. W ćwiczeniu 4.4.3 zost
ullman142 (2) 290 5. JEŻYK BAZ DANYCH SQL drugiego tekstu. Podobnie jak to występowało w przypadku t
ullman158 (2) 322 5. JĘZYK BAZ DANYCH SQL To nowe zapytanie zostało przedstawione na rys. 5.11. Powo
ullman161 (2) dZ5 5. JĘZYK BAZ DANYCH SQL jednocześnie zostanie usunięte kilka krotek, które spełnia

więcej podobnych podstron