Létezik egy másik fajta relációkalkulus, amit tartomány alapú relációkalkulusnak vagy röviden tartománykalkulusnak nevezünk. Míg az SQL-t a rekord alapú relációkalkulusra alapozva fejlesztette ki az IBM Research San Jose-ban, Kaliforniában, addig a QBE-nek (Query-By-Example) nevezett másik nyelvet, ami a tartománykalkulushoz kötődik, ezzel majdnem párhuzamosan fejlesztették az IBM T. J. Watson Research Centerben Yorktown Heights-ban, New York államban. A tartománykalkulus formális specifikációját a QBE rendszer fejlesztése után írták le.
A tartománykalkulus a formulákban használt változók típusában különbözik a rekordkalkulustól: a változók ahelyett, hogy a rekordok fölött futnának végig, az attribútumok tartományainak egyszerű értékeit járják be. Ahhoz, hogy kialakítsunk egy n-edfokú relációt egy lekérdezéshez, szükségünk van n ilyen tartományváltozóra — mindegyik attribútumhoz egyre. Egy tartománykalkulusbeli kifejezés
{ x 1, x 2, …, xn ❘ FELTÉTEL(x 1, x 2, …, xn , x n+1, x n+2, …, x n+m ) }
alakú, ahol x 1, x 2, …, xn , x n+1, x n+2, …, x n+m tartományváltozók, amelyek végigfutnak a tartományok (az attribútumok tartományai) fölött, míg a FELTÉTEL a tartomány alapú relációkalkulus egy feltétele vagy formulája .
Egy formula atomokból épül föl. Egy formula atomjai kicsit különböznek a rekordkalkulusban megadottaktól, a következők lehetnek:
Az R(x 1, x 2, … xj ) alakú atom, ahol R egy j fokú relációnak a neve, és minden xi egy tartományváltozó (1 < i < j). Ez az atom azt fejezi ki, hogy az 〈x 1, x 2, … xj 〉 értékek listája egy rekord abban a relációban, amelynek R a neve, és xi a rekord i-edik attribútumának az értéke. Egy tartománykalkulusbeli kifejezés tömörebb megadása érdekében elhagyhatjuk a vesszőket a változók listájában; így használhatjuk a
{ x 1, x 2, …, xn ❘ R(x 1 x 2 … xn ) AND … }
alakú kifejezést a
{ x 1, x 2, …, xn ❘ R(x 1, x 2, …, xn ) AND … }
helyett.
Az xi op xj alakú atom, ahol op egyike a {=, ≤, <, ≥, >, ≠} halmaz összehasonlító operátorainak, míg xi és xj tartományváltozók.
Az xi op c vagy c op xj alakú atom, ahol op egyike a {=, ≤, <, ≥, >, ≠} halmaz összehasonlító operátorainak, xi és xj tartományváltozók, míg c egy konstans érték.
Ahogyan a rekordkalkulusban is, az atomok IGAZ vagy HAMIS értéket vesznek fel egy adott értékhalmaz esetén, amit az atomok igazságértékének nevezünk. Az 1. esetben, ha a tartományváltozókhoz hozzárendelt értékek megfelelnek a megadott R reláció egy rekordjának, akkor az atom értéke IGAZ. A 2. és 3. esetben, ha a tartományváltozókhoz hozzárendelt értékek kielégítik a feltételt, akkor az atom IGAZ.
A rekord alapú relációkalkulushoz hasonlóan a formulák itt is atomokból, változókból és kvantorokból épülnek föl, így most nem fogjuk elismételni a formulákra vonatkozó előírásokat. Következzen inkább néhány, tartománykalkulusban megadott lekérdezés. A tartományváltozókat az ábécé kisbetűivel, az l, m, n, …, x, y, z betűkkel fogjuk jelölni.
0. lekérdezés. Listázza ki azoknak a dolgozóknak a születési dátumát és lakcímét, akiknek a neve „Kovács János”!
| Q0: {tu ❘ (∃q) (∃r) (∃s) (∃v) (∃w) (∃x) (∃y) (DOLGOZÓ(qrstuvwxy) AND q='Kovács' AND r='János')} |
Kilenc változóra van szükségünk a DOLGOZÓ relációhoz, amelyek végigfutnak az egyes attribútumok tartományai fölött. A kilenc változóból (q, r, s, …, y) csak a t és az u szabadok. Először felsoroljuk a kért attribútumokat, a Szdátumot és a Lakcímet a szabad változókkal, t-vel a Szdátumra, u-val a Lakcímre hivatkozva. Azután a függőleges elválasztó vonalat (❘) követően megadjuk a feltételt egy rekord kiválasztására — nevezetesen, hogy a qrstuvwxy változókhoz rendelt értéksorozatnak a DOLGOZÓ reláció egy rekordjának kell lennie, valamint hogy a q (VNév) és az r (Knév) értéke rendre 'Kovács' és 'János' legyen. A kényelem kedvéért a további példáinkban csak azokat a változókat fogjuk kvantálni, amelyek ténylegesen megjelennek egy feltételben (ezek a q és az r lennének a Q0-ban).
Egy alternatív, QBE-ben használt rövidítési lehetőség ennek a lekérdezésnek a felírására a 'Kovács' és 'János' konstansok közvetlen hozzárendelése, ahogyan azt a Q0A-ban láthatjuk. Itt azok a változók, amelyek nem jelennek meg a függőleges vonal bal oldalán, implicit módon egzisztenciálisan kvantáltak:[25]
| Q0A: {tu ❘ DOLGOZÓ('Kovács', 'János', s, t, u, v, w, x, y) } |
1. lekérdezés. Kérdezze le az összes olyan dolgozónak a nevét és a lakcímét, aki a „Kutatás” osztályon dolgozik!
| Q1: {qru ❘ (∃y) (∃l) (∃m) (DOLGOZÓ(qrstuvwxy) AND OSZTÁLY(lmno) AND l='Kutatás' AND m=y)} |
Az olyan feltétel, mint a m=y a Q1-ben, amely két olyan tartományváltozót kapcsol össze, amelyek két reláció attribútumai fölött futnak végig, összekapcsoló vagy join feltétel; míg az olyan feltétel, mint a l='Kutatás', amely egy tartományváltozót egy konstanssal kapcsol össze, szelekciós feltétel.
2. lekérdezés. Minden kecskeméti projekt esetén listázza ki a projekt számát, a projektet irányító osztály számát, valamint az osztályvezető vezetéknevét, születési dátumát és lakcímét!
| Q2: {ikrtu ❘ (∃j) (∃m) (∃n) (∃s) (PROJEKT(hijk) AND DOLGOZÓ(qrstuvwxy) AND OSZTÁLY(lmno) AND k=m AND n=s AND j='Kecskemét')} |
6. lekérdezés. Listázza ki azoknak a dolgozóknak a vezeték- és keresztnevét, akiknek nincs egyetlen hozzátartozójuk sem!
| Q6: {qr ❘ (∃s)(DOLGOZÓ(qrstuvwxy) AND (NOT(∃l)(HOZZÁTARTOZÓ(lmnop) AND s=l)))} |
Q6 átírható az egzisztenciális kvantor helyett az univerzális kvantort használva, ahogyan az a Q6A-ban látható:
| Q6A: {qr ❘ (∃s)(DOLGOZÓ(qrstuvwxy) AND ((∀l)(NOT(HOZZÁTARTOZÓ(lmnop)) OR NOT(s=l))))} |
7. lekérdezés. Listázza ki azoknak az osztályvezetőknek a nevét, akiknek legalább egy hozzátartozójuk van!
| Q7: {qr ❘ (∃s) (∃j) (∃l) (DOLGOZÓ(qrstuvwxy) AND OSZTÁLY(hijk) AND HOZZÁTARTOZÓ(lmnop) AND s=j AND l=s)} |
Amint azt korábban már említettük, megmutatható, hogy bármely lekérdezés, amely felírható a relációalgebrában, felírható tartomány alapú vagy rekord alapú relációkalkulusban is. Bármely tartomány alapú vagy rekord alapú relációkalkulusbeli biztonságos kifejezés ugyancsak felírható a relációalgebrában.
A QBE nyelv a tartomány alapú relációkalkuluson alapul, bár ezt később valósították meg, a tartománykalkulus formalizálása után. A QBE volt az első, adatbázisrendszerekhez kifejlesztett grafikus lekérdező nyelvek egyike, minimális szintaktikával. Az IBM Research-nél fejlesztették, és hozzáférhető az IBM kereskedelmi termékeként mint a DB2-höz interfészt kínáló Query Management Facility (QMF) része. Sok másik kereskedelmi termék is merített ötleteket belőle, fontos helyet foglal el a relációs nyelvek palettáján.
[25] Megjegyzendő, hogy a csak a feltételekben aktuálisan használt tartományváltozók kvantálása, illetve egy olyan, a tartományváltozók elválasztására szolgáló vesszők nélküli predikátum használata, mint a DOLGOZÓ(qrstuvwxy), kizárólag csak kényelmi célból használt rövidítés; semmiképpen sem helyes formális jelölés.