Limbajul SQL SQL (Structured Query Language) este un limbaj (ce cunoaşte mai multe variante) de interogare a bazelor de date

relaţionale. SELECT formează baza oricărei interogări SQL. Sintaxa enunţului SELECT este întotdeauna aceeaşi. Un enunţ SELECT este format din mai multe cuvinte cheie numite clauze. SELECT se defineşte utilizând diverse configuraţii ale acestor clauze în scopul obţinerii informaţiei necesare. Unele clauze sunt obligatorii altele opţionale. În plus, fiecare clauză este formată din unul sau mai multe cuvinte cheie utilizate la extragerea ca întreg a informaţiei cerute prin enunţul SELECT. Diagrama unui enunţ SELECT şi a eventualelor clauze este prezentată în figura de mai jos: SELECT <nume_coloană> FROM <nume_tabelă> WHERE <condiţie_căutare> GROUP BY <coloană_grupare> HAVING <caracteristică_grup>

SELECT – clauza primară a enunţului SELECT şi este obligatorie. Se utilizează pentru a specifica numele câmpurilor ce vor fi afişate în rezultatul interogării. Câmpurile vor fi extrase din tabelele specificate în clauza FROM. Se pot utiliza de asemenea funcţii agregat (de ex. Sum(Ore_lucrate)) sau expresii matematice ( de exemplu Cantitate*Pret). FROM – clauza secundară de asemenea obligatorie. FROM se utilizează pentru a specifica tabelele din care vor fi extrase câmpurile specificate în clauza SELECT. WHERE – Clauză opţională utilizată în filtrarea înregistrărilor returnate de clauza FROM. WHERE este precedat de o expresie numită <condiţie_căutare>. Atunci când condiţia de căutare conţine un singur predicat, aceste două noţiuni sunt sinonime Predicatul poate conţine operatori de comparaţie sau operatori booleeni. SQL defineşte o listă de 18 predicate. Câteva exemple: Operator Comparaţie BETWEEN Explicaţie Conţine unul din cei şase operatori de comparaţie =, <> (diferit), >, <, <=, >= (de ex. SELECT *FROM student Where media>9.2) Testează dacă valoarea unei expresii se găseşte într-un interval dat de valori (de ex. SELECT *FROM student Where media BETWEEN 8 AND 9) Testează dacă valoarea unei expresii coincide cu un element dintr-o listă de valori (de ex. SELECT *FROM student WHERE adresa IN (“Suceava”, “Falticeni”, “Botosani”)) Testează dacă valoarea parţială unui şir de caractere coincide cu un şablon definit de utilizator (de ex. SELECT *FROM student WHERE nume LIKE “C*”) Determină dacă o expresie este nulă (adică valoarea ei este necunoscută sau lipseşte: SELECT *FROM student WHERE nume IS NULL) Verifică dacă o anumită înregistrare există în rezultatele returnate de o subinterogare.

IN

LIKE

IS NULL

EXISTS

Observaţie: Se pot combina două sau mai multe condiţii folosind operatorii logici OR şi AND. Crearea unui nou câmp calculat pe baza câmpurilor din tabelele implicate în interogare se realizează prin astfel: <formula_de_calcul> AS <nume_camp_nou> Exemplu: Câţi studenţi există în baza de date? SELECT COUNT(*) AS numar_studenti FROM student

Where acţionează asupra câmpurilor ce îndeplinesc condiţia specificată în timp ce HAVING acţionează asupra grupurilor. student.nume. Exemplu: Care sunt studenţii. Nu se selectează nicio tabelă din fereastra Show Table şi se apasă butonul Close 3.prenume.Poate apărea necesitatea ordonării rezultatelor obţinute. Se va afişa o fereastră în care se va introduce interogarea SQL care se va lansa în execuţie cu butonul Run (!) .prenume. student.specializarea.5)). opţiunea SQL specific apoi Data Definition. Din fereastra principală Access se alege Query apoi Create query in Design View 2. Din bara de meniuri se alege meniul Query. HAVING operează la nivel de grupuri ce au fost create în prealabil cu clauza GROUP BY. student.5 SELECT student. cu media mai mare de 8. Ordonarea se realizează utilizând clauza ORDER BY ASC/DESC. Observaţie: Pentru a scrie şi lansa în execuţie o interogare SQL trebuie parcurşi următorii paşi: 1.media_bac)>8. SELECT *FROM student ORDER BY nume ASC GROUP BY – Atunci când se utilizează funcţii agregate în clauza SELECT se utilizează de obicei şi clauza GROUP BY pentru a separa informaţia în grupuri distincte.media_bac FROM student GROUP BY student.media_bac HAVING (((student. student. Exemplu: Ordonaţi crescător studenţii din tabela student în funcţie de nume. pe specializări. student. student.nume.specializarea.

codc number. produse.codp)=[vanzari]. 7.codp)) and (cant*pret)=(select max(cant*pret) from vanzari).denp. Câţi clienţi are magazinul (se va folosi funcţia COUNT)? SELECT COUNT(*) AS Nr_clienti FROM clienti 4. se scrie comanda: INSERT INTO Facturi(Nr_fact. produse.codp. cant*pret AS valoare FROM produse. De exemplu. De exemplu. Creaţi tabela facturi utilizând comanda SQL descrisă Introduceţi date în tabela Facturi Realizaţi următoarele interogări: Clienţii a căror denumire începe cu litera „a” SELECT FROM clienti WHERE denc LIKE ”a*” 2. . Vânzarea cu cea mai mare valoare pentru produsul x SELECT produse. 14/09/2008. bursa) VALUES (5. nume. Max([cant]*[pret]) AS valoare FROM produse.denp HAVING (((produse. 11. data_n. vanzari WHERE (((produse. prenume.codp. Clienţii în a căror denumire apare litera „s” SELECT FROM clienti WHERE denc LIKE ”s*” 3. se introduce comanda: CREATE TABLE facturi(Nr_fact number.codp)=vanzari. dataf date) 2. specializarea. Codc.codp. "popovici".denp. Vânzarea cu cea mai mare valoare pentru toate produsele.denp)="caiet")) 5. pentru a popula cu date tabela creată mai sus. Pentru a introduce date într-o tabelă se utilizează comanda SQL INSERT. Instrucţiunea SQL de introducere a unei înregistrări în tabela studenti este: INSERT INTO student(nr_marca. "mng". SELECT produse. Am presupus că există un client cu codul 11.Se consideră tabelele cu structura descrisă mai jos: 1. media_bac. pentru crearea tabelei Facturi. vanzari WHERE (((produse. O tabelă se poate crea prin comanda SQL CREATE TABLE."andrei". produse.[codp])) GROUP BY produse. Dataf) VALUES (1000. 01/12/2007). 300) Se cere: a) b) c) 1.

[codp])) GROUP BY produse.codp.codc = vanzari. Care este situaţia facturilor pe clienţi şi pe zile? 11. Sum([cant]*[pret]) AS Valoare FROM clienti.codp.6.codc GROUP BY clienti. Care sunt zilele în care s-au întocmit cel puţin 2 facturi? 12. produse. Suceava sau Fălticeni? .denp.codp)=[vanzari].codp 9. 7. Valoarea totală a vânzărilor pentru produsul pâine SELECT produse.codc. vanzari WHERE produse. vanzari WHERE clienti. 8.codp = vanzari.denp HAVING (((produse. Totalul vânzărilor pe fiecare client SELECT clienti. Sum([cant]*[pret]) AS valoare FROM produse.codp GROUP BY produse. Care sunt firmele din Botosani. Sum([Cant]*[Pret]) AS Valoare FROM produse.codc. vanzari WHERE (((produse. Ce produse sunt pe factura clientului cu codul 11 eliberată in data de 01/01/2007? 10. Ce produse s-au vândut în valoare de peste 1000 lei? 13.codp. Totalul vanzarilor pe fiecare produs SELECT produse. produse.denp)="cuie")).

Sign up to vote on this title
UsefulNot useful