sgbd2 sql ro

13
SQL INTEROGARI MULTITABEL Pentru a crea o interogare pe baza mai multor tabele trebuie sa se adauge in partea superioara a ferestrei Query Design tabelele necesare si stabilita asocierea intre aceste tabele.Tabelele se pt adauga in momentul crearii interogarii sau ulterior chiar in cursul interogarii selectand:Query-ShowTable Tipuri de asocieri(in modul graphic de proiectare a interogarilor): INNER JOIN (asocieri interne)sau asociere echivalenta(EQUIJOIN) sunt cele mai utilizate si combina inregistrarile din doua tabele cand sunt identice valorile dintr-un camp comun celor doua tabele..Corespondenta dintre valorile identice din campurile care asociaza tabelele este stabilita de clauza SQL Where. De regula asocierea este de tip one-to-many bazandu-se pe campul cheie principala dintr-un tabel si pe un campcheie externa din cealalta tabela. OUTER JOINS (asocieri externe)Interogarea care se bazeaza pe acest tip de asociere afiseaza tote inregistrarile dintr-un tabel si numai pe cele din alt tabel pentru care valorile din campul de legatura sunt identice.Cu alte cuvinte se afiseaza inregistrarile dintr-un menbru al relatiei idiferent daca exista inregistrari in celalalt membru al relatiei.Campul de legatura pe baza caruia se stabileste o asociere externa poate sa contina orice tip de date cu exceptia campurilor de tip MEMO si OLE.Asocierile externe sunt: 1. LEFT JOIN- asocieri externe la stanga afiseaza toate inregistrarile din tabelul din partea “one” a relatiei care contine cheia principala unica indifferent daca exista inregistrari corespondente in tabela din partea”many” a relatiei 2. RIGHT JOIN-asocieri externe de dreapta afiseaza toate inregistrarile tabelului din partea “many” a relatiei indifferent daca exista o inregistrare corespondenta a tabelei din partea “one” a relatiei.Inregistrarile din tabelul din partea”many” a relatiei care nu au corespondenta in partea :one”se numesc inregistrari orfane ,iar tabela care le contine poate avea o relatie many-to-one cu un alt tabel. SELF JOIN –auto-asociere sau asociere reflexive asociaza valorile dintr-un singur tabel.Pentru acest tip de asociere Access impune adaugarea in interogare a unei copii a tabelei careia ii atribuie automat un nume si apoi crearea unei asocieri intre campurile copiilor.este folosit rar acest tip de asociere. THETA JOINS asociaza datele utilizand operatorul de comparare “<>”(not-equal joins).Asocierile theta se implementeaza in limbajul SQL cu criteriulWHERE si nu cu cuvantul rezervat JOIN. 1 1

Upload: marcel-chis

Post on 13-Aug-2015

40 views

Category:

Documents


1 download

DESCRIPTION

Tutorial SQL

TRANSCRIPT

Page 1: SGBD2 SQL Ro

SQL

INTEROGARI MULTITABEL

Pentru a crea o interogare pe baza mai multor tabele trebuie sa se adauge in partea superioara a ferestrei Query Design tabelele necesare si stabilita asocierea intre aceste tabele.Tabelele se pt adauga in momentul crearii interogarii sau ulterior chiar in cursul interogarii selectand:Query-ShowTable Tipuri de asocieri(in modul graphic de proiectare a interogarilor):

INNER JOIN (asocieri interne)sau asociere echivalenta(EQUIJOIN) sunt cele mai utilizate si combina inregistrarile din doua tabele cand sunt identice valorile dintr-un camp comun celor doua tabele..Corespondenta dintre valorile identice din campurile care asociaza tabelele este stabilita de clauza SQL Where. De regula asocierea este de tip one-to-many bazandu-se pe campul cheie principala dintr-un tabel si pe un campcheie externa din cealalta tabela. OUTER JOINS (asocieri externe)Interogarea care se bazeaza pe acest tip de asociere afiseaza tote inregistrarile dintr-un tabel si numai pe cele din alt tabel pentru care valorile din campul de legatura sunt identice.Cu alte cuvinte se afiseaza inregistrarile dintr-un menbru al relatiei idiferent daca exista inregistrari in celalalt membru al relatiei.Campul de legatura pe baza caruia se stabileste o asociere externa poate sa contina orice tip de date cu exceptia campurilor de tip MEMO si OLE.Asocierile externe sunt:

1. LEFT JOIN- asocieri externe la stanga afiseaza toate inregistrarile din tabelul din partea “one” a relatiei care contine cheia principala unica indifferent daca exista inregistrari corespondente in tabela din partea”many” a relatiei

2. RIGHT JOIN-asocieri externe de dreapta afiseaza toate inregistrarile tabelului din partea “many” a relatiei indifferent daca exista o inregistrare corespondenta a tabelei din partea “one” a relatiei.Inregistrarile din tabelul din partea”many” a relatiei care nu au corespondenta in partea :one”se numesc inregistrari orfane ,iar tabela care le contine poate avea o relatie many-to-one cu un alt tabel.

SELF JOIN –auto-asociere sau asociere reflexive asociaza valorile dintr-un singur tabel.Pentru acest tip de asociere Access impune adaugarea in interogare a unei copii a tabelei careia ii atribuie automat un nume si apoi crearea unei asocieri intre campurile copiilor.este folosit rar acest tip de asociere.

THETA JOINS asociaza datele utilizand operatorul de comparare “<>”(not-equal joins).Asocierile theta se implementeaza in limbajul SQL cu criteriulWHERE si nu cu cuvantul rezervat JOIN.Obtiunile se gasesc in: VIEW –Join Properties si avem 3 optiuni:

1. pentru asociere interna2. pt.asociere externa la stanga(LEFT JOIN)3. pt.asociere externa la dreapta(RIGHT JOIN)

INTEROGARI DE TIP TOTAL

Informatiile totalizatoare asupra tuturor intregistrarilor dintr-un tabel asupra unui grup sau grupuri de inregistrari indicate se obtin construind interogari de tip TOTAL (numite si interogari de regrupare) care utilizeaza functiile SQL globale care sunt:

1. Avg() -media valorilor unui camp2. Count() – numarul valorilor unui camp3. First() –valoarea unui camp din prima inregistrare4. Last() –valoarea unui camp din ultima inregistrare5. Max() –cea mai mare valoare dintr-un camp6. Min() –cea mai mica valoare dintr-un camp7. StDev() si StDevp() – abatere statistica standard a valorilor dintr-un camp8. Sum() – totalul valorilor dintr-un camp9. Var() si Varp() –variatia statistica a valorilor dintr-un camp

Efectuarea calculelor asupra tuturor inregistrarilor din tabela : Query design-randul TOTAL si fiecare celula a randului TOTAL contine optiunea prestabilita GROUP BY si se deschide o lista derulanta din

1

1

Page 2: SGBD2 SQL Ro

SQL

carese pot selecta optiunile. ..dupa care se acceseaza butonul de comanda RUN (!) de pe bara de instrumente si interogarea va aparea in modul Datasheet View. VEZI INTEROGARE DE TIP TOTAL

INTEROGARI PARAMETRIZATE

Interogarile standard te tip SELECT nu raspund intotdeauna nevoilor utilizatorilor,in special cand foaia de date a interogarii contine un numar considerabil de date.Pt.evitarea creeari unei inteorgari de fiecare data cand se schimba criteriul sau pentru a afisa datele intr-un format mai compact se pot crea interogari parametrizate.Acestea permit introducerea criteriului de selectie in momentul executarii interogarii cu ajutorul casetei de dialog ENTER PARAMETER VALUE.Pt.creare unei interogari parametrizate :Select standard din bara deinstrumente – in celula CRITERIA se tasteaza intre paranteze drepte un mesaj pe care ACCESS il va afisa de fiecare data cand se executa interogarea sau carei invita la furnizarea unui nou criteriu ..Mesajul nu trebuie sa coincide cu numele campului. – dupa tastarea criteriului -View- Run- apare caseta de dialog EnterPArameter Value .Pentru a specifica tipul datelro dintr-o interogare parametrizata se procedeaza in felul urmator: dimn meniul Query-Parameters – din casuta derulanta se selecteaza TEXT (este tipul de date prestabilit)

INTEROGARI DE ACTIUNE

Interogarile de actiune permit crearea sau modificare de tabele Access :1. Interogare generatoare de tabel(Make Table Query) -care creeaza un tabel pornind de la

totalitatea sau de la o parte a inregistrarilor unuia sau a mai multor tabeleSe creeaza astfel: o noua interogare de selectie care contine campurile de inclus in noul tabel- RUN- se selecteaza Query-Make Table daca se doreste ca Tabela sa inlocuiasa cuna existenta de allege numele ei cu sageata Ok-RUN -Yes api Database Windows-Table si se deschide noul tabel.Noul tabel nu mosteneste cheia primara si proprietile celor de orgine.

2. Interogare de actiune care adauga inregistrari(Append Query) intr-o tabela sau mai multe tabele Se creeaza astfel: o noua interogare de selectie care contine campurile de adaugat intr-un tabel –Query-Append Query –in caseta se specifica numele tabelei de destinatie(cleinti_romania), OK -Run –Yes astfel

Datele din tabela noua au ajuns in tabela trecuta la Append .3. Interogare de actiune care sterge(Delete Query) inregistrarile din una sau mai multe tabele

este reversal celei de mai sus din Query-Delete Query—randurile SORT SI SHOW sunt inlocuite de randul DELETE iar numele grilei devine DELETE QUERY (casuta derulanta Where) Attn:criteriu de stergere ex “franta” RUN .casuta care avertizeaza nr inregistrarilor ce se vor sterge..Yes.

4. Interogari de actiune care actualizeaza (Update Query) datele dintr-un grup de inregistrari .Ex Majoreaza cu un anumit procent salariile sau preturile produselor ,modificarile sunt ireversibile…..este bine ca sa se faca o copie a datelor. Se creaza astfel: o interogare de selectie care contine campurile ale caror date se vor modifica –QUERY-UPDATE ..SORT SI SHOW sunt inlocuite ce UPDATE TO unde se va specifica expresia sau valaorea utilizata pt.modificare –RUN –YES (caseta spune ca sunt 5 randuri deactualizat)

INTEROGARI INCRUCISATE(Crosstab Query)

Interogarile crosstab sunt de tip TOTAL care afiseaza o mare cantitate de date intr-o forma sintetica ,in formatul compact al unei foi de calcul tabelar rand-coloana.Faciliteaza compararea si analiza evolutiei datelor servind ca baza a crearii automate a graficelor cu ajutorul programului ACCESS.este deasemenea utila ca baza unui raport Avem 2 posibilitati: 1.Crosstab Query Wizard (din Database)

2.dupa bara Query – Crosstab

2

2

Page 3: SGBD2 SQL Ro

SQL

Pt crearea unei interogari incrucisate sunt necesare 3 campuri:1. un camp ale carei valori furnizeaza antetul de linie(ROW HEADING),se pot allege mai multe

campuri antete de linie (ROW HEADING),In randul TOTAL terbuie sa existe optiunea GROUP BY pentru cel putin una din celulele antet de linie

2. un camp ale carei valori sunt utilizate ca antet de colana (COLUMN HAEDING),nu se poate allege decat un singur camp antet de coloana COLUMN HAEDING,celula Total trebuie sa contina GROUP BY

3. un camp pentru calcularea valorilor de afisat la intersectiile randurilor si colanelor.Acestea se obtin cel mai des prin insumare si numaratoare .De aceea celula TOTAL trebuie sa contina optiunile :SUM,Count etc ..Celula CROSSTAB a acestei coloane trebuie sa Contina optiunea Value.

Exemplu:crearea unei interogari incrucisate a vanzarilor lunare a produselor: Pasul 1.se creaza o noua intergare ,dauga tablelele PRODUSE si COMENZI,se trage in grila campurile : cod_rodus;den_produs;data_comenzii ,se allege di meniul Query –Crosstab Query ;din coloana derulanta din randul Crosstab se allege optiunea ROW HEADING;pt.den_produs la fel ROW HAEDING(astfel cele doua coloane vor asigura titlurile in interogarea incrucisata.IN celula urmatoare (unde era Dtat_comenzi) se scrie formula : Valoarea:[cantitate}*[pret_unitar],pe randul TOTAL din aceasta coloana se allege SUM iar pe randul Crosstab se allege VALUE.Expresia calculeaza valoarea vanzarilor pentru fiecare produs care se va afisa la intersectia randurilor si coloanelor.In urmatoarea celula FIELD se introduce: Format([Data_Comenzii];”mmm”),pe randul CROSSTAB al acestei colane see allege din lista derulanta COLUMN HEADING.Functia FORMAT va furniza titlurile coloanelor formate din primele trei litere ale lunilor anului (formatul “mmm”) –RUN .Pentru a afisa lunile in ordine calendaristicase atribuie nume fixe coloanelor interogarii incrucisate. Se revine in modul DESIGN al Interogarii se da clic pe PROPERTIES se afiseaza QUERY PROPERTIES iar ina caseta de text COLUMN HEADINGS se tasteaza denumirile lunilor in romana in ordine calendaristica cu (;) intre ele ,se inchide fereastra si da clic pe RUN.

LIMBAJUL SQL

SQL (STRUCTURES QUERY LANGUAGE- LIMBAJ DE INTEROGARE STRUCTURAT)Este un standard mondial pentru interogarea bazelor de date relationale inclus ina majoritatea SGBD-urilor relationale si deasemenea limbajul utilizat exclusive de baze de date client/server.

SINTAXA UNEI INSTRUCTIUNI SQL Un limbaj se defineste prin sintaxa si gramatica sa.Access SQL utilizeaza urmatoarele reguli sintactice si gramaticale pt.descrierea instructiunilor sale: cuvinte scrise cu majuscule reprezinta cuvintele cheie care constituie vocabularul limbajului SQL:SELECT;DELETE;UPDATE;INSERT, etc.,prezenta acestor cuvinte este obligatoriw in scrierea instructiunilor SQL cuvintele scrise cu litere minuscule reprezinta informatii oferite de utilizator;ex: field-list – reperzinta o lista de campuri ale bazei de date pe care le specifica utilizatorul intr-o instructiune […] o pereche de parnateze patrate indica prezenta optionala a constructiei sintactie pe care o cuprinde: ex: [ORDER BY column-criteri] caracterul “| “ reprezinta obligativitatea alegerii dintre doua sau mai multe optiuni posibile;ex:[ASC|DESC] implementarea Access a limbajului SQl foloseste operatorii de comparative(+,<,<=,>,>=,<>) Access foloseste caracterele de inlocuire “?” si “*” in operatoul LIKE pentru a inlocui un singur character(*) Orice instructiune SQL se termina prin punct si virgule ; Elementele dintr-o lista se separa prin virgule.Ex.Nume,Prenume,Localitate Daca numele campurilor contin caracterul spatiu,numele campurilor trebuie incadrate de paranteze drepte .ex: [Cod furnizor] sau [Pret unitar]

3

3

Page 4: SGBD2 SQL Ro

SQL

Daca in instructiunea SQL sunt utilizate campuri din diferite tabele,se specifica numele tabelei din care provine campul,separate printr-un punct de numele tabelei,intr-o sintaxa de forma: Nume-tabel.Nume-camp EX: Furnizori[Cod furnizor] Caracterul # este folosit de operatoul LIKE pentru a specifica un digit oarecare sau pentru a delimita alori de tip Date/Time; Pentru determinarea valorilor de tip sir,Access SQL utilizeaza atat apostroful cat si ghilimelele

SESIUNEA SQL

Introducerea instructiunilor SQL pentru a crea interogari de selectie in ACCESS presupune parcurgerea urmatoarelor etape: Din Database se selecteaza Queries -NEW-Design View-OK ,se inchide caseta Show Table ,din meniul View se allege optiunea SQL VIEW ,se sterge orice text afisat in fereastra SQl si se ntroduce instructiunea SQL.-RUN apoi pt afisare Datasheet View .Cand este executata instructiunea SQL Access transforma instructiunea SQL intr-un proiect de interogare QBE.

SQL SI OPERATORII RELATIONALILimbajul SQL permite definirea ,controlul si manipulareaunei baze de date realtionale.Ele copmorta patru verbe de manipulare a datelor: SELECT –selectioneaza,permite realizarea interogarilor deselectie cercetand tabelele dupa diverse criteriiRezultatul instructiuniiSQl este otabela ,subansamblu al tabelei de pornire care poate sa contina toate campurile sau o selectie a acestoea.Rezultatul tabeeli se afiseaza pe ecran si acest rezultat poate fi un punct de pornire pentru o alta instructiune SELECT.Aceasta formulare se numeste interogare imbricata.Interogarea imbricata este definta intre paranteze si rezultatul constituie drept conditie de cercetare pentru interogarea de nuvel superior.Interogarea imbricata este inclusa intr-o clauza WHERE.SINTAXA generala a instructiunii SQL este:SELECT[ALL|DISTINCT|DISTINCTROW]select-listFROM table_names[WHERE search_criteria][ORDER BY column_criteria[ASC|DESC]] unde

SELECT prin parametrul select_list precizeaza campurile(atributele,coloanele)din tabela sura incluse in tabela rezultat,campurile din lista se separa cu virgule

FROM table_name specifica numele tabelei sua tabelelor sursa ale interogarii. WHERE search_criteria induce un criteriu deselectie a inregistrarilor care vor fi

afisate.Parametrul search_criteria este o expresie care contine operatorul LIKE pt campurile de tip TEXT;un operator numeric pentru capurile numerice(<,>,<=,>=);operatorul BETWEEN pentru incadrare intr-un interval valoric;operatorul IN pentru apartenta la o lista de valori;IS NULL pentru testul asupra nedeterminarii unei valori;Conditia din clauza WHERE este o expresie logica formata dintr-o suita de conditii (fiecare dintre ele ia valoarea”adevarat” sau “fals”) combinate intre ele prin operatori logici AND,OR, sau NOT

ORDER BY column_riteria specifica numele atributului coloanei dupa valorile caruia inregistrarile incluse in selectie sunt sortate ascndent(ASC) sau descendent (DESC).Daca nu sespecifica tipul sortarii ,sortarea implicita este cea ascendenta.Acesta clauza este optionala. INSERT- insereaza noi tupluri intr-o tabela UPDATE- actualizeaza DELETE – sterge

4

4

Page 5: SGBD2 SQL Ro

SQL

O caracteristica fundamentala a limbajului SQL sete faptul ca isntructiunea SELECT singura ,prin varietatea clauzelor sale permite descirerea celor opt poeratii de baza ale algebrei relationale: Selectia;Proiectia;Produsul cartezian:Join;Uniunea;Intersectia;Diferenta;Diviziunea.

PROIECTIA– clauza SELECT permite afisarea tuturor atributelor (*) dintr-o tabela sau doar atributele pe care dorim sa le vedem.ex.1.Se se afiseze tabela CLIENTI cu toate atributele:SELECT *FROM Clienti Ex.2 Sa se afiseze furnizorii si Valoarea comenzilor associateSELECT codfz,valaore_cdaFROM ComenziEx.3 Sa se afiseze lista localitatilor in care locuiesc cleintii.Daca nu se specifica DISTINCT,clauza SELECT va afisa lista localitatilor pentru toate tuplurile tabelei CLIENTI,cu inevitabilele repetitii.SELECT DISTINCT cli_locFROM Clienti

SELECTIA – Operatia relatioanla de Selectie se realizeaza utilizand clauza WHERE in instructiunea SELECTEx.1 Care sunt comenzile primate de la clientul cu codul 21?SELECT Nrcomanda,Data_comenzii,Cod_cli,Val_cdFROM ComenziWHERE codcli=21;Ex.2 Sa se afiseze toti clientii care locuiesc la ParisSELECT cod_cli,den_cliFROM CientiWHERE cli_loc=”Paris” Conditia specificata in clauza WHERE poate comporta operatorii aritmetici (+,-,*,/), nume de attribute si de constante.Ex.3 sa se selectioneze produsele pentru care pretul de vanzare este superior sau egal cu dublul pretului de achizitie SELECT cod_prod,den_prod,pret_a,pret_vFROM ProduseWHERE pret_v>=2*pret_aConditia Specificat de clauza WHERE poate fi simpla sau compusa.Ex.4 Sa se selectioneze articolele de culoare rosie al caror pret de vanzare este mai mare de 500SELECT cod_produs;den_produs;culoare,pret_vFROM ProduseWHERE culoare=”rosie” AND pret_v>500;Ex.5 Sa se selectioneze articolele de culoare rosie sau toate produsele al caror pret de vanzare este mai mare de 500SELECT cod_prod,Den_prod,Culoare,Pret_vFROM ProduseWHERE culoare=”rosie” OR pret_v > 500Ex.6.Sa se afiseze lista produselor care au pretul de vanzare cuprins intre 100 si 500SELECT cod_prod,Den__prod,Pret_vFROM ProduseWHERE pret_v BETWEEN 100 And 500. Pentru selectioanrea inregistrarilor ale caror attribute contin o valoare in afara intervalului determinat se utilizeaza NOT BETWEEN.Pentru a selecta inregistrarile ale caror attribute contin alte valori decat cele specificate in lista trebuie utilizat operatorul NOT IN .In clauza WHERE poate fi folosit operatorul LIKE pt.a selectiona inregistrarile pentru care un atribut de tip text contine o valaore corespunzatoare unui filtru dat.

5

5

Page 6: SGBD2 SQL Ro

SQL

Ex.Sa se afiseze lista clientilor al caror nume incepe cu litera “A”SELECT cod_cli,Nume_cliFROM ClientiWHERE Nume_cli LIKE “A*”Ex.sa se afiseze lista clientilor al caror nume este format din 7 litere si se sfarsete in “ESCU”SELECT Cod_cli,Nume_cliFROM ClientiWhere Nume_cli LIKE”???ESCU”;SORTAREA INREGISTRARILOR

Se foloseste clauza ORDER BYEx: sa se afiseze in ordine alfabetica localitatile de domiciliu ale cleintilor si in cadrul acestora,in ordine alfabetica,clientii din localitatea respectiveSELECT localitate,Nume_cli,Cod_cliFROM ClientiORDER BY Localitate,Nume_cli

PRODUSUL CARTEZIAN

Produsul Cartesian realizeaza juxtapunerea(concatenarea)tuturor tuplurilor dintr-o tabela cu fiecare tuplu din a doua tabela.Cele doua tabele M si N tabela rezultat va fii M*N tupluri.Produsul Cartesian in sine nu prezinta interes dar combinat cu SELECTIA se obtine un operator deosebit de util in interogarile multitabel ;operatorul JOIN.ex: pt.a obtine produsul Cartesian al tabelelor COMENZI si FURNIZORI vom scrie

SELCT COMENZI. Nrcomanda,COMENZI.DataC,COMENZI.Codfz,COMENZI.VALOAREC,FURNIZORI.Denfz,FURNIZOR.AdresaFROM COMENZI.FURNIZORI

JOIN

Realizeaza asociereaa doua sau mai multe tabele pe baza egalitatii valorilor atributelor pe care se bazeaza relatia dintre aceste tabele:Sintaxa SQL este urmatoarea:SELECT[ALL|DISTINCT|DISTINCTROW] select_listFROM table_names[INNER|LEFT|RIGHT] table_name JOIN table_name ON join_criteria[{INNER|LEFT|RIGHT}] table_name JOIN table_name ON join_criteria][WHERE search_criteria][ORDER BY column_criteria]

INNER JOIN – interogare echivalenta sau internaEx.Se cere sa se afiseze lista cleintilor care au comandat produse,afisand cod client,denumirea clientului,numarul si data comenzii,cantitatea comandata

SELECT Clienti.CodCli,Clienti.DenCli,Comenzi.Nrcom,Comenzi.DataCom,Comenzi.CantcomFROM ClientiINNER JOIN Comenzi ON Cleinti.CodCLi=Comenzi.CodCliGROUP BY Clienti.CODcli;Se poate folosi si clauza WHERE:SELECT Clienti.CodCli,Clienti.DenCli,Comenzi.Nrcom,Comenzi.DataCom,Comenzi.CantcomFROM ClientiWHERE Clienti.CodCLi=Comenzi.CodCliGROUP BY Cleinti.CODcli;

6

6

Page 7: SGBD2 SQL Ro

SQL

LEFT JOIN –interogari la stanga Ex:sa se afiseze lista clientilor care nu au comenziSELECT Clienti.CodCli,Cleinti.Dencli,Comenzi.NrcomFROM CLIENTILEFT JOIN Comenzi ON Cleinti.Codcli=Comenzi.CodcliGROUP BY Clienti.Codcli

RIGHT JOIN-interogari la dreaptaEx:sa se afiseze lista produselor pentru care s-au primit comenziSELECT Produse.Codprod,Produse.Denpod,Comenzi.NrcomFROM ComenziRIGHT JOIN Produse ON Comenzi.Nrcom=Produse.NrcomGROUP BY Produse.Codprod

SELF JOINS /AUTO JOIN- asociaza valorile dintr-un singur tabelEx:sa se afiseze lista produselor al caror pret este mai mic decat pretul produsului cu codul 221:SELECT Produse.Codprod,Produse.Denprod,Produse.PretFROM Produse AS Produse_1WHERE [[Produse_1.Pret]<[Produse.Pret] AND [Produse_1.Codprod]= 221];

UTITLIZAREA FUNCTIILOR GLOBALE SQL

Intr-o instructiune de tip SQL se poate utiliza oricare dintre functiile globale SQL(Vezi cap.Interogari) adaugand clauza GROUP BY in instructiune.Ex.1.Sa se afiseze valoarea produselor vandute fiecarui client .SELECT Clienti.Codcli,Clienti.Dencli,SUM([Produse.Cant]*[Produse.Pret])AS ValoareFROM ClientiINNER JOIN Produse ON Clienti.Codcli=Produse.CodcliGROUP BY Clienti.Codcli

Ex.2 Sa se afiseze lista cleintilor care au mai mult de doua comenziSELECT Clienti.Codcli,Count([Comenzi.Nrcom]) AS Nr_comenziFROM ClientiINNER JOIN Comenzi ON Clienti.Codclu=Comenzi.CodcliGROUP BY Clienti.CodcliHEVING COUNT (Comenzi.Nrcom)>2

Ex.3 Sa se calculeze valoarea fiecarei comenzi,afisand numarul comenzii,data comenzii si valoarea.SELECT Comenzi.Nrcom,Comenzi.Datacom,SUM([Comenzi.Cant]*[Produse.Pret])FROM ComenziINNER JOIN Produse ON Comenzi.Nrcom=Produse.NrcomGROUP BY Comenzi.Nrcom,Comenzi.Datacom

UNIUNEA

Interogarea UNION permite combinarea rapida a campurilor din mai multe tabele si interogari.Ex: Sa se creeze o interogare care sa contina lista clientilor si furnizorilor din FRANTASELECT Societate,OrasFROM ClientiWHERE Tara= “Franta”UNION SELECT Societate,OrasFROM FurnizoriWHERE Tara = “Franta”

7

7

Page 8: SGBD2 SQL Ro

SQL

SUBINTEROGARIO subinterogare este o interogare SELECT care utilizeaza o alta interogare SELECT drept criteriu de selectie in clauza WHERE.Ex.1. Sa se afiseze lista clientilor care au trimis comenzi intre 1 octombrie 1999 si 31 decembrie 1999.

SELECT Clienti.Codcli,Clienti.Dencli,Clienti.AdresaFROM ClientiWHERE Clienti.CodcliIN(SELECT Comenzi,Codcli FROM Comenzi WHERE Comenzi.Datacom,BETWEEN #10/1/99# AND #12/31/99#);

Ex.2.Sa se afiseze lista furnizorilor care vand cel putin un produs de culoare rosieSELECT Furnizori.DenfzFROM FurnizoriWHERE Furnizori.Codfz IN(SELECT Produse.Codprod FROM ProduseWHERE Produse.Culoare=”ROSIE”)

INSTRUCTIUNI SQL PENTRU INTEROGARI DE ACTIUNE

Interogari de creare a unei tabele MAKE TABLE –utilizeaza urmatoarea sintaxa generala:SELECT[ALL|DISTINCT|DISTINCTROW field_listINTO new_tableFROM source_table[WHERE append_criteria]

Ex: Pe baza datelor din tabela CLIENTI se generaza o tabela cu clientii din ROMANIA

SELECT CLIENTI.CODCLIENT,CLEINTI.ADRESA,CLEINTI.ORAS,CLIENTI.TARA INTO clienti_RomaniaFROM CLIENTIWHERE(((CLIENTI.TARA)=”ROMANIA”))

Interogari de adaugare APPEND QUERY au urmatoarea sintaxa SQL:INSERT INTO destination_tableSELECT [ALL|DISTINCT|DISTINCTROW] field_listFROM source_table[WHERE append_criteria]Ex: Pe baza datelor din tabela Clienti see adauga in tabela CLIENTIADD,clientii din Bucuresti

INSERT INTO CleintiaddSELECT cleinti.codclienti,clienti.adresaFROM clientiWHERE (((clienti.adresa)=”Bucuresti”))

Interogari de stergere DELETE QUERY utilizeaza urmatoarea sintaxa SQLDELETE FROM table_name[WHERE delete_criteria]

Ex.Se sterg din tabela CLIENTI cleintii din BUCURESTI

DELETE clienti.codclienti,clienti.adresa,clienti.telefonFROM clienti

8

8

Page 9: SGBD2 SQL Ro

SQL

WHERE (((clienti.adresa)=”Bucuresti”))

Interogari de actualizare UPDATE QUERY utilizeaza instructiunea SQL cu sintaxa:

UPDATE table_nameSET column_name=value[column_name=value][WHERE update_criteria]--- in absenta cluzei WHERE se actualizeaza toate inregistrarile tabelei

Ex:Se modifica pretul produselor din tabela PRODUSE cu 5%UPDATE PRODUSE SET PRODUSE.pret=[pret]*1.05;

Instructiuni SQl pentru realizarea interogarilor incrucisate (Crosstab Query)

Sinaxa este:TRANSFORM aggregate_function(field_name) AS (alias) …TRANSFORM =defineste interogrea incrucisataSELECT[ALL|DISTINCT|DISTINCTROW] select_listFROM table_namePIVOT Format(field_name),”format type”) ….PIVOT precizeaza caracteristiciel GROUPBY si numele coloanelor fixate introduce de predicatul iN[IN column_list];

Ex: Utilizand datele din Tabelele PRODUSE si Comenzi ,sa se scrie fraza SQL pentru obtinerea valorii produselor comandate,pe fiecare trimestru al anului 1999

TRANSFORM Sum([cantitate_comandata]*[pret]) AS valoareSELECT PRODUSE.codprodus,PRODUSE.denumire_produsFROM PRODUSE INNER JOIN COMENZI ON PRODUSE.codprodus=COMENZI.codprodusGROUP BY PRODUSE.codprodus,PRODUSE.denumire_produsPIVOT Format([data_comenzii],”””Quarter””q”);

MACRO-URI (MACROS)

Macro-urile sunt un set de una sau mai multe actiuni care fiecare dintre ele executa o peratie.Comenzile macro reprzinta o interfata simpla aflata la dispozitia utilizatorilo ACCESS care nu sunt specialisti in programare.Utilizatorul poate crea comenzi macro prin sleectarea actiunilor dintr-o lista derulanta si precizarea detraliilor asupra obiectelor implicate in operatia respective.

CREAREA UNUI MACRODin Database se allege MACRO-New sau din View se alege MACROS care e impartit in 2 zone:1.zona actiunilor(sageata derulanta) de unde se alege fiecare actiune a comenzii macro2.zona argumentelor –unde se introduce informatii suplimentare drspre cum se desfasoara actiunea sau ce obiecte de date se folosesc. (nu este obligatoriu de completeat)

Urmatorul pas este : VIEW –Macro Name

9

9