Extras din curs
Limbajul de manipulare a bazei de date (SQL-LMD)
Pasi de parcurs pentru crearea unei interogari SQL:
1. Din fereastra DATABASE se selecteaza QUERIES - DESIGN VIEW,
apoi din meniul QUERY- SQL Specific
2. Se selectează una din variantele:
UNION – pentru combinarea câmpurilor din mai multe tabele
PASS-THROUGH - trimite comenzile direct la un server SQL
DATA DEFINITION - creează, sterge, modifică un tabel
3. Se introduce interogarea SQL
4. Se salvează şi vizualizează.
5. Se lansează în execuţie.
I. Câteva aspecte recapitulative
Instrucţiuni pentru selectarea datelor - FRAZA SELECT
SELECT [ALL/DISTINCT/DISTINCTROW] listă atribute
FROM listă-tabele
[WHERE criteriu-de-căutare]
[GROUP BY criteriu-de-grupare]
[HAVING criteriu-de-grupare]
[ORDER BY criteriu-de-ordonare [ASC|DESC]];
Unde:
lista-atribute specifică atributele ale căror valori vor fi returnate;
FROM listă-tabele specifică tabelele din care se vor extrage datele;
WHERE permite prin precizarea unei expresii exprimarea criteriului de selecţie;
ORDER BY precizează atributul după care se va face ordonarea;
GROUP BY folosit pentru a partiţiona o tabelă în grupuri acordând acestora valori pe un atribut sau listă de atribute;
HAVING specifică criterii de selecţie pe grupuri de tupluri.
Exemple:
Toate rindurile tabelei Produse:
SELECT DISTINCTROW * FROM PRODUSE;
Numele şi preţul produselor având preţul mai mare de 10000:
SELECT DISTINCTROW [DEN PROD], PREŢ FROM PRODUSE WHERE PREŢ>10000;
În cazul în care doriţi să cunoaşteţi denumirea produselor cu preţuri între 19000 şi 110000 lei puteţi fie să introduceţi o expresie compusă în clauza WHERE, fie să utilizaţi operatorul between:
SELECT [DEN PROD] FROM PRODUSE WHERE PREŢ >=19000 AND PREŢ=<110000;
sau:
SELECT [DEN PROD] FROM PRODUSE WHERE PREŢ BETWEEN 19000 AND 110000;
În cazul în care doriţi să cunoaşteţi produsele ale căror preţuri sunt fie 110000, fie 150000, în clauza WHERE se va folosi operatorul IN:
SELECT [DEN PROD] FROM PRODUSE WHERE PREŢ IN (110000,150000);
Poate fi utilă solicitarea ordonării rindurilor după calitate şi preţ, pornind de la preţul cel mai mare din grupa de calitate respectivă:
SELECT DISTINCTROW * FROM PRODUSE ORDER BY CALITATE, PREŢ DESC;
În cazul în care se doreşte aflarea preţului maxim, minim şi mediu al produselor, blocul de cereri va utiliza funcţiile corespunzătoare:
SELECT DISTINCTROW MAX(PREŢ) AS [PREŢ MAX], MIN(PREŢ) AS [PREŢ MIN],
AVG(PREŢ) AS [PREŢ MEDIU]
FROM PRODUSE;
Prin clauza AS, în exemplul de mai sus, am putut modifica eticheta coloanelor ce returnează valoarea funcţiilor specificate.
Dacă doriţi să stabiliţi preţul maxim al produselor grupându-le pe calităţi utilizaţi în blocul de cerere clauza GROUP BY:
SELECT DISTINCTROW MAX(PREŢ) AS [PREŢ MAXIM], CALITATE
FROM PRODUSE
GROUP BY CALITATE;
De cele mai multe ori, însă, este necesar să extragem date stocate în mai multe tabele. Să presupunem că dorim să cunoaştem în ce cantităţi am livrat produse clienţilor şi care este valoarea facturată a fiecărui produs:
SELECT DISTINCTROW PRODFACT.[NR FACT], PRODUSE.[DEN PROD], PRODFACT.[CANT FACT], PRODUSE.PREŢ, PRODUSE.PREŢ*PRODFACT.[CANT FACT] AS VALOARE
FROM PRODUSE, PRODFACT
WHERE PRODUSE.[COD PRODUS]=PRODFACT.[COD PRODUS];
Observaţi în acest bloc de cerere utilizarea calificării atributelor (precedarea numelui lor de numele tabelei căreia îi aparţin) şi precizarea în clauza FROM a numelor celor două tabele sursă. Criteriul de compunere al celor două tabele este precizat în clauza WHERE.
Realizarea unor căutări mai complexe în baza de date presupune construirea unor subcereri în cadrul cererii iniţiale. Să presupunem că dorim să cunoaştem care sunt produsele cu preţul mai mare decât al merelor:
SELECT DISTINCTROW [DEN PROD], PREŢ
FROM PRODUSE
WHERE PREŢ > (SELECT PREŢ FROM PRODUSE WHERE [DEN PROD]=’MERE’);
Utilizarea predicatelor ALL, ANY, EXIST
Domeniul de obţinere a rezultatelor unei subinterogări poate fi influenţat prin precizarea unuia din cuvintele cheie: ALL, ANY şi respectiv EXIST.
- ALL
Se preiau rezultatele subinterogării şi, dacă acestea îndeplinesc condiţia cerută, se returnează valoarea logică True.
Exemplu :
Dacă dorim să cunoaştem numele produselor de calitatea întâi cu preţul mai mic decât al tuturor produselor de calitatea a 2-a cererea va avea următoarea formă:
SELECT [DEN PROD] FROM PRODUSE
WHERE CALITATEA=’1’AND PREŢ< ALL (SELECT PREŢ FROM PRODUSE WHERE CALITATEA=’2’);
- ANY
Are în vedere compararea valorii de ieşire a subinterogării cu fiecare înregistrare din interogarea externă. Dacă pentru fiecare înregistrare din interogare există un rezultat al subinterogării, se va returna valoarea logică True. Spre deosebire de clauza IN poate fi folosit cu diverşi operatori relaţionali. Cuvântul cheie SOME are acelaşi rol şi caracteristici ca ANY.
Preview document
Conținut arhivă zip
- Limbajul SQL.doc