Câte ceva despre subquery

O subinterogare poate apărea într-o clauză:

  • SELECT
  • FROM
  • WHERE

Sintaxa ar fi următoarea:

Pentru a putea exemplifica câteva aspecte despre subquery vom crea tabelă, o vom popula cu câteva date, astfel încât să fie cât mai sugestive exemplele.

Creare tabelă

Populare cu date

1. Subquery scalar (Subquery cu un singur rând)

Un subquery scalar returnează zero sau un singur rezultat.

În acest exemplu, subquery-ul scalar calculează media salariilor pentru departamentul „IT”, iar rezultatul este folosit în cadrul interogării principale pentru a obține media salarială pentru fiecare angajat.

Dacă se doreşte redarea salariului mediu pentru fiecare angajat, se poate folosi următorul script:

Dacă dorim să exemplificăm interogarea în care să fie redat angajatul cu salariul maxim pe departament, se poate folosi interogarea următoare.

În acest exemplu, subquery-ul returnează un singur rând cu numele angajatului care are cel mai mare salariu pentru fiecare departament. Acest rezultat este utilizat în clauza SELECT principală pentru a obține o listă a departamentelor și angajatului cu salariul maxim pentru fiecare departament.

Este important de menţionat că astfel de subquery-uri implică adesea o performanță mai scăzută și pot fi necesare ajustări pentru a gestiona eficient seturi de date mari. 

2. Subquery pe rând

În acest exemplu, subquery-ul pe rând returnează perechile (departament, salariu) cu salariile maxime pentru un departament anume. Această subinterogare este utilizată în clauza WHERE pentru a selecta angajații cu cele mai mari salarii din departament, putând reda un singur rând.

Pentru a reda mai mult de un rând, este necesar operatorul IN,  în loc de folosirea operatorului de egalitate (=), astfel încăt să se verifice dacă o pereche (departament, salariu) se află în rezultatul subquery-ului. Acelaşi tip de interogare este cea pe tabel.

Un exemplu interesant de multiple-row subquery pentru tabela dată ar putea implica obținerea tuturor angajaților care au un salariu mai mare decât salariul mediu din departamentul lor ar putea fi următorul:

În acest exemplu, subquery-ul multiple-row calculează media salariilor pentru fiecare departament în parte. Apoi, în clauza WHERE a interogării principale, verificăm dacă salariul angajatului este mai mare decât media salariilor din departamentul său.

Această interogare va returna toți angajații care au un salariu mai mare decât media salariilor din propriul departament.

3. Subinterogare pe coloană

Returnează un set de coloane. 

În acest exemplu, subquery-ul pe coloană returnează toate salariile din departamentul „Vanzari”, iar rezultatul este utilizat pentru a selecta angajații din tabelul principal cu salariile corespunzătoare.

Pentru redarea multiple-column subquery pentru fiecare angajat, a numelui și salariului angajatului cu salariul maxim din același departament.

Un subquery returnează numele angajatului cu cel mai mare salariu din același departament, iar celălalt subquery returnează salariul respectiv.

4. Subquery pe tabel

Un subquery pe tabel returnează un set întreg de rezultate sub forma unui tabel temporar. În acest exemplu, subquery-ul table returnează departamentul și salariul maxim pentru fiecare departament. Această subinterogare este folosită în clauza WHERE pentru a selecta angajații cu cele mai mari salarii din fiecare departament.

Nested subquery

Un exemplu de nested subquery pentru tabela dată ar putea implica obținerea numelui angajatului cu cel mai mare salariu din departamentul cu salariul mediu maxim. 

În acest exemplu, avem un subquery nested (imbricat) care calculează salariul maxim global, apoi o altă subquery nested care calculează salariul maxim din fiecare departament pentru acea valoare globală. Interogarea principală compară salariul și departamentul pentru a găsi angajatul cu cel mai mare salariu în departamentul cu salariul mediu maxim.

 

Author: Ovidiu.S

Suficient de pasionat de această zonă profesională ca, în cazul în care ştiu ceva - cât de puţin - să împărtăşesc cu alţii.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *