baze de date_sql.pdf

11
  ELEMENTE SQL Unul dintre cele mai puternice limbaje structurate pentru interogarea datelor, SQL (Structured Query Language), a devenit un standard pentru o gamă din ce în ce mai largă de sisteme pentru gestiunea bazelor de date. A fost construit în 1986 de către ANSI (American National Standards Institute). De atunci, este considerat a fi un standard interaţional avizat de către ISO (International Organization for Standardization) şi IEC (International Electrotechnical Comission). A fost adoptat ca fiind standard federal de către FIPS (american Federal Information Processing Standard). În cadrul acestui capitol se vor prezenta comanda Select – care permite realizarea interogării bazelor de date,  precum şi instrucţiunile care permit actualizarea datelor (adăugarea, modificarea şi ştergerea datelor  prin comenzi SQL). Instrucţiuni SQL Limbajul SQL (Structured Query Language) este un limbaj structurat de interogări şi gestionare a bazelor de date relaţionale. Access foloseşte SQL ca limbaj de interogare. În momentul creării unei interogări în modul de interogare Design, Access construieşte în paralel instrucţiunile SQL echivalente. De altfel, majoritatea proprietăţilor interogărilor în modul de interogare Design prezintă clauze echivalente şi opţiuni accesibile în limbajul SQL. Avantajele  utilizării instrucţiunii SQL în VBA sunt următoarele:  viteza de execuţie: o instrucţiune Select este mai rapidă decât parcurgerea secvenţială a unui tabel.   performanţă mai bună: în modul client/server, interogările sunt compilate de SGBD care le optimizează performaţele.  întreţinere mai uşoară: codul de instrucţiuni SQL este mai scurt, deci mai uşor de citit, decât echivalentul său în VBA.  standardizare: limbajul SQL este standardul de interogar e al bazelor de date relaţionale. 1  SQL are următoarele componente: 1.  DDL Data Definition Language (limbaj de definire a datelor): include comenzi legate de crearea, modificarea şi ştergerea schemei de structură a bazei de date şi/sau a tabelelor. Dintre comenzile cele mai des întâlnite amintim: CREATE TABLE, ALTER TABLE, DROP TABLE; 2.  DML  Data Manipulation Language (limbaj de manipulare a datelor): include comenzi  pentru a realiza interogări şi pentru a modifica datele stocate în tabele. Dintre cele mai des utilizate comenzi amintim: SELECT, INSERT INTO, UPDA TE, DELETE; 3.  DCL  Data Control Language (limbaj de control a datelor): include comenzi pentru menţinerea securităţii şi a confidenţialităţii bazei de date. Dintre comenzile uzuale amintim: GRANT (acordarea drepturilor unui utilizator) şi REVOKE (revocarea drepturilor unui utilizator). Vocabularul SQL cuprinde o serie de cuvinte cheie, dintre care amintim:  instrucţiuni  – determină execuţia unei anumite acţiuni (de exemplu Create Table, Select, Delete);  clauze  – permit specificarea unor argumente care nuanţează instrucţiunile, delimitând entităţile participante la interogare (exemple de clauze: From, Where, Group By, Order By); 1 Giulvezan C., Mircea G., Târnăveanu D., Margea C. –  Baze de date, Editura Universităţii de Vest, Timişoara, 2009, p.59  

Upload: christina-garcia

Post on 04-Nov-2015

2 views

Category:

Documents


0 download

TRANSCRIPT

  • ELEMENTE SQL

    Unul dintre cele mai puternice limbaje structurate pentru interogarea datelor, SQL (Structured Query Language), a devenit un standard pentru o gam din ce n ce mai larg de sisteme pentru gestiunea bazelor de date. A fost construit n 1986 de ctre ANSI (American National Standards Institute). De atunci, este considerat a fi un standard interaional avizat de ctre ISO (International Organization for Standardization) i IEC (International Electrotechnical Comission). A fost adoptat ca fiind standard federal de ctre FIPS (american Federal Information Processing Standard). n cadrul acestui capitol se vor prezenta comanda Select care permite realizarea interogrii bazelor de date, precum i instruciunile care permit actualizarea datelor (adugarea, modificarea i tergerea datelor prin comenzi SQL).

    Instruciuni SQL

    Limbajul SQL (Structured Query Language) este un limbaj structurat de interogri i gestionare a bazelor de date relaionale. Access folosete SQL ca limbaj de interogare. n momentul crerii unei interogri n modul de interogare Design, Access construiete n paralel instruciunile SQL echivalente. De altfel, majoritatea proprietilor interogrilor n modul de interogare Design prezint clauze echivalente i opiuni accesibile n limbajul SQL.

    Avantajele utilizrii instruciunii SQL n VBA sunt urmtoarele: viteza de execuie: o instruciune Select este mai rapid dect parcurgerea secvenial a unui

    tabel. performan mai bun: n modul client/server, interogrile sunt compilate de SGBD care le

    optimizeaz performaele. ntreinere mai uoar: codul de instruciuni SQL este mai scurt, deci mai uor de citit, dect

    echivalentul su n VBA. standardizare: limbajul SQL este standardul de interogare al bazelor de date relaionale.1

    SQL are urmtoarele componente: 1. DDL Data Definition Language (limbaj de definire a datelor): include comenzi legate de

    crearea, modificarea i tergerea schemei de structur a bazei de date i/sau a tabelelor. Dintre comenzile cele mai des ntlnite amintim: CREATE TABLE, ALTER TABLE, DROP TABLE;

    2. DML Data Manipulation Language (limbaj de manipulare a datelor): include comenzi pentru a realiza interogri i pentru a modifica datele stocate n tabele. Dintre cele mai des utilizate comenzi amintim: SELECT, INSERT INTO, UPDATE, DELETE;

    3. DCL Data Control Language (limbaj de control a datelor): include comenzi pentru meninerea securitii i a confidenialitii bazei de date. Dintre comenzile uzuale amintim: GRANT (acordarea drepturilor unui utilizator) i REVOKE (revocarea drepturilor unui utilizator).

    Vocabularul SQL cuprinde o serie de cuvinte cheie, dintre care amintim:

    instruciuni determin execuia unei anumite aciuni (de exemplu Create Table, Select, Delete);

    clauze permit specificarea unor argumente care nuaneaz instruciunile, delimitnd entitile participante la interogare (exemple de clauze: From, Where, Group By, Order By);

    1 Giulvezan C., Mircea G., Trnveanu D., Margea C. Baze de date, Editura Universitii de Vest, Timioara, 2009, p.59

  • funcii efectueaz prelucrri asupra anumitor date denumite argumentele sau parametrii funciei, rezultatele returnate fiind utilizate n cadrul unei clauze SQL. Funciile i operatorii prezentai n paragraful 5.4.1 sunt valabili i n SQL.

    Principalele reguli de sintax sunt:

    orice instruciune SQL se termin cu simbolul punct i virgul; SQL utilizeaz ierarhia obiectelor din modelele orientate pe obiecte, caracterul punct

    separnd un obiect de un atribut sau o metod a acestuia. De exemplu, numele_tabelei.numele_cmpului;

    parantezele drepte se utilizez atunci cnd un nume de tabel sau cmp conine caracterul spaiu, de exemplu [Denumire Furnizor];

    caracterul virgul este utilizat pentru a delimita valorile unei liste (de exemplu lista cmpurilor);

    valorile de tip Number sunt scrise direct, fr a fi ncadrate de nici un alt caracter; valorile de tip Text sunt ncadrate ntre caracterul apostrof (de exemplu: Timioara); valorile de tip dat calendaristic sunt ncadrate ntre caracterul diez (de exemplu:

    #31/12/2011#).

    Reguli de editare n cazul instruciunilor SQL2: fiecare clauz a interogrii se plaseaz pe cte o linie separat, indentat fa de instruciunea

    din care face parte; nceputul fiecrei clauze va fi aliniat cu nceputul celorlalte; dac o clauz este fragmentat, fiecare din prile ei constitutive se poziioneaz pe cte o linie

    separat i se indenteaz fa de nceputul clauzei; pentru evidenierea cuvintelor rezervate, specifice SQL, se folosesc majuscule.

    Atunci cnd se scriu instruciunile n format general, exist mai multe convenii de notare: cuvintele rezervate sunt scrise cu majuscule; cuvintele definite de utilizator se scriu cu litere mici; bara vertical semnific separarea mai multor elemente alternative care se exclud reciproc

    (doar unul din acestea poate fi s apar); parantezele drepte [ ] ncadreaz un element opional; acoladele {} ncadreaz un element obligatoriu; punctele de suspensie semnaleaz repetarea opional a unui element al unei liste.

    Comanda CREATE TABLE

    Pentru a creea o tabel de referin se poate utiliza urmtorul format general:

    unde numet1 este numele tabelului creat, numec1, numec2,... sunt numele cmpurilor care vor constitui structura tabelului. Tip1, tip2, ... sunt tipurile de date suportate de limbajul SQL vezi figura 1. PRIMARY KEY semnifica setarea unui cmp ca fiind de tip cheie primar. Atributul NOT NULL semnific faptul c acel cmp este este obligatoriu s fie completat (echivalentul proprietii Required din Access). Programatorii folosesc o denumire pentru fiecare constrngere utilizat (Primary Key, Foreign Key, Not Null, Unique). Denumirea constrngerii este poziionat n faa constrngerii, dup cuvntul predefinit CONSTRAINT. Numele constrngerilor sunt formate dintr-un prefix urmat de numele cmpului pe care este setat. Prefixul este prestabilit:

    pk (pentru PRIMARY KEY); nn (pentru NOT NULL);

    2 Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p. 71

    CREATE TABLE numet1 (numec1 tip1 [CONSTRAINT nn_c1 NOT NULL]

    [CONSTRAINT pk_c1] PRIMARY KEY, numec2 tip2 [CONSTRAINT nn_c2 NOT NULL], );

  • un (pentru UNIQUE); fk (pentru FOREIGN KEY).

    ntre tipurile de date din Access (din Design View) i tipurile de date din SQL nu exist o

    coresponden perfect figura 10.1.

    Access SQL Double Number

    Long Integer Integer Yes/No Logical

    Date/Time Date Text Text

    Figura 10.1. Corespondenele ntre tipurile de date din Access i SQL

    Pentru tipul de date Text, dac nu se specific lungimea acestuia, valoarea implicit este de 255 de caractere. Dac un nume de cmp conine caracterul space, acesta trebuie pus ntre paranteze drepte. De exemplu, [Nume Prenume].

    Exemplu: S se creeze o tabel cu turitii unei agenii de turism. Pentru acetia vom cunoate CNP-ul, numele i prenumele, seria i numrul de pe cartea de identitate, data naterii, telefonul i numrul de paaport. CREATE TABLE Turisti (CNP_turist TEXT(13)

    CONSTRAINT pk_CNP_turist PRIMARY KEY, numepren_turist TEXT(30), serienrCI TEXT (8), datanast_turist DATE, telefon TEXT (12), nrpass_turist NUMBER);

    Pentru a creea o tabel cu o cheie primar compus, se utilizeaz urmtorul format general:

    Pentru crearea unei chei primare compuse, constrngerea va fi specificat la sfrit, numele acesteia va fi format din prefix i numele celor dou cmpuri. Dup PRIMARY KEY se specific ntre paranteze cmpurile care compun cheia primar.

    Exemplu: S se creeze o tabel cu o cheie primar compus. Tabela va avea numele ProduseFacturate i va conine urmtoarele cmpuri: numrul facturii, numrul curent al produsului de pe factur, cantitate, pre unitar, unitatea de msur i cotaTVA. Cheia primar va fi compus din cmpurile nr_f i nr_crt. CREATE TABLE ProduseFacturate (nr_f INTEGER NOT NULL,

    nr_crt INTEGER NOT NULL, cantitate NUMBER, pret_u NUMBER, um TEXT (10), cotaTVA NUMBER, CONSTRAINT pk_nrfcrt PRIMARY KEY (nr_f, nr_crt));

    Pentru a creea o tabel referit, se utilizeaz urmtorul format general:

    CREATE TABLE numet2 (numec1 tip1 [CONSTRAINT nn_c1] [NOT NULL],

    numec2 tip2 [CONSTRAINT nn_c2][NOT NULL], , [CONSTRAINT pk_nc1c2] PRIMARY KEY (numec1,numec2));

    CREATE TABLE numet3 (numec1 tip1 [CONSTRAINT nn_c1 NOT NULL] [CONSTRAINT pk_c1 ]PRIMARY KEY,

    numec2 tip2 [CONSTRAINT nn_c2 NOT NULL] [CONSTRAINT fk_nc2] REFERENCES numet1(numec1), );

  • Pentru a creea o tabel referit este necesar crearea legturii cu tabela de referin. Cnd se definete cmpul de legtur, acesta trebuie s fie de acelai tip ca i cmpul corespunztor din tabela de referin, apoi se creeaz o constrngere de tip FOREIGN KEY, iar dup cuvntul predefinit REFERENCES se alege numele tabelei de referin i n parantez numele cmpului de legtur din tabela de referin. Numele celor dou cmpuri nu trebuie s fie identice.

    Exemplu: S se creeze o tabel cu contractele ncheiate de ctre turitii ageniei de turism. Se presupune c un turist ncheie mai multe contracte, cunoscndu-se numrul contractului, data contractului, tipul serviciului, data plecrii, data sosirii, ara i beneficiarii (numele celorlalte persoane din familie, dac este cazul). CREATE TABLE Contracte (nrc INTEGER

    CONSTRAINT pk_nrc PRIMARY KEY, datac DATE CONSTRAINT nn_datac NOT NULL, tip_serv TEXT(30), data_plec DATE, data_sos DATE, tara TEXT (20), benef TEXT (120), CNP_turist TEXT(13) CONSTRAINT fk_CNP_turist REFERENCES Turisti (CNP_turist));

    Comanda ALTER TABLE

    Comanda ALTER TABLE modific structura tabelei, permind adugarea unui nou cmp sau tergerea unui cmp, precum i modificarea proprietilor acestora.

    Dac se dorete adugarea unui nou cmp:

    Exemplu: S se adauge n tabela Contracte cmpul suma_platita. ALTER TABLE Contracte ADD COLUMN (suma_platita NUMBER);

    Dac se dorete tergerea unui cmp:

    Exemplu: S se tearg cmpul ara din tabela Contracte. ALTER TABLE Contracte DROP COLUMN tara;

    ALTER TABLE numet1 ADD COLUMN (numec1 tip1, numec2 tip2, ...);

    ALTER TABLE numet1 DROP COLUMN numec1;

  • Dac se dorete modificarea proprietilor unui cmp:

    Exemplu: S se modifice dimensiunea cmpului benef din tabela Contracte. ALTER TABLE Contracte ALTER COLUMN benef TEXT(100);

    Dac se dorete adugarea unei constrngeri:

    Exemplu: S se adauge o constrngere de tip NOT NULL pentru cmpul data_plec din tabela Contracte. ALTER TABLE Contracte ALTER COLUMN data_plec CONSTRAINT nn_data_plec

    NOT NULL; Dac se dorete tergerea unei constrngeri:

    Exemplu: S se tearg constrngerea de tip NOT NULL impus pe cmpul datac. ALTER TABLE Contracte DROP CONSTRAINT nn_datac;

    Comanda DROP TABLE

    Comenda DROP TABLE terge fizic tabela (nu doar datele din tabel ci i structura acesteia).

    Exemplu: S se tearg tabela Turisti. DROP TABLE Contracte;

    Dac o tabel este de referin, nu poate fi tears datorit relaiei pe care o are cu tabela

    referit. Pentru a rezolva acest neajuns, se terge condiia de legtur dintre tabele cu ajutorul comenzii ALTER TABLE, apoi se terge tabela.

    DROP TABLE numet1;

    ALTER TABLE numet1 ALTER COLUMN numec1 tip_nou;

    ALTER TABLE numet1 ALTER COLUMN numec1 [CONSTRAINT numeconst]

    {PRIMARY KEYUNIQUENOT NULL};

    ALTER TABLE numet1 DROP CONSTRAINT numeconst;

  • Exemplu: S se tearg tabela Turisti. ALTER TABLE contracte DROP CONSTRAINT fk_CNP_turist; DROP TABLE Turisti;

    Comanda INSERT INTO

    Comanda INSERT INTO insereaz o nregistrare ntr-un tabel. Formatul general este:

    Specificarea listei cmpurilor este opional. Dac lista cmpurilor este omis, toate cmpurile

    din tabel vor fi completate, n ordinea n care ele au fost create, cu valorile specificate n lista de valori.

    Dac lista cmpurilor apare dar nu este complet, unele cmpuri lipsind, acele cmpuri care nu apar n list vor fi completate cu valoarea NULL, sau cu valoarea setat ca valoare implicit (DEFAULT). Din pcate, n standardul minimal, setarea unei valori predefinite nu este permis.

    Numrul cmpurilor din lista de cmpuri trebuie s fie identic cu numrul valorilor din lista valorilor, iar valorile trebuie s corespund ca tip tipului de date a cmpurilor din lista de cmpuri.

    Exemplu: S se introduc o nregistrare n tabela Turiti i dou nregistrri n tabela Contracte (presupunem c tabela are structura de la creare). INSERT INTO Turisti VALUES (1711227136548, POP Ion,

    TM569856, #27.12.1971#, 0730126589, 9856978); INSERT INTO Contracte VALUES (1452, #04.11.2011#, Charter,

    #30.12.2011#, #06.01.2012#, Cuba, POP Maria, POP Carla, 1711227136548);

    INSERT INTO Contracte (nrc, datac, tip_serv, data_plec, data_sos, tara, CNP_turist)

    VALUES (1453, #25.11.2011#, Bilete avion, #08.04.2012#, #18.04.2012#, Italia, 1711227136548);

    Comanda DELETE

    Comanda Delete terge nregistrrile care verific condiia specificat n clauza Where dintr-o tabel. Dac clauza Where nu apare, sunt terse automat toate nregistrrile. Tabela nu dispare fizic, sunt terse doar nregistrrile, structura tabelei rmnnd neschimbat.

    Formatul general:

    Exemplu: S se tearg din tabela Contracte contractul cu codul 1453. DELETE FROM Contracte WHERE nrc=1453;

    Comanda UPDATE

    INSERT INTO numet1 [(numec1, numec2, )] VALUES

    (valoare1, valoare2, ...);

    DELETE FROM numet1 [WHERE conditie];

  • Comanda Update permite modificarea valorilor unuia sau mai multor cmpuri. Formatul general este:

    Dac clauza WHERE nu apare, vor fi modificate toate valorile cmpului respectiv. n partea din dreapta egalitii se poate folosi o expresie de calcul (o formul) care s aib ca rezultat valoarea care va fi depozitat n cmpul respectiv, sau valoarea poate fi obinut ca rezultat al unei interogri (comanda SELECT).

    Exemplul 1: S se modifice valoarea cmpului ara din tabela Contracte n Spania, pentru

    contractul cu numrul 1453. UPDATE Contracte SET tara=Spania WHERE nrc=1453;

    Exemplul 2: Presupunnd c n tabela Contracte s-a adugat cmpul suma_platita, s se micoreze valoarea sumei cu 2% pentru contractul cu numrul 1453 (clientului i se acord o reducere de 2%). UPDATE Contracte SET suma_platita=suma_platita-(2/100*suma_platita) WHERE nrc=1453;

    Comanda SELECT

    Comanda SELECT permite filtrarea datelor din una sau mai multe tabele pe baza unor condiii. Formatul general al comenzii: unde:

    comanda SELECT afieaz nregistrri din una sau mai multe tabele; clauza From specific numele tabelei sau a tabelelor surs a interogrii. Dac datele provin din

    mai multe tabele, este necesar adugarea unei condiii de legtur n cadrul clauzei WHERE sau setarea unei jociuni ntre tabele. Dac se dorete afiarea unui cmp care apare n dou tabele, este necesar precizarea numelui tabelei din care acesta face parte. Numele tabelei este separat de numele cmpului prin caracterul punct (de exemplu: Produse.CodProdus);

    nregistrrile pot fi distincte (dac clauza DISTINCT este selectat o valoare va apare o singur dat) sau nu;

    filtrarea nregistrrilor se face n funcie de evaluarea condiiei logice din cadrul clauzei Where (dac aceasta este selectat);

    dac se utilizez clauza Group By, aceasta va grupa nregistrrile n funcie de criteriul de grupare. n acest caz pot fi adugate condiii pentru grupurile astfel create utilizndu-se clauza Having;

    poate fi impus o ordine de sortare dac se utilizeaz clauza Order by, valoarea implicit fiind Ascending;

    simbolul * semnific selecia tuturor cmpurilor din acea tabel. Dac se dorete omiterea unor cmpuri, se va specifica lista cmpurilor fr a specifica cmpurile respective. Ambele liste lista_campuri i lista_tabele conin elemente desprite ntre ele prin virgul.

    SELECT [DISTINCT] *lista_campuri FROM lista_tabele

    [WHERE conditie] [GROUP BY crit_grupare] [HAVING crit_dupa_grupare]

    [ORDER BY el_ordonare [ASCDESC]];

    UPDATE numet1 SET numec1={expresie1(SELECT ...)}

    numec2={expresie2(SELECT ...)} [WHERE conditie];

  • n scrierea interogrilor de selecie este posibil utilizarea funciilor totalizatoare. Dintre acestea

    amintim: COUNT returneaz numrul total de nregistrri; SUM afieaz suma valorilor unui cmp (se poate folosi doar pentru cmpuri numerice); AVG calculeaz media aritmetic a valorilor unui cmp numeric; MAX afieaz valoarea maxim din cadrul valorilor unui cmp, dar nu poate fi folosit n

    cadrul clauzei WHERE; MIN afieaz valoarea minim din cadrul valorilor unui cmp, dar nu poate fi folosit n

    cadrul clauzei WHERE.

    Comenzi SELECT simple

    Comenzile SELECT simple au ca surs nregistrrile dintr-un singur tabel. Considerm urmtorul tabel: Studeni cu structura CNP, nume_prenume, serie _numrCI (seria

    i numrul crii de identitate), localitate, adresa, data_nasterii, an_studiu i medie_an_anterior.

    Exemplul 1: S se afieze toi studentii. SELECT * FROM studenti;

    Exemplul 2: S se afieze CNP-ul i numele tuturor studenilor. SELECT CNP, nume_prenume FROM studenti;

    Exemplul 3: S se afieze CNP-ul i numele tuturor studenilor din Timioara. SELECT CNP, nume_prenume FROM studenti

    WHERE localitate=Timisoara;

    Exemplul 4: S se afieze numrul studenilor din Timioara. SELECT COUNT(*) FROM studenti

    WHERE localitate=Timisoara;

    Exemplul 5: S se afieze numele i s se calculeze vrsta studenilor din anul 2 de studiu. SELECT nume_prenume, YEAR(Date())-YEAR(data_nasterii) FROM studenti

    WHERE an_studiu=2;

    Exemplul 6: S se afieze numele studenilor care ncep cu litera A i sunt nscui n luna octombrie 1980. SELECT nume_prenume FROM studenti

    WHERE nume_prenume LIKE A* AND datan BETWEEN #01/10/1980# AND #31/10/1980#;

    Comenzi SELECT complexe

    Comenzile SELECT complexe au ca surs nregistrrile din mai multe tabele conectate ntre ele pe baza unei relaii de legtur. Se pot distinge mai multe tipuri de jonciuni:

  • jonciunea natural (echijonciunea, jonciunea echivalent), care prespune folosirea clauzei Where urmat de o condiie de legtur de egalitate ntre cmpurile corespondente (=). Aceast condiie vizeaz egalitatea valorilor din cmpurile corespondente;

    jonciuni ne-echivalente determinai de folosirea clauzei Where i a unei condiii de legtur exprimat prin comparaii (, =, , BETWEEN, IN, LIKE);

    cross (jonciunea ncruciat) mai puin utilizat, cu rol n analiza multidimensional a datelor.

    Se va prezenta n continuare jonciunea natural. Formatul general:

    unde domeniul de selecie poate fi: ALL (vor fi returnate toate nregistrrile), DISTINCT, DISTINCTROW (vor fi afiate doar nregistrrile distincte), TOP n [PERCENT] (vor fi returnate doar primele n nregistrri sau un procent din numrul total de nregistrri, nregistrrile fiind ordonate cu ajutorul clauzei Order By).

    n acest caz, nregistrrile unui tabel se combin rnd pe rnd cu toate nregistrrile din cellalt table (se efectueaz produsul cartezian), relaia dintre cele dou tabele fiind stabilit ulterior, prin condiia de jonciune specificat n clauza Where.

    n mod uzual, compunerile de tabele au la baz condiii de tipul cheie primar-cheie strin. Considernd tabela Studenti creat anterior, se consider tabela Centrepractic, cu structura:

    IDcentru, Den_centru, Adresa, Localitate, NumeTutore. n tabela studeni se va aduga cmpul IDcentru (unui centru de practic sunt arondai mai muli studeni).

    Exemplul 1: S se afieze numele tutorelui i a studenilor arondai acestuia. SELECT NumeTurore, nume_prenume FROM studenti, Centrepractica WHERE studenti.IDcentru=Centrepractica.IDcentru;

    Exemplul 2: S se afieze numrul i numele centrelor de practic din Timioara i CNP-ul studenilor. SELECT Centrepractica.IDcentru, Den_centru, CNP FROM studenti, Centrepractica WHERE studenti.IDcentru=Centrepractica.IDcentru AND

    Centrepractica.localitate=Timisoara; O alt abordare a jociunilor mparte compunerile tabelelor n:

    interne (INNER JOIN) liniile celor dou tabele se combin pe baza valorilor identice ale cmpurilor corespondente;

    externe (OUTER JOIN) destul de rar utilizate, sunt de dou tipuri: de stnga LEFT [OUTER] JOIN i de dreapta RIGHT [OUTER] JOIN. Acestea produc linii n setul de rezultate chiar dac condiia de legtur nu este verificat. Setul de nregistrri rezultat conine liniile celor dou tabele, combinate pe baza valorilor identice ale cmpurilor de legtur, la care se adaug nregistrrile fr corespondent n tabelul care constituie fie membrulstng al compunerii, fie membrul drept. Specificatorul Outer este opional. n cazul compunerilor externe este important poziia tabelelor3.

    Formatul general al interogrilor ce include compuneri de tabele:

    3 Florescu V. (coord.), Ionescu B. (coord.), Cozgarea G., et al Baze de date, Editura Infomega, Bucureti, 2009, p.93

    SELECT [domeniu_selectie] lista_campuri FROM numet1, numet2, ...

    WHERE conditie_jonctiune [AND criterii_de_selectie];

  • Se vor considera n continuare tabelele Studenti i CentrePractica.

    Exemplul 1: S se afieze numele tutorelui i a studenilor arondai acestuia. SELECT NumeTurore, nume_prenume

    FROM studenti INNER JOIN Centrepractica ON studenti.IDcentru=Centrepractica.IDcentru;

    Exemplul 2: S se afieze numrul i numele centrelor de practic din Timioara i CNP-ul studenilor. SELECT Centrepractica.IDcentru, Den_centru, CNP FROM studenti INNER JOIN Centrepractica ON studenti.IDcentru=Centrepractica.IDcentru

    WHERE Centrepractica.localitate=Timisoara;

    Agregri de date

    Funciile de grup permit constuirea unor interogri de sintetizare a datelor (Totals). Utilizatorul poate efectua calcule pentru grupuri de nregistrri care au cmpuri cu aceeai valoare (de exemplu calcularea mediei studenilor pe fiecare grup n parte).

    Formatul general al instruciunii4: unde:

    funciile agregate sunt cele amintite n cadrul instruciunilor SELECT simple: COUNT, SUM, MIN, MAX, AVG, etc.

    lista_selectie seminific una sau mai multe funcii agregate care au ca argumente cmpuri ale bazei de date;

    AS alias asociaz un pseudonim rezultatului utilizrii funciei agregat; GROUP BY precizeaz cmpul sau cmpurile care vor fi criterii de grupare (echivalentul

    liniei Total din cadrul unei interogri de sintetizare a datelor); HAVING criteriu care va fi aplicat cmpului definit ca argument al funciei agregat. Spre

    deosebire de clauza Where, criteriul va aciona naintea gruprii nregistrrilor.

    Se vor considera n continuare tabelele Studenti i CentrePractica.

    Exemplul 1: S se afieze numele tutorelui i numrul studenilor arondai acestuia. SELECT Den_centru, NumeTutore, COUNT(CNP) AS Nrstud FROM studenti, Centrepractica GROUP BY Den_centru, NumeTutore 4 Nstase P., Coscescu L., Covrig L., et al Tehnologia bazelor de date Access 2000, Editura Economic, Bucureti, 2000, p. 197

    SELECT [domeniu_selectie] lista_campuri FROM numet1

    {INNERLEFT[OUTER]RIGHT[OUTER]} JOIN numet2 ON conditie_jonctiune [WHERE criterii_de_selectie];

    SELECT [domeniu_selectie] [functie_agregata (numec1) AS alias1] [,lista_selectie]

    FROM numet1, numet2, ... GROUP BY camp_de_grupare [HAVING criteriu_de_grupare] [WHERE criterii_de_selectie];

  • WHERE studenti.IDcentru=Centrepractica.IDcentru ORDER BY NumeTutore;

    Exemplul 2: S se afieze denumirea centrelor de practic din Timioara, Arad i Deva care au

    mai mult de 5 studeni i numrul studenilor arondai. SELECT Den_centru, COUNT(CNP) As NrStud FROM studenti INNER JOIN Centrepractica ON studenti.IDcentru=Centrepractica.IDcentru GROUP BY Den_centru HAVING COUNT(CNP)>5

    WHERE Centrepractica.localitate IN (Timisoara,Arad,Deva);