Sunteți pe pagina 1din 4

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 Explicaţie
Comparaţie Conţine unul din cei şase operatori de comparaţie =, <> (diferit), >, <,
<=, >= (de ex. SELECT *FROM student Where media>9.2)
BETWEEN 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)
IN 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”))
LIKE 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*”)
IS NULL Determină dacă o expresie este nulă (adică valoarea ei este
necunoscută sau lipseşte: SELECT *FROM student WHERE nume IS
NULL)
EXISTS Verifică dacă o anumită înregistrare există în rezultatele returnate de o
subinterogare.

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
Poate apărea necesitatea ordonării rezultatelor obţinute. Ordonarea se realizează utilizând clauza
ORDER BY ASC/DESC.
Exemplu: Ordonaţi crescător studenţii din tabela student în funcţie de nume.
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.
Exemplu: Care sunt studenţii, pe specializări, cu media mai mare de 8.5

SELECT student.nume, student.prenume, student.specializarea, student.media_bac FROM student


GROUP BY student.nume, student.prenume, student.specializarea, student.media_bac HAVING
(((student.media_bac)>8.5));

HAVING operează la nivel de grupuri ce au fost create în prealabil cu clauza GROUP BY. Where
acţionează asupra câmpurilor ce îndeplinesc condiţia specificată în timp ce HAVING acţionează
asupra grupurilor.

Observaţie:
Pentru a scrie şi lansa în execuţie o interogare SQL trebuie parcurşi următorii paşi:
1. Din fereastra principală Access se alege Query apoi Create query in Design View
2. Nu se selectează nicio tabelă din fereastra Show Table şi se apasă butonul Close
3. Din bara de meniuri se alege meniul Query, opţiunea SQL specific apoi Data Definition. Se
va afişa o fereastră în care se va introduce interogarea SQL care se va lansa în execuţie cu
butonul Run (!)
Se consideră tabelele cu structura descrisă mai jos:

1. O tabelă se poate crea prin comanda SQL CREATE TABLE. De exemplu, pentru crearea
tabelei Facturi, se introduce comanda:
CREATE TABLE facturi(Nr_fact number, codc number, dataf date)
2. Pentru a introduce date într-o tabelă se utilizează comanda SQL INSERT. De exemplu,
pentru a popula cu date tabela creată mai sus, se scrie comanda:
INSERT INTO Facturi(Nr_fact, Codc, Dataf) VALUES (1000, 11, 01/12/2007). Am presupus că
există un client cu codul 11.
Instrucţiunea SQL de introducere a unei înregistrări în tabela studenti este:
INSERT INTO student(nr_marca, nume, prenume, data_n, specializarea, media_bac, bursa)
VALUES (5, "popovici","andrei", 14/09/2008, "mng", 7, 300)

Se cere:
a) Creaţi tabela facturi utilizând comanda SQL descrisă
b) Introduceţi date în tabela Facturi
c) Realizaţi următoarele interogări:
1. Clienţii a căror denumire începe cu litera „a”

SELECT FROM clienti WHERE denc LIKE ”a*”

2. Clienţii în a căror denumire apare litera „s”

SELECT FROM clienti WHERE denc LIKE ”s*”

3. Câţi clienţi are magazinul (se va folosi funcţia COUNT)?

SELECT COUNT(*) AS Nr_clienti FROM clienti

4. Vânzarea cu cea mai mare valoare pentru produsul x

SELECT produse.codp, produse.denp, Max([cant]*[pret]) AS valoare FROM produse,


vanzari WHERE (((produse.codp)=[vanzari].[codp])) GROUP BY produse.codp,
produse.denp HAVING (((produse.denp)="caiet"))

5. Vânzarea cu cea mai mare valoare pentru toate produsele.


SELECT produse.codp, produse.denp, cant*pret AS valoare FROM produse, vanzari
WHERE (((produse.codp)=vanzari.codp)) and (cant*pret)=(select max(cant*pret) from
vanzari);
6. Valoarea totală a vânzărilor pentru produsul pâine

SELECT produse.codp, produse.denp, Sum([cant]*[pret]) AS valoare FROM produse,


vanzari WHERE (((produse.codp)=[vanzari].[codp])) GROUP BY produse.codp,
produse.denp HAVING (((produse.denp)="cuie"));

7. Totalul vânzărilor pe fiecare client

SELECT clienti.codc, Sum([cant]*[pret]) AS Valoare FROM clienti, vanzari WHERE


clienti.codc = vanzari.codc GROUP BY clienti.codc;

8. Totalul vanzarilor pe fiecare produs

SELECT produse.codp, Sum([Cant]*[Pret]) AS Valoare FROM produse, vanzari


WHERE produse.codp = vanzari.codp GROUP BY produse.codp

9. Ce produse sunt pe factura clientului cu codul 11 eliberată in data de


01/01/2007?
10. Care este situaţia facturilor pe clienţi şi pe zile?
11. Care sunt zilele în care s-au întocmit cel puţin 2 facturi?
12. Ce produse s-au vândut în valoare de peste 1000 lei?
13. Care sunt firmele din Botosani, Suceava sau Fălticeni?