Baze de date
Nucleul sql din visual foxpro 6.0.NUCLEUL SQL DIN VISUAL FOXPRO 6.0.Consultarea datelor din bazele de date
SELECT [ALL | DISTINCT] [TOP nExpr
[PERCENT]] FROM [FORCE] [[INTO Destination] [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE JoinCondition [AND JoinCondition ] [GROUP BY GroupColumn [, GroupColumn ]] [HAVING FilterCondition] [UNION [ALL] SELECTCommand] [ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ]] Exemple de interogariSelectia, proiectia , reuniunea Ce agenti economici mari au sediul in zona BURDUJENI? SELECT *; FROM AGENTI1; WHERE zona='BURDUJENI' Care sunt facturile emise in data de 29.01.1999, cu valoare mai mare de 2000000 corespunzator apei potabile? SELECT *; FROM FACTURI; WHERE DATA= AND TIP=12 AND VAL >2000000 Care sunt facturile pentru care valoarea consumului de apa potabila este mai mare de 1500000 si mai mica de 4000000? SELECT *; FROM FACTURI; WHERE Tip=12 AND Val>1500000 AND val <4000000 Aceeasi interogare se poate scrie astfel: SELECT *; FROM FACTURI; WHERE Tip=12 AND Val BETWEEN 1500000 AND 4000000 Care sunt agentii al caror nume incepe cu 'S' si sunt societati pe actiuni? SELECT *; FROM Agenti1; WHERE Nume LIKE 'S%SA' Care sunt agentii al caror nume este format din 9 caractere, incepe cu 'S' si sunt societati pe actiuni? SELECT *; FROM Agenti1; WHERE Nume LIKE 'S______SA' Care sunt agentii din zonele: CENTRALA si ZAMCA? SELECT *; WHERE Zona = 'CENTRALA' OR Zona='ZAMCA' Sau SELECT * ; WHERE Zona IN ('CENTRALA',' ZAMCA') Care sunt agentii pentru care nu s-a introdus numele managerului? SELECT * FROM AGENTI1; WHERE manger IS NULL In ce zone ale orasului isi au sediul agentii comerciali, clienti ai firmei? SELECT DISTINCT Zona; FROM Agenti Care este numele fiecarui agent comercial si adresa sa? SELECT Nume, Adresa; FROM Agenti Daca se doreste o prezentare ordonata a agentilor se urtilizeaza clauza ORDER BY. SELECT *; FROM AGENTI; ORDER BY Nume Daca se doresrte ordonarea descrescatoare se foloseste urmatoarea formulare:
SELECT *; FROM Agenti; ORDER BY Zona ASCENDING, Nume DESCENDING Pornind de la tabelele Agenti1 si Agenti2 , tabelul reuniune care reprezinta tabelul AGENTI va fi obtinut in SQL prin fraza: SELECT *; FROM AGENTI1; UNION; SELECT *; FROM AGENTI2; Operatorului de jonctiune in SQLCaror agentii le-au fost listate facturile si care sunt seriile si numerele speciale alocate acestora SELECT DISTINCT Agenti.cod, Agenti.nume, Agenti. Adresa, NRSP.seria, NRSP.nrs FROM Agenti, NRSP; WHERE Agenti.cod=NRSP.cod sau SELECT DISTINCT Agenti.cod, nume, Adresa, seria, nrs; FROM Agenti, NRSP; WHERE Agenti.cod=NRSP.cod Echijonctiunea poate fi realizata prin clauza INNER JOIN plasata in clauza FROM, fara clauza WHERE. Astfel, ultima fraza SELECT poate fi scrisa astfel: SELECT *; FROM Agenti INNER JOIN NRSP ON; Agenti.cod=NRSP.cod In ce zone ale orasului se gasesc agentii economici carora li s-a facturat o suma mai mare de 1.000.000 lei pentru apa potabila? SELECT DISTINCT Zona; FROM Agenti, Facturi; WHERE Tip=12 AND Val>1000000 AND ; Agenti.cod=Facturi.cod Functiile predefinite: COUNT, SUM, AVG, MAX, MIN Formatul general al unei fraze SELECT ce contine functii predefinite este: SELECT fct_pred1, fct_pred2,..fct_predn; FROM lista de tabele; WHERE conditii In lipsa optiunii GROUP BY, daca in clauza SELECT este prezenta o functie predefinita, tabelul rezultat va contine o singura linie. Functia COUNT Cati clienti are firma? SELECT COUNT (cod) AS nr_clienti; FROM Agenti Cate formulare de facturi au fost anulate? SELECT COUNT (anulat); FROM NRSP; WHERE anulat='Da' Cate facturi s-au emis in data de 29.01.1999 SELECT COUNT (DISTINCT numar); FROM FACTURI; WHERE Data= Functia SUM Calculeaza suma valorilor unei coloane. Care este valoarea totala a facturilor emise? SELECT SUM(Val) AS Total_fe; FROM Facturi Care este valoarea apei potabile facturate? SELECT SUM(Val) AS Total_fe; FROM Facturi; WHERE tip=12 Care este valoarea facturii emise pentru AKROM AKAL? SELECT SUM(val) AS Total_ELCO; FROM FACTURI, AGENTI; WHERE FACTURI.cod=AGENTI.cod AND AGENTI.nume='AKROM AKAL' sau SELECT SUM(val) AS Total_ELCO; FROM FACTURI; WHERE cod IN; (SELECT cod; FROM AGENTI; WHERE nume='AKROM AKAL' ) Functia AVG Calculeaza media aritmetica a unei coloane intr-un tabel oarecare, prin divizarea sumei valorilor coloanei respective la numarul de valori nenule ale acesteia. Care este valoarea medie a prestatiilor facturate in factura cu numarul 10589? SELECT AVG (Pret*Cant) AS Medie_10589; FROM FACTURI; WHERE Numar=10589 Observatie: Valoarea medie a tuturor facturilor nu poate fi calculata cu functia AVG. In acest caz este necesara utilizarea optiunii GROUP BY. Care este valoarea medie a serviciilor de canalizare facturate SELECT AVG (Pret*Cant) AS Medie_canal; FROM FACTURI; WHERE tip=22 Care este valoarea medie facturata pentru serviciile de canal in zonele Burdujeni si Itcani? SELECT AVG (Pret*Cant) AS Medie_canal; FROM FACTURI; WHERE tip=22 AND cod IN; (SELECT cod; FROM AGENTI; WHERE Zona IN ('BURDUJENI','Itcani') Functiile MAX si MIN Determina valorile maxime, respectiv minime ale unei coloane in cadrul unui tabel. Care este codul agentului pentru care s-a facturat cea mai mare cantitate de apa? SELECT cod ; FROM Facturi; WHERE val IN; (SELECT MAX (Val); FROM Facturi; WHER tip=12) Gruparea tuplurilor. Clauzele GROUP BY si HAVINGSQL permite utilizarea clauzei GROUP BY pentru a forma grupuri de tupluri intr-o relatie pe baza valorilor comune ale unei coloane. Prin asocierea unei clauze HAVING la o clauza GROUP BY este posibila selectarea anumitor grupe de tupluri care indeplinesc un criteriu. Formatul general al clauzei GROUP BY este: SELECT col1, col2,..coln; FROM tabel; GROUP BY coloana de grupare Care este totalul valorilor facturate pentru fiecare serviciu prestat? SELECT Tip, Produs, SUM(val); FROM FACTURI ; GROUP BY Tip In acest caz tabelul rezultat va aveaun numar de linii egal cu numarul tipurilor de prestatii distincte dintabelul Facturi. Pentru toate pozitiile din facturi care se refera la un anumit produs se va calcula suma valorilor deoarece se foloseste functia SUM. Care este numarul facturilor trimise in fiecare zona a orasului? SELECT Zona, COUNT(numar); FROM AGENTI, NRSP; WHERE AGENTI.cod=NRSP.cod; GROUP BY AGENTI.Zona Care este valoarea totala a facturilor emise, pe zile, pentru fiecare zona ? SELECT Zona, Data, SUM (val); FROM Facturi, Agenti; WHERE Facturi.cod=Agenti.cod ; GROUP BY Zona, Data Clauza HAVING Clauza HAVING lucreaza impreuna cu o clauza GROUP BY, fiind practic o clauza WHERE aplicata acesteia. Formatul general este: SELECT col1, col2,..coln; FROM tabel; GROUP BY coloana de regrupare; HAVING caracteristica de grup Pentru facturile emise, intereseaza valoarea zilnica, dar numai daca aceasta valoare este mai mare de 5.000.000 lei. SELECT Data, SUM(val); FROM Facturi; GROUP BY Data; HAVING SUM(val)>5000000 Care sunt agentii pentru care in facturi exista mai mult de doua pozitii pentru un produs furnizat? SELECT nume; FROM Agenti; WHERE cod IN; (SELECT cod; FROM FACTURI; GROUP BY tip, cod; HAVING COUNT(*)>2)
|