Baze de date
Limbajul QUELLimbajul QUEL QUEL este un limbaj de cereri pentru INGRES, care este un sistem de gestiune a bazelor de date dezvoltat de Universitatea Berkeley din California si functioneaza sub sistemul de operare UNIX. Acest limbaj poate fi utilizat independent sau inclus in limbajul de programare C si, in acest caz, instructiunile lui sunt precedate de # si sunt prelucrate prin preprocesare. O expresie din calculul relational pe tupluri ce nu contine cuantificatori, poate fi scrisa in QUEL sub forma: unde y este o formula a calculului relational pe tupluri ce nu contine cuantificatori. Ea poate fi scrisa in QUEL sub forma: range of t1 is R1 range of tk is Rk retrieve (ti1.A1,…,tir.Ar) where y in care Am este al jm-lea atribut al relatiei Rim pentru m=1,2,…,k si y se obtine din y printr-o translatare dupa urmatoarele reguli: se inlocuiesc in y referintele lui u[m] cu tim[jim] printr-o corespondenta de tipul indicat anterior; se inlocuiesc apoi referintele lui tm[n] prin tm.B, unde B este al n-lea atribut al relatiei Rm pentru toti m si n; se inlocuieste cu < cu >= si cu !=; se inlocuiesc si cu and, or, respectiv not. Expresia range of t is R are semnificatia: toate operatiile care urmeaza pana la o redefinire a lui t se fac o data pentru fiecare tuplu al lui R, cu t considerat acel tuplu particular. Rezultatul este tiparirea unui tabel continand un cap de tabel in care apar denumirile atributelor A1,A2,…,Ar si urmat de tuplurile selectate. Se poate schimba numele atributului daca in loc de tim.Am se pune in retrieve B= tim.Am , in acest caz aparand B in loc de Am. Forma generala a lui retrieve este: retrieve[unique][into tablou](lista-rezultat)[where conditie][sort by campuri] cu lista-rezultat continand atribuiri despartite prin virgula de tipul: [nume-variabila=] expresie 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) Unei cereri de tipul: listeaza cumparatorii care au contul negativ, i se poate raspunde in QUEL sub forma:
range of t is CUMPARATORI retrieve (t.NUME) where t.CONT<0 Unei cereri de tipul:listeaza toate magazinele care vand toate marfurile comandate de Ionescu Iosif i se poate obtine raspunsul prin urmatoarea succesiune de expresii: range of t is COMENZI range of s is MAGAZINE retrieve (s.NUMEMAG,s.MARFA,s.PRET) where t.NUME=”Ionescu Iosif) and t.MARFA=s.MARFA In limbajul QUEL se pot sterge tupluri cu succesiunea urmatoare: range of t is R delete t where y(t) care sterge din R toate tuplurile t care fac adevarata formula: range of t1 is R1. range of tk is Rk append to S(A1=w1,,An=wn) where y(t1,,tk) care adauga relatiei S cate u tuplu pentru fiecare combinatie t1,,tk pentru care este y adevarata, tuplul respectiv avand drept valori rezultatul evaluarilor expresiilor w1,,wn in care intervin componente ale tuplurilor si constante eventual legate prin operatii aritmetice, pentru atributele A1,,An, restul atributelor fiind nedefinite (valoare nul). Se pot modifica tupluri dintr-o relatie prin succesiuni de forma: range of t is R replace t (lista-rezultate) [where conditie] Pentru a adauga cate o comanda de trei paini pentru toti cumparatorii care au cont pozitiv, se poate scrie succesiunea de comenzi: range of t is CUMPARATORI append to COMENZI (NR_COM=urmcom++, NUME=t.NUME,MARFA=”paine”,CANTITATE=3) Where t.CONT>0 unde am presupus o variabila C urmcom ce contine valoarea urmatorului numar de comanda care se atribuie unei noi comenzi. In QUEL nu sunt eliminate automat duplicatele la proiectie. Se poate face eliminarea lor cu instructiunea sort care, in plus, aseaza in ordine alfabetica tuplurile relatiei. Listarea numelor magazinelor si a adreselor lor se face cu succesiunea de comenzi in care, inainte de obtinerea rezulatului se face o sortare pentru eliminarea dublurilor. range of t is MAGAZINE retrieve into MAG(NUME=t.NUMEMAG,ADRESA=t.ADRESAMAG) sort MAG print MAG la tiparire cele doua coloane fiind numite NUME si ADRESA. Pentru a demonstra completitudinea lui QUEL, vom presupune ca relatiile R(A1,A2,,An) si S(B1,B2,,Bm) sunt date si ca prin aplicarea unei operatii se obtine o noua relatie T. Calculul lui T=R S (presupunand n=m) se face cu succesiunea de comenzi: range of r is R append to T(C1=r.A1,,Cn=r.An) range of s is S append to T(C1=s.B1,,Cn=s.Bn) Calculul diferentei T=R-S se scrie dupa cum urmeaza: append to T(C1=r.A1,,Cn=r.An) range of s is S range of T is T delete t where s.B1=t.C1 andand s.Bn=t.Cn Calculul produsului cartezian T=R S se scrie: range of r is R range of s is S append to T(C1=r.A1,,Cn=r.An,Cn+1=s.B1,,Cn+m=s.Bm) Calculul proiectiei T=pA1,A2,,Ak(R) se scrie: range of r is R append to T(C1=r.A1,,Ck=r.Ak) sort T Calculul selectiei sF(R) are loc astfel: range of r is R append to T(C1=r.A1,,Cn=r.An) where F unde F va fi obtinut din F prin transformarile discutate mai devreme. O cerere de tipul : listeaza toate magazinele care vand toate marfurile comandate de Ionescu Iosif se poate scrie in QUEL astfel: range of m is MAGAZINE range of n is MAGAZINE retrieve into MAG(MG=m.NUMEMAG,MR=n.MARFA) range of t is MAG delete t where t.MG=M.NUMEMAG and t.MR=n.MARFA range of r is COMENZI retieve into COM(MG=t.MG,MR=t.MR) where r.NUME=”Ionescu Iosif” andr.MARFA=t.MR retrieve into MAGA(MG=m.NUMEMAG) range of u is MAGA delete u where u.MG=j.MG sort MAGA print MAGA In limbajul QUEL se pot folosi functiile agregat count, avg, sum, min sau max, ele avand aceleasi semnificatii ca si in limbajul SQUARE. Functiile agregat countu, avgu si sumu elimina duplicatele. Referirea functiilor agregat se face: functie-agregat(expresie[where conditie]) Se pot partitiona tuplurile unei relatii in raport cu valorile uneia sau mai multor expresii calculate si se pot aplica functiile agregat pentru fiecare grup de tupluri pentru care s-au obtinut aceleasi valori pri calculele facute cu o expresie de forma: agregat(E by F1,F2,,Fk) unde E si F1,F2,,Fk sunt expresii cu operanzi constante sau termeni t.A, unde t este o variabila tuplu si a un atribut. Aceasta expresie produce gruparea inregistrarilor relatieiR parcursa de t in clase care dau aceleasi valori pentru expresiile F1,F2,,Fk iar pentru fiecare clasa in parte se calculeaza functia agregat pentru valorile expresiei E pentru fiecare din tuplurile clasei respective. Tiparirea marfurilor cu pretul lor mediu se poate face: range of m is MAGAZINE retrieve into MAG(MARFA=m.MARFA,PM=avg(m.PRET by m.MARFA)) sort MAG print MAG
|