Sunteți pe pagina 1din 77

Interogari parametrizate

Ce sunt interogarile parametrizate?


Sunt acele interogari ce depind de o valoare de input. De exemplu, decat sa facem cate o interogare pentru gasirea clientilor dintr-un anumit oras (una pentru Ploiesti, una pentru Bucuresti, ...), realizam o singura interogare parametrizata dupa Oras. La rularea acestei interogari o sa introducem orasul pentru care dorim clientii. De exemplu dorim sa gasim clientii din Bucuresti:

Problema este ca de fiecare data cand refolosim aceasta interogare ea ne afiseaza numai clientii din Bucuresti. Daca dorim sa-i vizualizam pe cei din Ploiesti trebuie refacuta interogarea. Putem modifica interogarea de mai sus astfel: -declaram valoarea Bucuresti ca fiind un parametru -de fiecare data cand ruleaza interogarea, utilizatorul va putea introduce alta valoare pt parametru.

Practic la rularea interogarii de mai sus apare mai intai o fereastra cu textul "Introduceti Orasul", sub acest mesaj apare un textbox unde se poate scrie un oras.

Interogari incrucisate (CrossTab Queries)


Interogari incrucisate (CrossTab Queries)

Conceptual de CrossTab Queries din Access este sinonim cu Pivot Table din Excel. El nu reprezinta altceva decat o imagine de ansamblu asupra datelor din tabele. Pentru a crea CrossTab Queries trebuie sa raspundem la cateva intrebari:

Care este coloana din tabelul nostru initial care va genera liniile in CrossTab Query? Observati ca in exemplul nostru, liniile reprezinta niste orase. Deci vom avea atatea linii distincte, cate orase avem in tabelul original. Care este coloana din tabelul original ce va genera coloanele in CrossTab Query? In exemplul nostru vom folosi profesia, si vom avea atatea coloane, cate valori distincte avem in coloanaProfesia. Care este coloana ce urmeaza a fi agregata? In cazul nostru avem veniturile. Care este functia agregata pe care o aplicam? Noi ne vom ocupa de media veniturilor.

Vom incerca sa cream exact tabelul din imaginea de mai sus. Din ribbon-ul Create > Query, facem click pe Query Design.

Din fereastra deschisa alegem tabela clienti, si apasam Add, apoiClose.

Din ribbon-ul contextual Design, sectiunea Query Type, trebuie sa alegem tipul Crosstab (acest pas este foarte important).

Prima coloana pe care o alegem este Orasul, iar in campul Crosstabalegem Row Heading.

In acelasi mod alegem coloana Profesia, unde mentionam Group By Column Heading, si coloana VenitLunar, unde nu mai avem grupare, ci alegem functia agregata AVG (media) iar la Crosstab avem Value.

Apasam Run. Observam ca tabelul afisat are coloanale generate dinamic: avem atatea coloana cate valori dinstincte avem in coloanaProfesia. Randurile se comporta la fel, pentru coloana Orasul. Tabelul creat este destul de clar si usor de interpretat.

Mai jos avem un alt exemplu de Crosstab Queries. Din ribbon-ul Create > Query, facem click pe Query Design. Din fereastra deschisa alegem toate cele 3 tabele, si apasam Add, apoiClose.

Din ribbon-ul contextual Design, sectiunea Query Type, trebuie sa alegem tipul Crosstab. Vrem sa realizam un Crosstab Query, ca in imaginea de mai jos. Sa vedem, pentru fiecare oras, care au fost vanzarile pe fiecare an, iar la final sa avem o coloana cu totalul vanzarilor.

Completati campul Orasul, care ca generea randurile, si campul calculat Anii: Year([DATAT]) care va genera coloanele.

In cea de-a treia coloana, introducem o formula care sa calculeze veniturile, ca Pret X Cantitate: Valoarea: Sum(Produse.Pret*Trazactii.Cantitatea) Atata timp cat la Field am introdus noi formula, la Total o sa alegemExpression. La Crosstab alegem Value.

Apasam Run. Observam ca tabelul afiseaza pentru fiecare oras in parte, valoarea vanzarilor, calculate ca produs intre pret si cantitate, pentru fiecare an.

Daca dorim sa vedem si suma totala, adaugam inca o coloana in designerul interogarii copiind aceeasi formula (cu aliasul Total), iar laCrosstab alegem Row Heading.

Apasam Run.

Observati ca implicit coloana Total a fost pusa dupa coloana Orasul, dar putem sa o mutam manual la sfarsit (Drag & Drop).

Subinterogari (Subqueries)
Subinterogari (Subqueries) Subinterogarile reprezinta o tehnica foarte puternica cu care putem sa extragem anumite valori relevante din baza de date. In tabela Clienti avem o coloana numerica denumita VenitLunar, si ne propunem sa gasim toti clientii care au un venit lunar mai mare decat media. In mod normal trebuie sa gasim intai media, apoi pe acei clienti care au venitul peste acea medie. Subinterogarile sunt acele select-uri ce nu se pot executa din prima, ci ele sunt dependente de alte interogari, subordonate. Vom avea un astfel de exemplu: Cine are venituri peste medie? (trebuie sa gasim mai intai media) Pana acum am lucrat cu designerul de interogari din Access, dar acum vom arunca o privire asupra interogarilor de tip SQL. Cine are venituri peste medie?

Mergem in Query Design, alegand doar tabela Clienti. Toate interogarile pe care noi le facem in designer, sunt traduse intr-un limbaj nativ al Accessului: SQL (Structured Query Language). Alegem modul de vizualizare al interogarii SQL View.

Subinterogarile nu se pot scrie decat in interiorul acestui SQL view. Scriem: SELECT AVG(VenitLunar) FROM CLIENTI Daca revenim in modul Datasheet View, vom vedea rezultatul interogarii: media tuturor veniturilor lunare.

Modificam codul SQL la: SELECT AVG (VenitLunar) as Media FROM CLIENTI; si observam ca acum rezultatul are si un alias.

Pentru a face subinterogarea sa afiseze doar acei clienti cu venitul peste medie, folosim codul: Select * from Clienti where VenitLunar >=(SELECT AVG (VenitLunar) as Media FROM CLIENTI); Caracterul * inlocuieste toate coloanele din tabela.

Desi pare o comanda complicat, ea este in realitate destul de simpla.Access detecteaza parantezele folosite, si proceseaza mai intai interogarea dintre paranteze rezultatul era 2500. Apoi este procesata interogarea initala, extragand valorile VenitLunar peste 2500. Observati ca Access-ul a tradus deja codul introdus de noi.

Recomandarea este sa folositi SQL pentru interogari, sa migrati din designerele graifce catre acest SQL pentur ca acest mod prezinta o serie de avantaje.

Interogari Make Table


Interogari Make Table Stim foarte bine ca interogarile nu stocheaza date. Ele reprezinta doar o legatura catre date, tintesc catre date. Putem face oricate interogari si baza de date nu se va marii. In anumite situatii, insa, se impune sa pastram rezultatul intros de un anumit query. Operatia aceasta, in care reusim sa copiem rezultatele intoarse de un query si sa le pastram in baza de date, se numeste Bulk Copy. O interogare de tipul Make Table nu reprezinta decat o interogare normala, la rularea careia, liniile intoarse sunt persistate intr-un tabel fizic. Vrem sa stocam in tabela TRANZACTII_VALOROASE toate tranzactiile ce depasesc valoarea 1000. Mai intai facem interogarea.

Din ribbon-ul Create > Query, facem click pe Query Design. Din fereastra deschisa alegem toate cele 3 tebele, si apasam Add, apoiClose. Cream o interogare care sa intoarca numele clientului, produsul si valoarea tranzactiei (pret*cantitate).

Daca rulam interogrea, vom vedea rezultatul.

Filtram interogarea astfel incat sa returneze numia acele valori peste1000.

Rulam interogarea. Observam ca au ramas numai acele linii care indeplinesc conditia logica.

Din acest query putem sa face o interogare de tipul Make Table. In modul de vizualizare Design View, din ribbon-ul cotextual facem click pe Make Tabel.

Introducem numele de tabela Tranzactii_Valoroase si apasam OK.

Apasam Run. Access ne intreaba daca suntem de acord sa creeze un tabel cu un anumit numar de linii. Apasam Yes.

Tabela s-a creat in mod automat si poate fi vizualizata ca orice alta tabela. Salvam interogarea cu numele: Interogare ce populeaza un tabel fizic.

De fiecar data cand rulam interogarea de tipul Make Tabel, tabelaTranzactii_Valoroase va fi stearsa si va fi populata din nou cu rezultatul intors de interogare.

Interogari de tip modificare (Update Query)

Interogari de tip modificare (Update Query) Comenzile de tip Update Query, ne permit sa automatizam modificarile in interiorul bazei de date. De regula noi suntem obisnuiti doar sa interogam bazele de date, dar in anumite scenarii trebuie sa si modificam cat mai rapid datele din interiorul unei baze de date. In tabela produse vrem sa adaugam 3 Ron pentru fiecare pret al caiselor.

Avem 2 modalitati: Facem un query care sa ne gaseasca liniile cu Caise, apoi facem modificarile manual direct in interogare; A doua varianta este sa folosim o comanda de tip Update Query. Facem query-ul care sa ne returneze toate produsele caise, si pretul aferent.

Daca rulam interogarea, se returneaza cele 2 tipuri de caise.

Putem face modificarile direct, manual. Dar ar fi foarte greu de urmat acest pas daca avem un numar foartre mare de linii. Reluam designer-ul interogarii, si alegem tipul Update.

Si aici putem sa folosim modul de lucru cu limbajul SQL, dar o sa continuam in Design View. Completam campurile astfel incat interogarea sa returneze produsele Caise si sa creasca pretul cu 3 unitati.

Rulam interogarea. Access ne intreba daca vrem sa acceptam modificarile celor 2 randuri. Apasam Yes.

Daca deschidem tabela Produse observam ca pretul a crescut pentru acele linii.

Interogari de tip stergere (Delete Query)


Ce sunt interogarile de tip stergere (Delete Query) ?

Sunt comenzi de tip Delete ce ne permit stergerea din baza de date a uneia sau a mai multor inregistrari, in functie de o anumita conditie logica.

Pasul 1:
Pentru a sterge o informatie dintr-o tabela Access putem folosi o comanda numita Delete Query care sa ne permita stergerea in mod automat pe baza unei conditii logice.

Legatura dintre tabele se face pe baza unui Relationship.

Pasul 2:
In relatia dintre tabelele de Produse si Tranzactii vrem sa adaugam o optiune de stergere. Pentru a realiza acest lucru vom bifa optiunea Cascade Delete Related Records. Asta inseamna ca in clipa in care sterg liniile din tabela de produse ce contin un anumit termen, sa se stearga si din tabela de tranzactii acele linii care tin de produsul nostru.

Pasul 3:
Din Ribbon-ul Create vom alege optiunea Query Design pentru a face o stergere. Acesta va fi un Query de tip Select. Citeriul de cautare are comanda de cautare a termenului dorit de noi. Daca rulam acest query va gasi toate liniile ce contin acel cuvant iar noi le vom sterge manual.

Pasul 4:
O alta metoda de stergere mai rezonabila este sa cream un Query de tipDelete. Aceasta metoda modifica Designer-ul si comanda SQL. In clipa in care rulam acest query suntem avertizati ca vor fi sterse acele linii ce contin cuvantul nostru.

Pasul 5:
In functie de setarile puse in comanda SQL designer-ul se va completa automat. In clipa in care rulam query-ul tabelei noastre ii vor lipsi liniile ce contineau cuvantul specificat de noi. Poza 12, 13

Interogari de tip inserare (Append Query)


Ce sunt interogarile de tip Append Query ?
Acestea ne permit sa automatizam inserarile de linii intr-o tabela de date..

Pasul 1:
Se va crea o tabela cu coloanele pe care le dorim.

Pasul 2:
Vom crea un Query care va adauga in tabela nou facuta, o linie ce va contine data curenta si suma ce a fost tranzactionata pana la momentul curent.

Pasul 3:
Din Ribbon-ul Create vom alege optiunea Query Design. Acesta va fi un Query de tip Append. In caseta de dialog deschisa ne va intreba unde sa scrie valoarea obtinuta. Din meniul derulant vom alege tabela in care dorim sa fie inserate datele. Acest Query va intoarce doua coloane.

Pasul 4:
In Designer vom introduce functiile si criteriile pentru Query.

Pasul 5:
Din Ribbon-ul Desiggn vom alege optiunea Run pentru a rula Query-ul scris. In aceasta clipa el va detecta ca are de inserat un rand si ne va daca vrem sau nu sa il inseram.

Interogari Union
Ce sunt interogarile Union ?
In cazul in care avem mai multe tabele diferite dar identice din punct de vedere al structurii se vor creea Selecturi ce concateneza datele din acele tabele.

Pasul 1:
Vom creea tabelele ce vor contine informatiile dorite Din Ribbon-ul Create vom alege optiunea Query Design. Aici alegem tabelele pe care vrem sa le concatenam.

Pasul 2:
In Ribbon-ul Design vom selecta optiunile Union. Operatorul Union numai are suport grafic, asa ca se vor scrie manual interogarile. Pentru a functiona Union trebuie sa avem acelasi numar de coloane si tipurile de coloane sa fie identice. Operatorul Union face si sortare automata in prima coloana.

Interogari - Data Definition

Ce sunt interogarile Data Definition ?


Sunt comenzi ce permit automatizarea modificarilor dintr-o baza de date. Ex: - update; - append; - delete; - etc.

Comenzile DDL ne permit automatizarea modificarilor de structura dintr-o baza de date CREATE TABLE Angajati ( Nume Salariul ) ALTER TABLE Angajati DROP COLUMN Salariul ---------------------------------------------------------CREATE TABLE Cars ( CarID LONG, CarName TEXT(50), ColorID LONG ) CREATE TABLE Colors ( ColorID LONG CONSTRAINT PK_Colors PRIMARY KEY, ColorName TEXT(50) ) ALTER TABLE Cars ADD CONSTRAINT MyColorIDRelationship FOREIGN KEY (ColorID) REFERENCES Colors (ColorID) TEXT(50), INTEGER

Pasul 1:
Din Ribbon-ul Create vom alege optiunea Query Design.

Se va selecta optiunea Data Definition.

Pasul 2:
In clipa in care vom introduce scriptul si dam comanda Run, Access va crea o noua tabela, conform script-ului nostru. Aceasta tabela va avea caracteristicile specificate de script.

Pasul 3:
Comenzile Alter si Drop inserate intr-un script vor sterge dintr-o tabela un anumit camp sau o coloana, conform datelor introduse in script.

Pasul 4:
Folosind comanda Drop pe o tabela, aceasta va sterge tabela respectiva.

Pasul 5:
Comanda Create va crea o tabela noua, ce va avea caracteristicile specificate de script.

Pasul 6
Folosind un script putem sa realizam relatii intre doua sau mai multe tabele.

Interogari la distanta (Pass-Through)


Ce sunt interogarile la distanta (Pass-Throuh) ?

Aceste interogari sunt folosite pentru a interoga o baza de date SQL situata in alta parte. Access va primi doar rezultatul. Se pot folosi orice fel de baze de date externe.

Pasul 1:
Din Ribbon-ul Create vom alege optiunea Query Design. Nu vom alege nici un tabel. Apoi vom apasa butonul Pass-Through si Property Sheet.

Pasul 2:
In meniul din partea dreapta la rubrica OBDC Connect Str vom face legatura dintre Access si baza de date externa.

Pasul 3:
Din fereastra de dialog deschisa vom alege sa facem un noua conexiune. Vom urma pasii impusi de Wizard-ul Data Source.

Pasul 4:
In clipa in care incheiem pasii de mai sus, intr-un Query va aparea sintaxa care face legatura dintre Access si baza de date externa.

Pasul 5:
De fiecare data cand vom rula acest Query, el va interoga baza de date externa si va extrage mereu doar primele din persoane din tabela specificata inWizard-ul de la Pasul 3.

S-ar putea să vă placă și