Limbajul SQL în Microsoft Access

Studiu de caz: Interogarea bazei de date EMP (Angajați)

Mediul de lucru: Execuția interogărilor în MS Access

  1. Navigați la meniul Create (Creare) și selectați Query Design (Proiectare interogare).
  2. Închideți caseta de dialog "Show Table" / "Add Tables". (dacă apare)
  3. Comutați pe modul de vizualizare SQL făcând click pe SQL View din colțul din stânga-sus.
  4. Introduceți sintaxa SQL în editor și apăsați butonul Run (Rulare).

Structura Tabelei EMP

Tabela EMP conține datele resurselor umane ale unei organizații. Cunoașterea structurii este precondiția formulării corecte a interogărilor.

Nume Coloană Semnificație Tip de date (Exemplu)
EMPNOID-ul unic al angajatuluiNumeric (7369)
ENAMENumele angajatuluiText ('SMITH')
JOBFuncția ocupatăText ('CLERK')
MGRID-ul managerului directNumeric (7902)
HIREDATEData angajăriiDate/Time
SALSalariul de bazăNumeric (800)
COMMComisionul (dacă se aplică)Numeric (300)
DEPTNOID-ul departamentuluiNumeric (20)

1. Extragerea datelor: Clauzele SELECT și FROM

Instrucțiunea SELECT specifică coloanele ce urmează a fi returnate, iar FROM indică sursa datelor (tabela). Caracterul asterisc (*) se utilizează pentru a selecta toate coloanele disponibile.

SELECT ENAME, JOB, SAL
FROM EMP;

Aplicația 1.1

Extrageți numărul de identificare (EMPNO), numele (ENAME) și departamentul (DEPTNO) pentru toți angajații.

SELECT EMPNO, ENAME, DEPTNO FROM EMP;

Aplicația 1.2

Creați o interogare care să afișeze doar numele (ENAME) și salariul (SAL) întregului personal.

SELECT ENAME, SAL FROM EMP;

2. Restricționarea rezultatelor: Clauza WHERE

Clauza WHERE filtrează înregistrările pe baza unor condiții logice. Se folosesc operatori relaționali (=, <, >, <=, >=, <>) și logici (AND, OR, NOT). Atenție: În MS Access, șirurile de caractere se încadrează în ghilimele simple sau duble.

SELECT ENAME, JOB
FROM EMP
WHERE DEPTNO = 10;

Aplicația 2.1

Afișează numele și salariul angajaților care au un salariu strict mai mare de 2500.

SELECT ENAME, SAL FROM EMP WHERE SAL > 2500;

Aplicația 2.2

Afișează detaliile complete (toate coloanele) pentru angajații care ocupă funcția de 'MANAGER'.

SELECT * FROM EMP WHERE JOB = 'MANAGER';

Aplicația 2.3

Afișează numele, funcția și salariul angajaților care lucrează în departamentul 20 și au un salariu mai mare de 1000.

SELECT ENAME, JOB, SAL FROM EMP WHERE DEPTNO = 20 AND SAL > 1000;

3. Ordonarea rezultatelor: Clauza ORDER BY

Seturile de date pot fi sortate crescător (ASC, valoarea implicită) sau descrescător (DESC) folosind ORDER BY. Această clauză se plasează întotdeauna la finalul interogării.

SELECT ENAME, SAL
FROM EMP
ORDER BY SAL DESC;

Aplicația 3.1

Afișați lista tuturor angajaților, ordonată alfabetic după nume (ENAME).

SELECT * FROM EMP ORDER BY ENAME ASC;

Aplicația 3.2

Afișați numele, funcția și salariul, ordonând rezultatele mai întâi după funcție (JOB) crescător, iar apoi, în cadrul fiecărei funcții, după salariu (SAL) descrescător.

SELECT ENAME, JOB, SAL FROM EMP ORDER BY JOB ASC, SAL DESC;

4. Calcule statistice: Funcții de agregare

Funcțiile de agregare permit procesarea unor seturi de rânduri pentru a returna o singură valoare. Cele mai utilizate sunt: SUM (suma), AVG (media), COUNT (numărarea), MAX (maximul) și MIN (minimul). Prin intermediul cuvântului cheie AS putem crea aliasuri pentru coloanele calculate.

SELECT SUM(SAL) AS Buget_Total_Salarii
FROM EMP;

Aplicația 4.1

Determinați valoarea celui mai mare salariu și a celui mai mic salariu din companie.

SELECT MAX(SAL) AS Salariu_Maxim, MIN(SAL) AS Salariu_Minim FROM EMP;

Aplicația 4.2

Calculați salariul mediu la nivelul întregii companii. Denumiți coloana "Salariu_Mediu".

SELECT AVG(SAL) AS Salariu_Mediu FROM EMP;

Aplicația 4.3

Aflați numărul total de angajați care au funcția de 'SALESMAN'. (Atenție: necesită combinarea agregării cu filtrarea datelor).

SELECT COUNT(EMPNO) AS Numar_Vanzatori FROM EMP WHERE JOB = 'SALESMAN';

5. Structurarea pe categorii: Clauza GROUP BY

Pentru a aplica funcții de agregare pe subgrupuri de date (de exemplu: salariul mediu per departament), se utilizează clauza GROUP BY. Coloana după care se face gruparea trebuie să fie prezentă în clauza SELECT alături de funcția de agregare.

SELECT DEPTNO, COUNT(EMPNO) AS Nr_Angajati
FROM EMP
GROUP BY DEPTNO;

Aplicația 5.1

Determinați salariul mediu calculat pentru fiecare departament în parte (DEPTNO).

SELECT DEPTNO, AVG(SAL) AS Salariu_Mediu_Dept FROM EMP GROUP BY DEPTNO;

Aplicația 5.2

Aflați numărul de angajați repartizați pe fiecare tip de funcție (JOB).

SELECT JOB, COUNT(EMPNO) AS Numar_Angajati FROM EMP GROUP BY JOB;

Aplicația 5.3

Calculați fondul total de salarii (suma salariilor) pentru fiecare departament și ordonați rezultatul descrescător după suma obținută.

SELECT DEPTNO, SUM(SAL) AS Fond_Salarii FROM EMP GROUP BY DEPTNO ORDER BY SUM(SAL) DESC;