Formální sémantika SQL dotazů Radovan Jankovič Ondřej Staněk 12.11. 2013 podle M. Negri, G. Pelagatti, L. Sbattella: Formal Semantics of SQL Queries, 1991
Formálna sémantika SQL dotazov Rozšírený trojhodnotový predikátový kalkul (E3VPC) Preklad SQL do E3VPC Ekvivalencia SQL dotazov
Štruktúra výrazu E3VPC t(...) = target list zloženie výsledku, kde sú premenné viazané k reláciám (tabuľkám). Výber konkrétnych atribútov (stĺpcov) vo výsledku je vynechaný.
Štruktúra výrazu E3VPC je predikátová formula, určujúca podmienky pre voľné premenné - interpretačný operátor aplikovaný na formulu špecifikuje vyhodnotenie NULL hodnôt. Rekurzívna definícia: termy predikáty formuly.
Termy Konštanty sú termy. Pre každú premennú a termy. a atribút sú Pre výraz S, atribút A a agregačnú funkciu f je term. Agregačná funkcia je jedna z COUNT, AVG, SUM, MIN, MAX, COUNTD, AVGD a SUMD.
Aritmetika a atomické predikáty Používajú sa štandartné aritmetické a porovnávacie operátory a operátor porovnania NULL hodnôt. Ak sú x a y termy a * operátor porovnania, potom x*y je atomický predikát. T (true), F (false) a U (unknown) sú atomické predikáty. Ak P je atomický predikát, potom aj je atomický predikát.
Predikátové formuly Atomický predikát je predikátovou formulou. Ak P a Q sú predikátové formuly, potom aj sú formuly. Nech je výraz E3VPC a formula. Potom sú predikátové formuly. predikátová
Interpretácia NULL nie je korektným výrazom E3VPC. (Patrí NULL do výsledku?) Je potrebný interpretačný operátor prevádzajúci trojhodnotovú logiku na dvojhodnotovú.
Interpretácia NULL Predikát Q(x) je pozitívne interpretovaným ekvivalentom P(x), ak platí Podobne Q(x) je negatívnou interpretáciou P(x), ak
Kompaktné formy znamená: existuje prvok x z danej množiny, pre ktorý P(x). P(x) nemá interpretačný operátor, preto ak je množina neprázdna, hodnota T sa nevyskytuje a aspoň jedna hodnota je U (unknown), je celá formula rovná U. Podobne.
Syntax SQL Definíciu ANSI SQL z r. 1985 možno napísať ako (takmer) gramatiku s 50 prepisovacími pravidlami, kde výsledný dotaz vzniká postupným nahradzovaním neterminálov (v ľubovoľnom poradí).
Syntax SQL - príklady... <QUERY> SELECT [ALL DISTINCT] <SELECT LIST> <FRCLAUSE> [<WHCLAUSE>] [GBCLAUSE] [HCLAUSE] <WHERE SEARCH COND> Boolean expression of <WPRED> <SIMPLE PRED> <COL OR VAL> <comp op> <COL OR VAL> <COMPLEX IN PRED> <FUNC SPEC> IN <SUBQ> <SUBQ> SELECT [ALL DISTINCT] <SELECT LIST> <FRCLAUSE> [<WHCLAUSE>] [GBCLAUSE] [HCLAUSE]
Preklad SQL do E3VPL Na preklad do E3VPL stačí 33 pravidiel, ktoré sú spárované s niektorými zo syntaktických pravidiel SQL. Preklad základného neterminálu: Používa sa záporná interpretácia, čo zodpovedá sémantike SQL.
Kontextový preklad V niektorých prípadoch je možných viac ciest prekladu, použité pravidlo závisí od kontextu výskytu neterminálu. Príklad:
Preklad komplexného dotazu Databáza oddelení a ich zamestnancov obsahuje dve relácie: DEPT(d#, nofemp, location, manager) a EMP(e#, d#, residence) Chceme získať mená manažérov oddelení, ktorých všetci zamestnanci bývajú v lokalite svojho oddelenia a priemerný počet zamestnancov oddelení spravovaných týmto manažérom je vyšší než 500.
Dotaz v SQL SELECT d.manager FROM DEPT d WHERE d.location = ALL SELECT e.residence FROM EMP e WHERE e.d# = d.d# GROUP BY d.manager HAVING AVG(d.nofemp) > 500
Preklad do E3VPC Po použití prvého pravidla získame Rozložíme podmienku WHERE na Preklad poddotazu sa rozpadol na dve časti, aby vznikla korektná výroková formula:
Preklad do E3VPC Podmienku HAVING preložíme najprv na a následne na (Pre úplnosť pripojená aj klauzula GROUP BY.)
Preklad do E3VPC Po preložení GBCLAUSE získame výslednú formulu (Pomocou notácie sa vnútorná formula odkazuje na premennú vo vonkajšej a vymedzuje tak podskupinu oddelení určenú manažérom => GROUP BY.)
Formální sémantika SQL dotazů Ondřej Staněk (ostan89@gmail.com) Dotazovací jazyky I (NDBI001)
Ekvivalence SQL dotazů Motivace: Lze obecně rozhodnout zda jsou dva syntakticky rozdílné SQL dotazy sémanticky ekvivalentní? Formální model E3VPC zachycuje sémantiku SQL Transformujeme SQL dotazy do E3VPC, pak řešíme problém ekvivalence dvou E3VPC výrazů Definition SQL dotazy Q 1, Q 2 jsou sémanticky ekvivalentní právě tehdy když TR<Q 1 > TR<Q 2 > jak ale poznat ekvivalenci dvou E3VPC výrazů? Úvaha ve dvouhodnotové predikátové logice dokážeme rozhodnout ekvivalenci dvou výrazů chceme metody klasické predikátové logiky aplikovat na trojhodnotový E3VPC
Ekvivalence SQL dotazů Motivace: Lze obecně rozhodnout zda jsou dva syntakticky rozdílné SQL dotazy sémanticky ekvivalentní? Formální model E3VPC zachycuje sémantiku SQL Transformujeme SQL dotazy do E3VPC, pak řešíme problém ekvivalence dvou E3VPC výrazů Definition SQL dotazy Q 1, Q 2 jsou sémanticky ekvivalentní právě tehdy když TR<Q 1 > TR<Q 2 > jak ale poznat ekvivalenci dvou E3VPC výrazů? Úvaha ve dvouhodnotové predikátové logice dokážeme rozhodnout ekvivalenci dvou výrazů chceme metody klasické predikátové logiky aplikovat na trojhodnotový E3VPC
Kanonická forma E3VPC Definition Výraz E3VPC je v kanonické formě, pokud: 1 každý atomický predikát je opatřen interpretačním operátorem 2 nikde jinde ve výrazu se interpretační operátory nevyskytují 3 výraz neobsahuje kompaktní formy Example x in R : Q(x) F P(x) T
Kanonická forma E3VPC Definition Výraz E3VPC je v kanonické formě, pokud: 1 každý atomický predikát je opatřen interpretačním operátorem 2 nikde jinde ve výrazu se interpretační operátory nevyskytují 3 výraz neobsahuje kompaktní formy Example x in R : Q(x) F P(x) T
Pravidla pro úpravu do kanonické formy E3VPC 1 P(x) Q(x) α P(x) α Q(x) α 2 P(x) Q(x) α P(x) α Q(x) α 3 P(x) α P(x) α P(x) α β P(x) α 4 5 x in R : P(x) α x in R : P(x) α 6 x in R : P(x) α x in R : P(x) α Připomenutí α značí interpretační operátor α {T,F }
Pravidla pro úpravu do kanonické formy E3VPC Dále k úpravám používáme běžné operace predikátového kalkulu to můžeme, neboť je-li tříhodnotová formule ošetřena interpretačním operátorem, stává se z ní dvouhodnotová formule. S těmi již můžeme pracovat běžným způsobem. Pozor v tříhodnotové logice neplatí pravidlo tautologie: pravidlo kontradikce: P(x) P(x) 1 P(x) P(x) 0
Pravidla pro úpravu do kanonické formy E3VPC dále se nám k úpravám hodí tyto věty: Theorem { x in R : P(x) α} Q(x) β x in R : P(x) α Q(x) β Proof. { x in R : P(x) α} Q(x) β { x in R : P(x) α Q(x) } β (běžné pravidlo predikátového kalkulu) x in R : P(x) α Q(x) β (pravidlo č. 5) x in R : P(x) α β Q(x) β (pravidlo č. 2) x in R : P(x) α Q(x) β (pravidlo č. 2)
Pravidla pro úpravu do kanonické formy E3VPC dále se nám k úpravám hodí tyto věty: Theorem { x in R : P(x) α} Q(x) β x in R : P(x) α Q(x) β Proof. { x in R : P(x) α} Q(x) β x in R : P(x) α Q(x) β (běžné pravidlo predikátového kalkulu) x in R : P(x) α Q(x) β (pravidlo č. 6) x in R : P(x) α β Q(x) β (pravidlo č. 1) x in R : P(x) α β Q(x) β (pravidlo č. 3) x in R : P(x) α Q(x) β (pravidlo č. 4)
Critical Equivalence Set Množina kritické ekvivalence Definition Množina kanonických E3VPC výrazů je kriticky ekvivalentní, pokud všechny výrazy v ní obsažené mají identickou strukturu, až na typ interpretace jednotlivých atomických predikátů Example Mějmě dva SQL dotazy Q 1,Q 2, jejichž transformace do E3VPC vypadá takto: TR Q 1 = {x } in R : P(x) F TR Q 2 = {x } in R : P(x) T Tyto dva dotazy vrací vždy stejné výsledky za předpokladu, že v databázi nejsou null hodnoty. Pokud však pro nějaké x R je predikát P(x) = U, bude obsažen ve výsledku dotazu Q 2, nikoliv však v Q 1.
Critical Equivalence Set Množina kritické ekvivalence Definition Množina kanonických E3VPC výrazů je kriticky ekvivalentní, pokud všechny výrazy v ní obsažené mají identickou strukturu, až na typ interpretace jednotlivých atomických predikátů Example Mějmě dva SQL dotazy Q 1,Q 2, jejichž transformace do E3VPC vypadá takto: TR Q 1 = {x } in R : P(x) F TR Q 2 = {x } in R : P(x) T Tyto dva dotazy vrací vždy stejné výsledky za předpokladu, že v databázi nejsou null hodnoty. Pokud však pro nějaké x R je predikát P(x) = U, bude obsažen ve výsledku dotazu Q 2, nikoliv však v Q 1.
Critical Equivalence Set Množina kritické ekvivalence Fact Důležité pozorování: Ačkoliv pravidla pro překlad do E3VPC používají pouze false interpretované operátory ( F ), interpretační operátory true ( T ) se mohou objevit při použití pravidel úpravy do kanonické formy: P(x) F P(x) T (instance pravidla 3) P(x) T F P(x) T (instance pravidla 4)
Příklad (téměř) ekvivalentních dotazů - formálně Mějme schéma dvou relací R(A 1,...,A i,...a n ), S(B 1,...,B i,...,b j,...b m ). Uvažujeme těchto pět SQL dotazů: Q 1 : SELECT * FROM R x WHERE NOT EXISTS SELECT * FROM S y WHERE x.a i =y.b i y.b j P Q 4 : SELECT * FROM R x WHERE P = ALL SELECT y.b j FROM S y WHERE x.a i = y.b i Q 2 : SELECT * FROM R x WHERE NOT P SOME SELECT y.b j FROM S y WHERE x.a i = y.b i Q 5 : SELECT * FROM R x WHERE x.a i NOT IN SELECT y.b i FROM S y WHERE y.b j P Q 3 : SELECT * FROM R x WHERE NOT x.a i IN SELECT y.b i FROM S y WHERE x.b j P
Příklad (téměř) ekvivalentních dotazů - méně formálně Mějme tabulku společností SPOL(ič#, jméno,..), a tabulku faktur FAKT (ič#,čf #,stav,částka,...). Uvažujeme těchto pět SQL dotazů: Q 1 : SELECT * FROM SPOL s WHERE NOT EXISTS SELECT * FROM FAKT f WHERE s.ič=f.ič f.stav Z Q 4 : SELECT * FROM SPOL s WHERE Z = ALL SELECT f.stav FROM FAKT f WHERE s.ič = f.ič Q 2 : SELECT * FROM SPOL s WHERE NOT Z SOME SELECT f.stav FROM FAKT f WHERE s.ič = f.ič Q 3 : SELECT * FROM SPOL s WHERE NOT s.ič IN SELECT f.ič FROM FAKT f WHERE f.stav Z Q 5 : SELECT * FROM SPOL s WHERE s.ič NOT IN SELECT f.ič FROM FAKT f WHERE f.stav Z Poznámka atribut f.stav nabývá hodnot P (potrvrzeno), Z (zamítnuto) a null (zatím nerozhodnuto)
Příklad (téměř) ekvivalentních dotazů - méně formálně Mějme tabulku společností SPOL(ič#, jméno,..), a tabulku faktur FAKT (ič#,čf #,stav,částka,...). Uvažujeme těchto pět SQL dotazů: Q 1 : SELECT * FROM SPOL s WHERE NOT EXISTS SELECT * FROM FAKT f WHERE s.ič=f.ič f.stav Z Q 4 : SELECT * FROM SPOL s WHERE Z = ALL SELECT f.stav FROM FAKT f WHERE s.ič = f.ič Q 2 : SELECT * FROM SPOL s WHERE NOT Z SOME SELECT f.stav FROM FAKT f WHERE s.ič = f.ič Q 3 : SELECT * FROM SPOL s WHERE NOT s.ič IN SELECT f.ič FROM FAKT f WHERE f.stav Z Q 5 : SELECT * FROM SPOL s WHERE s.ič NOT IN SELECT f.ič FROM FAKT f WHERE f.stav Z Poznámka atribut f.stav nabývá hodnot P (potrvrzeno), Z (zamítnuto) a null (zatím nerozhodnuto)
Překlad SQL dotazů Q 1,...Q 5 do E3VPC Pro zjednodušení zápisu substituujeme predikáty: P(f ) za f.stav Z P(f ) značí faktura f nebyla zamítnuta, ekvivalentně faktura f byla potvrzena Q(s,f ) za s.ič = f.ič Q(s, f ) značí společnost s vystavila fakturu f
Sémantika dotazu Q 1 Dotaz Q 1 (SQL) SELECT * FROM SPOL s WHERE NOT EXISTS SELECT * FROM FAKT f WHERE s.ič = f.ič f.stav Z Překlad TR<Q 1 > (E3VPC) { s in SPOL : {f in FAKT : Q(s,f ) P(f ) F } } F Dotaz Q 1 (běžný jazyk) doslovně: Vyber společnosti pro které je množina jejích potvrzených faktur prázdná. ekvivalentně: Společnosti, které nemají žádnou potvrzenou fakturu? Vrátí dotaz i společnost, o jejíž faktuře ještě nebylo rozhodnuto? (tj. P(f ) = U)?
Sémantika dotazu Q 1 Dotaz Q 1 (SQL) SELECT * FROM SPOL s WHERE NOT EXISTS SELECT * FROM FAKT f WHERE s.ič = f.ič f.stav Z Překlad TR<Q 1 > (E3VPC) { s in SPOL : {f in FAKT : Q(s,f ) P(f ) F } } F Dotaz Q 1 (běžný jazyk) doslovně: Vyber společnosti pro které je množina jejích potvrzených faktur prázdná. ekvivalentně: Společnosti, které nemají žádnou potvrzenou fakturu? Vrátí dotaz i společnost, o jejíž faktuře ještě nebylo rozhodnuto? (tj. P(f ) = U)?
Sémantika dotazu Q 1 Dotaz Q 1 (SQL) SELECT * FROM SPOL s WHERE NOT EXISTS SELECT * FROM FAKT f WHERE s.ič = f.ič f.stav Z Překlad TR<Q 1 > (E3VPC) { s in SPOL : {f in FAKT : Q(s,f ) P(f ) F } } F Dotaz Q 1 (běžný jazyk) doslovně: Vyber společnosti pro které je množina jejích potvrzených faktur prázdná. ekvivalentně: Společnosti, které nemají žádnou potvrzenou fakturu? Vrátí dotaz i společnost, o jejíž faktuře ještě nebylo rozhodnuto? (tj. P(f ) = U)?
Sémantika dotazu Q 4 Dotaz Q 4 (SQL) SELECT * FROM SPOL s WHERE Z = ALL SELECT f.stav FROM FAKT f WHERE s.ič = f.ič Překlad TR<Q 4 > (E3VPC) { s in SPOL : {f in FAKT : Q(s,f ) F } } P(f ) F Dotaz Q 4 (běžný jazyk) Vyber takové společnosti, jejichž všechny faktury jsou zamítnuté? Vrátí dotaz i firmu, o jejíž faktuře ještě nebylo rozhodnuto? (tj. P(f ) = U)?
Sémantika dotazu Q 4 Dotaz Q 4 (SQL) SELECT * FROM SPOL s WHERE Z = ALL SELECT f.stav FROM FAKT f WHERE s.ič = f.ič Překlad TR<Q 4 > (E3VPC) { s in SPOL : {f in FAKT : Q(s,f ) F } } P(f ) F Dotaz Q 4 (běžný jazyk) Vyber takové společnosti, jejichž všechny faktury jsou zamítnuté? Vrátí dotaz i firmu, o jejíž faktuře ještě nebylo rozhodnuto? (tj. P(f ) = U)?
Sémantika dotazu Q 4 Dotaz Q 4 (SQL) SELECT * FROM SPOL s WHERE Z = ALL SELECT f.stav FROM FAKT f WHERE s.ič = f.ič Překlad TR<Q 4 > (E3VPC) { s in SPOL : {f in FAKT : Q(s,f ) F } } P(f ) F Dotaz Q 4 (běžný jazyk) Vyber takové společnosti, jejichž všechny faktury jsou zamítnuté? Vrátí dotaz i firmu, o jejíž faktuře ještě nebylo rozhodnuto? (tj. P(f ) = U)?
Překlad SQL dotazů Q 1,...Q 5 do E3VPC 1 2 3 4 5 { s in SPOL : {f in FAKT : Q(s,f ) P(f ) F } } F { s in SPOL : {f in FAKT : Q(s,f ) F } }P(f ) F { s in SPOL : {f in FAKT : P(f ) F } }Q(s,f ) F { s in SPOL : {f in FAKT : Q(s,f ) F } } P(f ) F { s in SPOL : {f in FAKT : P(f ) F } } Q(s,f ) F? Jsou nějaké z těchto dotazů úplně ekvivalentní, tedy vrací vždy stejné výsledky i na databázích s nulovými hodnotami?
Překlad SQL dotazů Q 1,...Q 5 do E3VPC 1 2 3 4 5 { s in SPOL : {f in FAKT : Q(s,f ) P(f ) F } } F { s in SPOL : {f in FAKT : Q(s,f ) F } }P(f ) F { s in SPOL : {f in FAKT : P(f ) F } }Q(s,f ) F { s in SPOL : {f in FAKT : Q(s,f ) F } } P(f ) F { s in SPOL : {f in FAKT : P(f ) F } } Q(s,f ) F? Jsou nějaké z těchto dotazů úplně ekvivalentní, tedy vrací vždy stejné výsledky i na databázích s nulovými hodnotami?
Kanonické formy překladů TR < Q 1 >,...TR < Q 5 > 1 f in FAKT : Q(s,f ) T P(f ) T 2 f in FAKT : Q(s,f ) T P(f ) F 3 f in FAKT : Q(s,f ) F P(f ) T 4 = 2. 5 = 3. Fact Dotaz Q 2 i Q 4 vrátil společnosti, jejichž každá faktura byla zamítnuta Dotaz Q 1 vrátil společnosti, jejichž každá faktura byla buďto zamítnuta a nebo o jejím zamítnutí ještě nebylo rozhodnuto (zatím má její atribut f.stav hodnotu null)? Jaká je sémantika dotazu Q 3, resp. Q 5?
Kanonické formy překladů TR < Q 1 >,...TR < Q 5 > 1 f in FAKT : Q(s,f ) T P(f ) T 2 f in FAKT : Q(s,f ) T P(f ) F 3 f in FAKT : Q(s,f ) F P(f ) T 4 = 2. 5 = 3. Fact Dotaz Q 2 i Q 4 vrátil společnosti, jejichž každá faktura byla zamítnuta Dotaz Q 1 vrátil společnosti, jejichž každá faktura byla buďto zamítnuta a nebo o jejím zamítnutí ještě nebylo rozhodnuto (zatím má její atribut f.stav hodnotu null)? Jaká je sémantika dotazu Q 3, resp. Q 5?
Sémantika dotazu Q 5 Dotaz Q 5 (SQL) SELECT * FROM SPOL s WHERE s.ič NOT IN SELECT f.ič FROM FAKT f WHERE f.stav Z Překlad TR<Q 5 > (E3VPC) { s in SPOL : {f in FAKT : P(f ) F } } Q(s,f ) F Dotaz Q 5 (běžný jazyk) Vyber takové společnosti, které nemají žádnou potvrzenou fakturu vrátí společnosti, jejichž všechny faktury byly zamítnuty a nebo o jejich zamítnutí ještě nebylo rozhodnuto co se stane, když se v databázi vyskytne potvrzená faktura s atributem f.ič = null? Pro tuto fakturu bude predikát Q(s,f ) = U a tedy nevíme, které společnosti faktura v databázi patří. Jak to ovlivní výsledky dotazů Q 1,Q 4,Q 5?
Sémantika dotazu Q 5 Dotaz Q 5 (SQL) SELECT * FROM SPOL s WHERE s.ič NOT IN SELECT f.ič FROM FAKT f WHERE f.stav Z Překlad TR<Q 5 > (E3VPC) { s in SPOL : {f in FAKT : P(f ) F } } Q(s,f ) F Dotaz Q 5 (běžný jazyk) Vyber takové společnosti, které nemají žádnou potvrzenou fakturu vrátí společnosti, jejichž všechny faktury byly zamítnuty a nebo o jejich zamítnutí ještě nebylo rozhodnuto co se stane, když se v databázi vyskytne potvrzená faktura s atributem f.ič = null? Pro tuto fakturu bude predikát Q(s,f ) = U a tedy nevíme, které společnosti faktura v databázi patří. Jak to ovlivní výsledky dotazů Q 1,Q 4,Q 5?
Sémantika dotazu Q 5 Dotaz Q 5 (SQL) SELECT * FROM SPOL s WHERE s.ič NOT IN SELECT f.ič FROM FAKT f WHERE f.stav Z Překlad TR<Q 5 > (E3VPC) { s in SPOL : {f in FAKT : P(f ) F } } Q(s,f ) F Dotaz Q 5 (běžný jazyk) Vyber takové společnosti, které nemají žádnou potvrzenou fakturu vrátí společnosti, jejichž všechny faktury byly zamítnuty a nebo o jejich zamítnutí ještě nebylo rozhodnuto co se stane, když se v databázi vyskytne potvrzená faktura s atributem f.ič = null? Pro tuto fakturu bude predikát Q(s,f ) = U a tedy nevíme, které společnosti faktura v databázi patří. Jak to ovlivní výsledky dotazů Q 1,Q 4,Q 5?
Univerzálně kvantifikované SQL dotazy v E3VPC 1 2 3 4 5 {y in S : Q(x,y) P(y) α } β {y in S : Q(x,y) α }P(y) β {y in S : P(y) α }Q(x,y) β {y in S : Q(x,y) α } P(y) β {y in S : P(y) α } Q(x,y) β α = F vždy, nebot vyhledávací podmínka (search condition) v SQL je vždy interpretována false β závisí na struktuře vnějšího dotazu.
Univerzálně kvantifikované SQL dotazy v E3VPC 1 2 3 4 5 {y in S : Q(x,y) P(y) α } β {y in S : Q(x,y) α }P(y) β {y in S : P(y) α }Q(x,y) β {y in S : Q(x,y) α } P(y) β {y in S : P(y) α } Q(x,y) β α = F vždy, nebot vyhledávací podmínka (search condition) v SQL je vždy interpretována false β závisí na struktuře vnějšího dotazu.
Ekvivalentní kanonické formy TR < Q 1 >,...TR < Q 5 > pro univerzálně kvantifikované dotazy 1 y in S : Q(x,y) α P(f ) α 2 y in S : Q(x,y) α P(f ) β 3 y in S : Q(x,y) β P(f ) α 4 = 2. 5 = 3. Tyto výrazy jsou identické pouze pokud β = α. Toto ale obecně neplatí, což je příčinou vzinku množin kritické ekvivalence.
Ekvivalentní kanonické formy TR < Q 1 >,...TR < Q 5 > pro univerzálně kvantifikované dotazy 1 y in S : Q(x,y) α P(f ) α 2 y in S : Q(x,y) α P(f ) β 3 y in S : Q(x,y) β P(f ) α 4 = 2. 5 = 3. Tyto výrazy jsou identické pouze pokud β = α. Toto ale obecně neplatí, což je příčinou vzinku množin kritické ekvivalence.
Existenčně kvantifikované SQL dotazy v E3VPC 1 2 3 4 5 {y in S : Q(x,y) P(y) α } β {y in S : Q(x,y) α }P(y) β {y in S : P(y) α }Q(x,y) β {y in S : Q(x,y) α } P(y) β {y in S : P(y) α } Q(x,y) β stejně jako u univerzálně kvantifikovaných dotazů platí α = F vždy, nebot vyhledávací podmínka (search condition) v SQL je vždy interpretována false β závisí na struktuře vnějšího dotazu
Ekvivalentní kanonické formy pro existenčně kvantifikované dotazy 1 y in S : Q(x,y) α P(y) α 2 y in S : Q(x,y) α P(y) β 3 y in S : Q(x,y) β P(y) α 4 = 2. 5 = 3. Tyto výrazy jsou identické pouze pokud β = α. Víme, že α = F vždy. Aby existenční kvantifikátor způsobil existenci množiny kritické ekvivalence, musí být β = T. To nastává pouze pokud je součástí vnějšího univerzálně kvantifikovaného predikátu.
Ekvivalentní kanonické formy pro existenčně kvantifikované dotazy 1 y in S : Q(x,y) α P(y) α 2 y in S : Q(x,y) α P(y) β 3 y in S : Q(x,y) β P(y) α 4 = 2. 5 = 3. Tyto výrazy jsou identické pouze pokud β = α. Víme, že α = F vždy. Aby existenční kvantifikátor způsobil existenci množiny kritické ekvivalence, musí být β = T. To nastává pouze pokud je součástí vnějšího univerzálně kvantifikovaného predikátu.
Shrnutí Ekvivalence ekvivalenci dvou SQL dotazů lze rozhodnout překladem do rozšířené tříhodnotové predikátové logiky (E3VPC) a následnou úpravou na kanonický tvar E3VPC je výrazově silnější než SQL Množiny kritické ekvivalence dotazy v kriticky ekvivalentní množině vrací stejné výsledky na databázi bez null hodnot. Jsou-li však v databázi null hodnoty, chovají se rozdílně. dotazy bez univerzálního (všeobecného) kvantifikátoru nikdy netvoří množiny kritické ekvivalence dotazy s univerzálním kvantifikátorem vždy tvoří množiny kritické ekvivalence