Baze de date
Limbajul SQUARELimbajul SQUARE Limbajul SQUARE a fost o prima versiune a unui limbaj de cereri pentru SGBD System R proiectat de IBM in San Jose. In acest limbaj sunt prevazute si alte operatii decat cle in algebra relationala, cum ar fi numirea unor tupluri in relatii sau operatori din teoria multimilor de tipul incluziune sau apartenenta. Operatorii reuniune si diferenta se exprima ca in algebra relationala, iar intersectia se trateaza asemantor. Produsul cartezian al relatiilor R si S se exprima prin: rIR, sIS Proiectia relatiei R dupa atributele A1,A2,,An se exprima prin: A1,A2,,AnR Iar pentru selectia sF(R) se foloseste expresia: rIR:F’ unde F’ se obtine din F prin inlocuirea lui Asau a numarului de componenta corespunzator lui A prin rA. Se pot face atribuiri de forma: RA1,A2,,An expresie unde expresie reprezinta o relatie n-ara. Aceasta atribuire produce evaluarea expresiei respective si atribuirea pentru ea a numelui R si a atributelor specificate. Nu exista posibilitatea unei evaluari ulterioare ca in ISBL. O operatie des utilizata in SQUARE este un tip special de selectie urmata de o proiectie numita aplicatie, cele doua operatii efectuandu-se in acelasi timp. Operatia are forma generala: A1,A2,,AnRB1,B2,,Bm(q1b1,q2,b2,,qmbm) unde R este numele unei relatii, A1,A2,,An si B1,B2,,Bm sunt atribute ale lui R, qi reprezinta un operator de comparatie aritmetica (=, < > sau ) care poate fi omis si in acest caz se ia prin lipsa =, iar bi este o constanta. Aplicatia precedenta corespunde expresiei din algebra relationala: pA1,A2,,An sB1q1b1 Bmqmbm (R)) Aplicatiile pot fi compuse folosind operatorul o. Compunerea are efectul unei echiuniuni de relatii.
Exemplu: Consideram o baza de date constituita din urmatoarele relatii: CUMPARATORI(NUME,ADRESA,CONT) COMENZI(NR COM,NUME,MARFA,CANTITATE) MAGAZINE(NUMEMAG,ADRESAMAG,MARFA,PRET) O cerere de tipul: listeaza cumparatorii care au contul negativ, se poate exprima sub forma: NUMECUMPARATORICONT(<0) Raspunsul la cererea: listeaza numele magazinelor, marfurile si preturile tuturor magazinelor care vand cel putin o marfa comandata de Ionescu Iosif se poate exprima prin expresia: NUMEMAG,MARGA,PRETMAGAZINEMARFAoMARFACOMENZINUME(„Ionescu Iosif”) In SQUARE sunt permise variabile tuplu numite variabile libere, ele putand sa aiba ca indici o lista de nume de atribute ce dau componentele care se considera pentru tuplul respectiv. Daca nu apare aceasta lista, se considera toate atributele relatiei parcursa de variabila tuplu. O expresie de forma: (t1)a1IR1,,(tk)akIRk:y corespunde expresiei din calculul relational pe tupluri: unde w contine egalitati de forma u[j]=ti[m] cu m si i alese in asa fel incat j= a1 a2 ai-1 +m si m ai , unde ai reprezinta numarul elementelor din lista ai si formula y contine aplicatii, operatori algebrici , -, operatori booleeni, operatii aritmetice si comparatii aritmetice si de multimi (=, etc.). expresia prezentata pentru produsul cartezian este un caz particular de acest tip de expresie in care formula y fiind omisa, se presupune tot timpul adevarata si, luandu-se toate combinatiile de tupluri din relatia R cu toate combinatiile de tupluri din relatia S, se obtine produsul cartezian. Prima cerere din exemplul anterior mai poate fi scrisa sub forma: tNUMEICUMPARATORI:tCONT<0 O cerere de tipul:listeaza toate magazinele care vand toate marfurile comandate de Ionescu Iosif poate fi scrisa sub forma: sNUMEMAGIMAGAZINE:(MARFACOMENZINUME(„Ionescu Iosif”) MARFAMAGAZINENUMEMAG(sNUMEMAG) Inserarea unui tuplu in relatia R se face prin expresii de forma: RA1,A2,…An(a1,a2,…,an) unde A1,A2,…,An este lista atributelor lui R ce primescvalori in tuplul respectiv a1,a2,…,an, restul atributelor ramanand nedefinite. Operatia de inserare se mai poate scrie: RA1,A2,…An(expresie) unde valoarea expresie este o relatie n-ara S, urmand sa se faca o inserare de tuplu in R corespunzatoare fiecarui tuplu din S. Stergerea unor tupluri se poare face cu expresii de forma: RA1,A2,…An(expresie) efectul fiind eliminarea din relatia R a tuturor tuplurilor t pentru care exista un tuplu u in S care are aceleasi valori pentru atributele A1,A2,…,An ca si t. Modificarea unor tupluri se face cu expresii de forma: RA1,A2,…,An;B1,B2,…Bm(a1,a2,…,an,b1,b2,…,bm) unde A-urile si B-urile sunt atribute ale lui R, B-urile putand fi precedate de operatorii aritmetici +,-, sau /, a-urile si b-urile sunt constante, iar efectul este: se cauta in R acele tupluri pentru care valorile corespunzatore atributelor A1,A2,…,An sunt respectiv a1,a2,…,an si pentru aceste tupluri se inlocuiesc valorile fiecarui Bi cu bi daca Bi nu este precedat de un operator aritmetic sau cu valoarea rezultata din operatia efectuata intre fosta valoare a lui Bi si bi, in cazul in care Bi este precedat de un operator aritmetic. Avand exemplul anterior, putem insera un nou cumparator cu instructiunea: CUMPARATORINUME,ADRESA,CONT(“Popescu Paul”,”Balea”,0) Comenzile celor care nu dispun de bani pot fi anulate printr-o comanda de tipul: COMENZINUME(NUMECUMPARATORICONT(<0)) Se pot adauga bani in contul lui Ionescu Iosif cu comanda: CUMPARATORINUME;+CONT(“Ionescu Iosif”,20000) In limbajul SQUARE se pot aplica unor relatii unare functile agregat COUNT pentru numarare, AVG pentru media aritmetica, SUM pentru suma elementelor, MIN pentru aflarea celei mai mici valori, MAX pentru aflarea celei mai mari valori din relatia respectiva. La aplicarea functiilor COUNT, AVG, SUM trebuie tinut cont de faptul ca in acest limbaj sunt eliminate dublurile , deci fiecare valoare unara va fi luata in considerare o singura data. Cum de cele mai multe ori relatia la care se aplica o functie agregat se obtine ca o proiectie dupa un atribut a unei relatii r, pentru a nu se elimina din proiectie dublurile se scrie R in loc de R. De exemplu, in loc de SUM(CONTCUMPARATORI) vom scrie SUM(CONTCUMPARATORI
|